本文通過一個簡單一實例,介紹Biztalk應用中調用程式集的方法。
雖然Biztalk Server提供了眾多的內建功能,然而在一些情況下可能還需要調用程式集中的函數。因為在.Net程式集中,可以非常方便地調用Web Service、訪問資料庫;另一方面,有些函數是程式集中已經寫好的,為了增加軟體的複用,便於軟體版本的管理,使用現有的程式集也在情理之中。
本文通過一個簡單一實例,介紹Biztalk應用中調用程式集的方法。這個執行個體完成的功能,可以實現,只不過實現的方式用所差別,一個是調用Web Service,一個是調用.net程式集。
首先,我們建立一個MyFunction的項目,其中只包括一個的類檔案class1,我們要在Biztalk中調用該類的CheckUserId靜態方法。class1的來源程式如下:
using System; namespace MyFunction{ public class UserManager { public UserManager() { } public static string CheckUserId(string strUserId) { if (strUserId == "fengfangfang") { return "Administrator"; } else { return "User"; } } }}
為程式集設定強式名稱和發布.Net程式集到全域組件快取可參見將程式集安裝到全域組件快取(GAC)中一文。
然後,建立一個Biztalk Server工程CallFunction,添加一個UserInfo.xsd,其結點結構如下:
UserInfo
UserId
RoleName
快速升級UserId和RoleName兩個子欄位元素,具體步驟可參見調用Web Services一文。
下面建立一個商務程序MainOrch.odx,在商務程序視圖中建立兩個訊息InMsg和OutMsg,這兩個訊息均使用CallFunction.UserInfo訊息類型。在商務程序中建立一個接收操作ReceiveInMsg、一個發送操作SendOutMsg,在二者之間建立一個訊息賦值操作AssignOutMsg,同時會產生一個構造訊息作業,命名為ConstructOutMsg,構造的訊息為OutMsg。設定ReceiveInMsg啟用為True。
為工程CallFunction添加.Net引用,找到MyFunction.dll,添加到引用中。編寫AssignOutMsg的運算式如下:
OutMsg = InMsg;
OutMsg(CallFunction.PropertySchema.RoleName)= MyFunction.UserManager.CheckUserId(InMsg(CallFunction.PropertySchema.UserId));
建立一個接收埠InPort用於串連接收操作、一個發端連接埠OutPort用於串連發送操作。兩個連接埠均使用Microsoft.BizTalk.DefaultPipelines.XMLTransmit管道,接收地址為c:\in\*.xml,發送地址為c:\out\%SourceFileName%。
編譯並布署Biztalk Server工程CallFunction,啟動CallFunction.MainOrch商務程序,進行測試:
測試檔案fengfangfang.xml
<ns0:UserInfo xmlns:ns0="http://CallFunction.UserInfo">
<UserId>fengfangfang</UserId>
<RoleName></RoleName>
</ns0:UserInfo>
輸出為
<ns0:UserInfo xmlns:ns0="http://CallFunction.UserInfo">
<UserId>fengfangfang</UserId>
<RoleName>Administrator</RoleName>
</ns0:UserInfo>
測試檔案fengff.xml
<ns0:UserInfo xmlns:ns0="http://CallFunction.UserInfo">
<UserId>fengff</UserId>
<RoleName></RoleName>
</ns0:UserInfo>
輸出為
<ns0:UserInfo xmlns:ns0="http://CallFunction.UserInfo">
<UserId>fengff</UserId>
<RoleName>User</RoleName>
</ns0:UserInfo>