2009-02-19 10 views
2

J'essaie de créer un formulaire Infopath qui remplit les champs avec des données provenant d'une liste Sharepoint. J'ai mis en place une liste déroulante dont les valeurs sont remplies à partir d'une source de données Sharepoint. Cette partie fonctionne bien. Maintenant, je veux que d'autres champs de chaînes soient automatiquement remplis une fois que l'utilisateur a sélectionné l'un des éléments de la liste.
Donc, j'ai mis en place une règle pour le faire. J'ai écrit une formule XPath pour saisir l'attribut dans la liste SharepointXPath Indexation d'éléments de noeuds basée sur l'attribut

xdXDocument:GetDOM("Base Printers") 
/dfs:myFields/dfs:dataFields/dfs:Base_Printers/@PNP_String 

Le problème est que cela prend toujours l'attribut (PNP_String) du premier élément de la liste. Je veux le remplir avec l'imprimante appropriée (Base_Printers) basée sur la sélection de l'utilisateur. Je dois donc indexer dans Base_Printers, puis choisir PNP_String. J'ai donc essayé cette

.../dfs:Base_Printers[2]/@PNP_String 

Il indexera dans le 2ème point et retourner cette chaîne PNP, ce qui est génial!
Mais j'ai besoin d'indexer à l'élément l'utilisateur choisi, alors j'ai essayé ceci:

.../dfs:Base_Printers[@Printer=my:basePrinter]/@PNP_String 

Où @Printer est l'attribut dans la liste des sharepoint, et mon: basePrinter est la variable InfoPath locale de la chute vers le bas liste. Et ça ne fait rien pour moi. Lorsque j'ai essayé une valeur littérale:

.../dfs:Base_Printers[@Printer='XYZ']/@PNP_String 

Il a choisi la bonne chaîne pnp.
Donc, ma question est, comment puis-je indexer dans ce tableau d'imprimantes en fonction de la sélection de l'utilisateur?

Merci

+0

Pouvez-vous clarifier un peu? Ai-je raison de vouloir obtenir l'index de l'imprimante sélectionnée par l'utilisateur dans la liste de sélection de toutes les imprimantes? –

+0

L'utilisateur sélectionne une chaîne dans la liste déroulante, cette chaîne correspond à l'attribut @Printer dans le fichier XML. Je ne peux donc pas coder en dur le nom. Je ne pense pas que je puisse obtenir l'index de la liste déroulante infopath, donc je veux utiliser le nom, comme dans les exemples que je montrais –

Répondre

1

Je pense que je compris.

xdXDocument:GetDOM("Base Printers")/dfs:myFields/dfs:dataFields 
/dfs:Base_Printers[@Printer = current()]/@PNP_String 

Pour une raison étrange, il fonctionne lorsque vous utilisez:

@Printer = current() 

Mais pas lorsque vous utilisez:

@Printer = my:basePrinter 

Même si les deux cours() et mon: basePrinter retourner la même chaîne. Weirdness ...

+0

Je pense que ce qui se passe est: Attribute! = Node, mais Attribute.string = = string –

+0

C'est ce que je pensais, mais j'ai utilisé la fonction string() pour convertir, et ça ne fonctionnait toujours pas! –

0

Par défaut XPath ne hérite pas de contexte (par exemple des variables InfoPath locales) de l'environnement. Dans XSLT, il appartient au processeur de fournir un mécanisme permettant de remplir les déclarations xsl: variables globales (c'est-à-dire définies dans le nœud racine) qui sont ensuite disponibles dans XPath sous le nom $ name.

Comme je ne sais pas InfoPath je ne peux pas être plus précis, mais il doit être documenté (même si seulement indirectement par des exemples) ...

Notez également que vous pouvez utiliser, dans les prédicats (à l'intérieur les []), les chemins complets de localisation avec leurs propres prédicats, donc si la valeur sélectionnée est disponible dans le même document que vous pouvez l'utiliser, quelque chose comme

.../dfs:base_printers[@printer=/theform/theCombo/Values[@selected=true]]