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

可以在业务流程中使用表达式来以各种方式对消息进行操作。

引用消息字段

可以通过将字段名称追加到消息名称来引用消息中的可分辨字段,如下所示:

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 项目中,添加对公共类的引用,并从业务流程中的表达式形状调用 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 编译时期间收到错误。

另请参阅

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