2009-02-19 47 views
2

我正在尝试构建一个从Sharepoint列表中填充具有数据的字段的Infopath表单。我设置了一个从Sharepoint数据源填充值的下拉列表框。这部分工作正常。现在,我希望其他字符串字段在用户从列表中选择其中一个项目时自动填充。
所以我建立了一个规则来做到这一点。我写了一个XPath公式抢从SharePoint列表基于属性的XPath节点元素索引

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

的问题是,这始终抓住从列表中的第一项属性(PNP_String)的属性。我想根据用户的选择用适当的打印机(Base_Printers)填充它。所以我必须索引到Base_Printers,然后选择PNP_String。所以我试过这个

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

它会索引到第二项并返回PNP字符串,这太棒了!
但我需要索引用户选择了元素,所以我尝试这样做:

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

凡@Printer是SharePoint列表的属性,我的:basePrinter是下降的局部变量的InfoPath向下名单。那对我来说什么都不做。当我尝试一个文字值:

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

它选择了正确的pnp字符串。
所以我的问题是,我怎么能根据用户的选择索引到打印机数组?

感谢

+0

你能澄清吗?我是对的吗?您想要在所有打印机的节点列表中获取用户选定的打印机索引? – 2009-02-19 14:54:19

+0

用户从下拉框中选择一个字符串,该字符串对应于XML中的@Printer属性。所以我不能硬编码这个名字。我不认为我可以得到infopath下拉列表的索引,所以我想要使用这个名称,正如我在展示的示例 – 2009-02-19 15:05:13

回答

1

我想我想通了。

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

一些奇怪的原因,它的工作原理,当你使用:

@Printer = current() 

但不是当你使用:

@Printer = my:basePrinter 

尽管两个电流()和我:basePrinter返回同一字符串。

古怪...

0

默认情况下,XPath不继承来自周围环境的情况下(例如当地的InfoPath变量)。

在XSLT中,处理器提供一种机制来允许您填充全局(即在根节点中定义的)xsl:变量声明,然后在XPath中以$ name的形式提供该声明。

因为我不知道我的InfoPath不能更具体,但它应该(通过实例即使只是间接地)被记录...

另外请注意,您可以使用,在谓词(内用自己的谓词[]),全位置路径,因此,如果选择的值可在同一文件中,你可以使用,像

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