我正在尝试构建一个Infopath表单,该表单使用Sharepoint列表中的数据填充字段。我设置了一个下拉列表框,其中的值将从Sharepoint数据源填充。那部分工作正常。现在,我想在用户从列表中选择一个项目后自动填充其他字符串字段。
所以我建立了一个规则来做到这一点。我写了一个XPath公式来从Sharepoint列表中获取属性
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列表中的属性,而my:basePrinter是下拉列表的本地infopath变量。这对我没什么用。当我尝试字面值时:
.../dfs:Base_Printers[@Printer='XYZ']/@PNP_String
它选择了正确的pnp字符串。
所以我的问题是,如何根据用户的选择将索引编入索引?
由于
答案 0 :(得分:1)
我想我已经明白了。
xdXDocument:GetDOM("Base Printers")/dfs:myFields/dfs:dataFields
/dfs:Base_Printers[@Printer = current()]/@PNP_String
出于某些奇怪的原因,它可以在你使用时起作用:
@Printer = current()
但不是在你使用时:
@Printer = my:basePrinter
即使current()和my:basePrinter都返回相同的字符串。
...怪诞
答案 1 :(得分:0)
默认情况下,XPath不会从周围环境继承上下文(例如本地信息转换变量)。
在XSLT中,由处理器提供一种机制,允许您填充全局(即在根节点中定义)xsl:variable声明,然后在XPath中将其作为$ name。
由于我不知道InfoPath我不能更具体,但应该记录(即使只是间接通过例子)......
另请注意,您可以在谓词(在[]内部)中使用具有自己谓词的完整位置路径,因此如果所选值在同一文档中可用,则可以使用它,例如
.../dfs:base_printers[@printer=/theform/theCombo/Values[@selected=true]]