任意 XPath 屬性處理常式 (BizTalk Server 範例)
「任意 XPath 屬性處理常式」(BizTalk Server 範例) 會示範如何撰寫自訂管線元件,以針對提交給 BizTalk Server 的 XML 文件升級特定屬性。 您可以使用範例中包含的功能來建立自訂規則、組合器和解譯器元件,以評估 XPath 運算式。
此範例的用途
此範例包含要進行處理的訂單 (PO) XML 文件 DocInstance.xml, 並且會使用下列步驟來處理 DocInstance.xml:
BizTalk Server 接收埠擷取 DocInstance.xml,再由名為「任意 XPath 屬性處理常式」的自訂管線元件處理。
任意 XPath 屬性處理常式元件會使用 PO 架構中定義的任意 XPath 運算式來升級所有 < Price > 和 < Quantity > 元素。 這個 XPath 運算式也包含位置建構,可搭配 PO 文件根項目的模稜兩可子項目使用。
任意 XPath 屬性處理常式元件判斷訊息類型,並將它升級為訊息內容。
該元件接著將 XML 文件以及升級後的項目傳送至協調流程進一步處理。
協調流程存取 PO 文件中的已升級項目,然後計算 PO 中的項目總數。
協調流程建立新的 PO 文件,其中包含原始 PO 的資訊以及已更新的總計。
將新的 PO 文件寫入至 \Output 目錄中的檔案。
可在何處找到此範例
< 範例 Path >\Pipelines\ArbitraryXPathPropertyHandler
下表顯示此範例中的檔案,並描述其用途。
檔案 | Description |
---|---|
ArbitraryXPathPropertyHandler.sln | 自訂管線元件解決方案檔案。 |
ArbitraryXPathPropertyHandler.resX | 資源檔。 |
ArbitraryXPathPropertyHandlerComp.cs | 主要元件實作。 |
AssemblyInfo.cs | 組件資訊。 |
Cleanup.bat | 範例清除檔。 |
PromotingMap.cs | 做為原生 CLR 型別對應實作的屬性升級。 |
PropertyAttributes.cs | 自訂屬性 (Attribute)、屬性 (Property) 描述元和 ICustomTypePropertyDescriptor 實作。 |
SchemaMap.cs | 從訊息類型到 IDocumentSpec 的結構描述對應,以解析結構描述模稜兩可的情形。 |
Setup.bat | 建置和安裝範例管線元件。 |
VirtualStream.cs | 虛擬資料流實作。 |
SeekableReadOnlyStream.cs | 可搜尋的唯讀資料流實作。 |
ArbitraryXPathSample.sln | 範例協調流程解決方案檔案。 |
CalculateTotalAmount.odx | 範例協調流程。 |
PODocument.xsd | 訂單結構描述。 |
DocInstance.xml | 範例訂單執行個體。 |
建置和初始化此範例
此範例的設計目的是在BizTalk Server環境中執行,並在相同電腦上執行SQL Server。 如果您的環境不符合此組態,則必須修改「任意 XPath 屬性處理常式」(BizTalk Server 範例),以指向正確的 SQL Server 電腦。
重要
Setup.bat 會假設您的 Microsoft Windows 安裝目錄為 C:\Windows。 如果您的 Windows 安裝在其他目錄,則必須修改 ArbitraryXPathPropertyHandler.csproj 檔案,以在全域組件快取中反映 Microsoft.BizTalk.Component.Utilities 組件的位置。 在 Reference 元素中,將 SYSTEMROOT > 變更 < 為安裝 Windows 的位置 (,例如 C:\WINNT\) 。
<Reference
Name = "Microsoft.BizTalk.Component.Utilities"
AssemblyName = "Microsoft.BizTalk.Component.Utilities"
HintPath = "<SYSTEMROOT>\assembly\GAC\Microsoft.BizTalk.Component.Utilities\3.0.1.0__31bf3856ad364e35\Microsoft.BizTalk.Component.Utilities.dll"
/>
請使用下列程序,建置並初始化「任意 XPath 屬性處理常式」(BizTalk Server 範例)。
若要建置並初始化這個範例
在命令視窗中,將目錄 (cd) 變更為下列資料夾:
< 範例 Path >\Pipelines\ArbitraryXPathPropertyHandler
執行檔案 Setup.bat,這會執行下列動作:
建置「任意 XPath 屬性處理常式」管線元件。
將建置的管線元件複製到< 安裝路徑 >\管線元件目錄。
建立傳送埠和接收埠。
建立在範例中使用的輸入和輸出目錄。
安裝範例 BizTalk Server 協調流程 ArbitraryXPathSample。
將連接埠繫結至範例協調流程。
啟動協調流程。
注意
建置和初始化期間應不會出現任何錯誤。 如果發生錯誤,請確定您已安裝所有必要軟體,而且 Microsoft 建置工具也位於路徑上。
注意
若要復原 Setup.bat 所做的變更,您必須先從 BizTalk Server 管理主控台停止並重新啟動主機實例。 接著,執行 Cleanup.bat。 您必須先執行 Cleanup.bat 才能再度執行 Setup.bat。
執行此範例
請使用下列程序,執行「任意 XPath 屬性處理常式」(BizTalk Server 範例)。
執行此範例
將訂單 (PO) 檔案 DocInstance.xml 複製到 \Input 目錄。 接收埠會取用這個 PO 檔案,然後將 XML 資料傳送到「任意 XPath 屬性處理常式」管線元件。
檢視 \Output 目錄中的內容。 請注意,這時會建立新的檔案,其中包含您先前複製到 \Input 目錄之 DocInstance.xml 檔案的所有資訊。 檔案的差異在於,現在 < TotalAmount > 元素已填入 PO 的總金額。
註解
標準 XPath 運算式是簡單的運算式,例如 「/*[local-name () ='element-name' 和 namespaceURI () ='' http://MyUri.org ]/*[local-name () ='element-name']/@*[local-name='attribute-name']」。
任意 XPath 運算式則可以複雜如 "//element-name//*[local-name()='element-name' and position()=2]"。 事實上,如果您的架構在 XPath 主體或 XPath 屬性中使用非標準 XPath,您將會收到執行階段錯誤,指出 BizTalk Server您的架構不支援非標準 XPath 運算式。 要支援任意 XPath 運算式,解決方法是建立自訂解譯器和組合器元件,以支援任意 XPath 主體和任意 XPath 屬性運算式。
此範例會在 實作 IComponent.Execute 時,使用自訂管線元件中的下列步驟順序:
透過輸入訊息內文部分資料流建立虛擬可搜尋資料流 (由於輸入訊息可能很大而且資料流可能無法搜尋,因此它應該只佔用少量的記憶體,而且能夠變更資料流位置)。
建立新的外寄訊息並為其建立新的內文部分、指派虛擬資料流給新的內文部分、複製內文部分屬性以及複製訊息內容。
取得輸入訊息的結構描述,或根據設計階段指定的結構描述。
將資料流程載入System.Xml 的實例 。XmlDocument。
逐一查看升級後的屬性和辨別欄位,再將它們升級或寫入至外寄訊息的訊息內容中。
傳回外寄訊息。
將外寄訊息寫入檔案。