IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

InfoPath .NET Discussion :

Listes en cascade [IP-2010]


Sujet :

InfoPath .NET

  1. #1
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut Listes en cascade
    Bonjour,

    J'ai une série de liste en cascade qui amène à préciser
    des choix pour en venir à une liste restreinte de choix.

    Les 3 premiers champs utilisent chacun une connexion de donnée
    filtrée, mais il me reste 2 autre niveaux que j'aurais aimé simplifié
    pour ne pas avoir des miliers de combinaisons à créer dans mes liste SP.

    Donc, pour le 4e niveau, je croyais utiliser plusieurs valeurs dans le champs, ce qui me donnerait

    4e niveau: item1, item2, item3...

    et chacun des items de cette ligne offrent les mêmes choix
    pour le 5e niveau: ex. Choix A, B, C...

    Je me demande donc s'il est possible de regrouper des choix
    (séparé par des virgules) dans un seul champs au lieu de tous les énumérer:

    item1 -> Choix A
    item1 -> Choix B
    item1 -> Choix C
    item2 -> Choix A
    ...

    Donc, item1, item2, item3 = Choix A, B, C

    et de traiter le tout avec une condition du style:
    si Niveau4 contien "item3", alors affiche choix A, B & C.

    Merci d'avance

    Cordialement,
    Jacques

  2. #2
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Malheureusement sans faire de code, je dirai que votre besoin n'est pas réalisable.
    En effet, par conception, une connexion de données sur une liste SharePoint n'est autre qu'un fichier XML peuplé à partir des éléments de liste. InfoPath s'attend à recevoir la structure extensible et ne pourra pas travailler sur le découpage des éléments séparés par des virgules sur chaque ligne: Il prendra les lignes une par une dans leur globalité.

    Pour réaliser votre besoin, il sera nécessaire de remodeler la connexion de données en parsant le contenu de votre liste via du code managé.
    voici la logique utilisant un fichier XML que vous pourrez peupler avec les données de votre liste:
    http://www.bizsupportonline.net/info...opath-2007.htm

    Je vous l'accorde, cela rajoute énormément de boulot pour le faible avantage...
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  3. #3
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour Rémi,

    En complément, je me demandais s'il est possible de garder le tout en mémoire,
    ou si je dois obligatoirement créer un fichier XML. Je crains les collisions
    lorsque plusieurs employés utiliseront le système (le XML généré
    étant différent pour presque chaque usager).

    Je vous l'accorde, cela rajoute énormément de boulot pour le faible avantage...
    Ahhh mais n'est-ce pas le propre de l'informaticien de se casser la tête pour que les usagers aient la vie facile?

    Cordialement,
    Jacques

  4. #4
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Je crains de ne pas comprendre! Le fichier XML que vous positionnez dans le formulaire est créé dynamiquement en source de données à chaque ouverture de formulaire. Du coup, aucune "collision" n'est possible!
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  5. #5
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    J'ai travaillé l'exemple que vous pointiez, mais j'accroche au moment d'assigner la valeur au noeud.

    Donc, à l'aide d'une connexion de donnée, j'ai lié ma zone déroulante au fichier XML "vide", ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8" ?>
    <options>
    <option><value/><displayname/></option>
    <option><value/><displayname/></option>
    </options>
    Puis, j'efface le premier item, je duplique l'item restant et y assigne mes valeurs:
    Les valeurs stockées dans un tableau, sont passées en paramètre

    AddItem(mesVar(inc), mesVar(inc))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public sub AddItem(......
    ....
     Dim nouvNoeud As XPathNavigator = field1.Clone()
     nouvNoeud.SelectSingleNode("value").SetValue(itemId)
    C'est alors que je recois le message:

    Message: L'opération n'est pas valide en raison de l'état actuel de l'objet.
    Source: Microsoft.Office.InfoPath.Client.Internal.Host.Interop

    En mode Debug, "nouvNoeud" est bien identique à "field1"
    Lorsque j'essai l'exemple tel que décrit, tout va bien!

    Cordialement,
    Jacques

  6. #6
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Hum hum étrange,

    Il faut vérifier éventuellement si le NamespaceManager n'est pas nécessaire au moment d'affecter la valeur:
    nouvNoeud.SelectSingleNode("value",NamespaceManager).SetValue(itemId)

    Il peut s'agir aussi d'un problème de "Namespace" devant le champ "value".
    Je n'ai pas la machine virtuelle adéquate afin de tester ce code.
    Si vous n'arrivez toujours pas à le faire fonctionner, vous pouvez utiliser ce code (que j'utilise sur mes projets):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // Exécution de la connexion de données (si cela n'est pas fait lors de la création)
    DataConnections[strDataConnectionName].Execute();
    XPathNavigator navOptions = DataSources[strDataConnectionName].CreateNavigator().SelectSingleNode("//OPTIONS", NamespaceManager);
     
    // Recherche du namespace
    string myNameSpace = navOptions.GetNamespace("dfs");
    XmlNamespaceManager nsMgr = new XmlNamespaceManager(new NameTable());
    nsMgr.AddNamespace("dfs", myNameSpace);
    XNamespace xmlns = (XNamespace)navOptions.GetNamespace("dfs");
     
    // Ajout d'un item dans la collection (en Linq : ajouter la réf : System.Xml.Linq)
    XElement XOption = new XElement(new XElement(xmlns + "OPTION",
           new XElement(xmlns + "VALUE", itemid),
           new XElement(xmlns + "DISPLAYNAME", itemvalue)));
    navOptions.AppendChild(XOption.ToString());
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  7. #7
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour Rémi,

    J'ai essayé avec ...("value",NamespaceManager)... et toujours le même message!

    ... et j'ai essayé le bout de code que tu fournissais, mais je suis en VB... et je crois
    que ton code est pour C#.... me faudrait un convertisseur C# / VB

    Cordialement,
    Jacques

  8. #8
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Salut,

    Désolé, en effet, je code en C# par habitude.
    Un petit tour ce site et le tour est joué : http://converter.telerik.com/ (enfin sur le papier!)

    Cordialement,
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  9. #9
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour Rémi,

    Très intéressant ce lien pour convertir C# vs VB (et vice-versa)... merci!

    Malheureusement quelques erreurs demeurent.

    Je dois faire un "Imports System.Xml.Linq"... mais le système m'affiche le messge:
    "L'espace de nom ou le type spécifié dans les Imports 'System.Xml.Linq' ne contient aucun membre public ou est introuvable..."

    Ce qui fait que j'ai des erreurs sur les éléments "XNamespace" et "XElement"

    Le code converti en VB est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim navOptions As XPathNavigator = DataSources(strDataConnectionName).CreateNavigator().SelectSingleNode("//OPTIONS", NamespaceManager)
     
    ' Recherche du namespace
    Dim myNameSpace As String = navOptions.GetNamespace("dfs")
    Dim nsMgr As New XmlNamespaceManager(New NameTable())
    nsMgr.AddNamespace("dfs", myNameSpace)
    Dim xmlns As XNamespace = DirectCast(navOptions.GetNamespace("dfs"), XNamespace)
     
    ' Ajout d'un item dans la collection (en Linq : ajouter la réf : System.Xml.Linq)
    Dim XOption As New XElement(New XElement(xmlns + "OPTION", New XElement(xmlns + "VALUE", itemid), New XElement(xmlns + "DISPLAYNAME", itemvalue)))
    navOptions.AppendChild(XOption.ToString())
    Cordialement,
    Jacques

  10. #10
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonsoir,

    En effet, il manque une référence à linq dans le projet VB.NET.
    Pour la rajouter, il faut aller dans VSTA puis cliquer sur le menu "Projet" puis cliquer sur "Propriétés".
    Ensuite, se placer dans l'onglet "Références" et ajouter la référence "System.Xml.Linq".

    Ensuite, vous pourrez utiliser ce code (validé avec succès sur un formulaire de test en VB):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim itemId As String = "MonItemID"
    Dim itemvalue As String = "MonItemValue"
    Dim navOptions As XPathNavigator = DataSources("OPTIONS").CreateNavigator().SelectSingleNode("//options", NamespaceManager)
     
    ' Recherche du namespace
    Dim myNameSpace As String = navOptions.GetNamespace("dfs")
    Dim nsMgr As New XmlNamespaceManager(New NameTable())
    nsMgr.AddNamespace("dfs", myNameSpace)
    Dim xmlns As XNamespace = navOptions.GetNamespace("dfs")
     
    ' Ajout d'un item dans la collection (en Linq : ajouter la réf : System.Xml.Linq)
    Dim XOption As New XElement(New XElement(xmlns + "option", New XElement(xmlns + "value", itemid), New XElement(xmlns + "displayname", itemvalue)))
    navOptions.AppendChild(XOption.ToString())
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  11. #11
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour Rémi,

    Après modification, la compilation ne donne plus d'erreur.

    Malheureusement, à l'exécution, l'erreur persiste sur cette ligne:

    navOptions.AppendChild(XOption.ToString)

    Avec le message: L'opération n'est pas valide en raison de l'état actuel de l'objet.

    Cordialement,
    Jacques

  12. #12
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Je vous ai mis ma solution en pièce jointe. Pas de soucis de mon côté lors de l'ajout...

    Cordialement,
    Fichiers attachés Fichiers attachés
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  13. #13
    Membre régulier
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Points : 112
    Points
    112
    Par défaut
    Bonjour Rémi,

    Effectivement ton fichier fonctionne bien... et si je fais un fichier très basique
    tout fonctionne bien.... donc, je me rabat sur une liste moins compliquée!

    Merci,
    Jacques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MCD + Listes en cascades
    Par Myster Jo dans le forum IHM
    Réponses: 13
    Dernier message: 31/07/2008, 14h50
  2. zone de liste en cascade
    Par alexkickstand dans le forum IHM
    Réponses: 2
    Dernier message: 11/06/2008, 18h03
  3. [AJAX] listes en cascades
    Par lebreton22 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 26/12/2007, 12h27
  4. [Hibernate] Pb avec List et cascade
    Par mauvais_karma dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/04/2006, 16h02
  5. Réponses: 2
    Dernier message: 08/03/2006, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo