如何使用運算式來執行訊息指派
您可使用運算式在協調流程中以各種方式處理訊息。
指稱訊息欄位
您可將欄位名稱附加至訊息名稱,來指稱訊息中的不同欄位,方法如下:
MyMsg.Amount
在此範例中,MyMsg 是訊息,Amount 是已被識別為 MyMsg 所依據之訊息類型的辨別欄位。
指派至訊息和訊息部分
您可以將訊息直接指派至另一訊息,或將訊息部分直接指派至另一個訊息部分:
MyMsg=IncomingMsg;
MyMsg.Invoice=IncomingMsg.Invoice;
在此範例中,Invoice 是以結構描述為依據的訊息部分。
若您想修改已建構的訊息 (例如已接收之訊息) 之屬性,您必須在 [建構訊息] 圖形中,將第一個訊息指派至第二個訊息來建構新訊息,然後在相同的 [建構訊息] 圖形內修改新訊息的屬性。
注意
您不能對訊息欄位進行指稱或指派 (例如 MyMsg.Invoice.MyField),除非這些訊息欄位已經升級;您只能對整個訊息、訊息部分、升級的訊息屬性或辨別欄位進行指稱或指派。
新增訊息部分
您可以使用 XLANGs.BaseTypes.XLANGMessage.AddPart 方法,將其他元件新增至現有的多部分訊息。 若要這樣做,請執行下列動作:
建立 C# 專案,並新增 Microsoft.XLANGs.BaseTypes 的參考。
實作類似於以下的公用類別:
public class MyAddPartHelper { public static void AddPart(XLANGMessage msg, object part, String partName) { msg.AddPart(part, partName); } }
Microsoft.XLANGs.BaseTypes.AddPart有三個多載方法:
public void AddPart(object part, String partName); public void AddPart(XLANGPart part); public void AddPart(XLANGPart part, String partName);
在您的 BizTalk 專案中,新增公用類別的參考,並從協調流程中的Expression圖形呼叫AddPart方法,如下所示:
MyAddPartHelper.AddPart(myMessage, myStringObject, “StringObject1”);
注意
您無法將非可序列化的物件或自訂格式化物件新增為訊息部分。 使用 AddPart 方法新增其他元件之前,必須先初始化所有靜態元件。 只有在訊息的建構陳述式中,您才可以新增任意部分至此訊息。 不支援在訊息建構陳述式的外面新增其他部分。
擷取訊息部分
您可以使用Microsoft.XLANGs.BaseTypes中的RetrieveAs方法,從現有的多部分訊息擷取訊息元件。 若要這樣做,請執行下列動作:
建立 C# 專案,並新增 Microsoft.XLANGs.BaseTypes 的參考。
實作類似於以下的公用類別:
Public class MyAddPartHelper { public static Object GetPart(XLANGMessage msg, string sName, Type t) { XLANGPart p = msg[sName]; return p.RetrieveAs(t); } public static Object GetPart(XLANGMessage msg, int partIndex, Type t) { XLANGPart p = msg[partIndex]; return p.RetrieveAs(t); } }
注意
RetrieveAs方法支援依名稱和索引擷取訊息元件。
在您的 BizTalk 專案中,新增公用類別的參考,並從協調流程中的Expression圖形呼叫GetPart方法,如下所示:
sPart = (System.String) MyAddPartHelper.GetPart(msg, "StringObject1" , typeof(System.String)); //sPart is a type of System.String sPart = (System.String) MyAddPartHelper.GetPart(msg, 1, typeof(System.String)); //Retriving the message part with index = 1
訊息部分內容屬性存取
訊息部分的內容與訊息內容不同。 當您將相關聯專案的Property Schema Base屬性設定為PartCoNtextPropertyBase時,可以透過架構編輯器建構訊息元件內容屬性。
存取和訊息屬性類似,都是透過如下的運算式:
Msg.PartName(myPartContextProperty)
例如:
Str=Msg.PartName(myPartContextProperty); //assumes myPartContextProperty is of type string
XLANGMessage 內容屬性存取
如果您想要從程式碼存取 XLANGMessage 介面中的訊息屬性,您可以將訊息當做 Microsoft.XLANGs.BaseTypes.XLANGMessage 類型的參數傳遞至運算式圖形的方法,然後使用 Microsoft.XLANGs.BaseTypes.XLANGMessage 方法 SetPropertyValue 和 GetPropertyValue 來達成此目的。 若要這樣做,請執行下列動作:
建立 C# 專案,並新增 Microsoft.XLANGs.BaseTypes 和 Microsoft.BizTalk.GlobalPropertySchemas 的參考。
使用類似以下的程式碼來存取內容屬性:
MyMsg.GetPropertyValue(typeof(BTS.MessageID)); MyMsg.SetPropertyValue(typeof(MIME.IsMultipartRelated), true);
注意
如果您想要取得或設定自訂內容屬性,您需要新增對屬性結構描述專案的參考,或是新增對組件 (此組件包含 C# 專案中的屬性結構描述) 的參考。
指派至訊息屬性
您可以將某個值指派至訊息屬性:
MyMessage(MySchemaNamespace.MyProperty)=True;
在BizTalk Server中,您可以參考並指派值給多部分訊息的 MIME 屬性:
Message_Out.MessagePart_1(MIME.FileName)="document.doc";
注意
BizTalk 訊息是由訊息內容和訊息部分所組成。 您必須先初始化訊息部分,然後才可以取得或設定任何訊息內容屬性,否則您在 XLANG 編譯時會收到錯誤。