如何使用表达式执行消息分配

可以在你的编排中使用表达式来以多种方式处理消息。

参考消息字段

通过在消息名称后附加字段名称,可以引用消息中的特定字段,如下所示:

MyMsg.Amount  

在此示例中,MyMsg 是消息,而 Amount 是一个字段,它被标识为 MyMsg 所基于的消息类型的特有字段。

分配消息和消息部分

您可以将一条消息直接分配给另一条消息,或者将一个消息部分分配给另一个消息部分。

MyMsg=IncomingMsg;  
MyMsg.Invoice=IncomingMsg.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 项目中,添加对公共类的引用,并从业务流程中的表达式形状调用 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 项目中,添加对公共类的引用,并从编排中的表达式形状调用 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  
    

消息部件上下文属性访问

消息部件具有独立于消息上下文的上下文。 将关联元素的属性架构基属性设置为PartContextPropertyBase时,可以通过架构编辑器构造消息部件上下文属性。

访问与消息属性相似,如下所示:

Msg.PartName(myPartContextProperty)  

例如:

Str=Msg.PartName(myPartContextProperty); //assumes myPartContextProperty is of type string  

XLANGMessage 上下文属性访问

如果要从代码访问 XLANGMessage 接口的消息属性,可以将消息作为 类型为 Microsoft.XLANGs.BaseTypes.XLANGMessage 的参数传递给表达式形状中的方法,然后使用 Microsoft.XLANGs.BaseTypes.XLANGMessage 方法 SetPropertyValueGetPropertyValue 来实现此目的。 为此,请执行以下操作:

  • 创建 C# 项目并添加对 Microsoft.XLANGs.BaseTypesMicrosoft.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 编译期间会收到错误。

另请参阅

在业务流程中使用消息
在用户代码中构造消息