2009-02-19 75 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]]