BizTalk开发系列(五) 属性字段

    在根据消息内容进行路由的时候经常使用的是可分辨字段和属性字段。属性字段可以在各个 BizTalk Server 组件(包括管道和业务流程)中进行访问。属性字段还可用于消息路由。如果需要在上下文(而不是在业务流程)中访问升级的消息数据,必须创建一个或多个属性架构来描述要升级的数据。

       消息上下文中的每个属性均由以下三个部分构成:名称、命名空间和值。例如:

<Property Name="InterchangeID" Namespace=http://schemas.microsoft.com/BizTalk/2003/system-properties Value="{AC07BF30-2F1A-42B0-8390-191EF38BA839}"/>

    现在我们来谈一下属性字段的使用,“属性字段”的方法升级属性需要创建属性架构。所有属性升级作都是通过“升级属性”对话框来完成。您可以通过使用消息架构中 Schema 节点的“升级属性”来访问该对话框。








1.创建属性架构

      属性架构是一种与消息架构相关联的特殊架构。它用于将实例消息中的特定值升级到消息上下文中。属性升级提供了一种集中机制,通过该机制,您可以从实例消息中请求所定义的关键信息,并使其可更方便地被负责对通过 BizTalk Server 的消息进行处理的 BizTalk Server 组件访问。

clip_image001

2.升级属性字段

       在“升级属性”对话框中,确保已选中对话框右侧的“属性字段”选项卡。然后,确保相应的属性架构已包含在“属性字段”选项卡顶部的“属性架构列表”中。如果需要,请使用文件夹按钮通过“BizTalk 类型选取器”对话框来选择相应的属性架构。

     接下来,展开对话框左侧的架构树中的节点选择您要升级为属性字段的“字段元素”节点或“字段属性”节点,然后单击“添加”。最后,使用“属性-字段字典”表的“属性”列中的下拉列表选择属性架构中与升级属性关联的“字段元素”节点。

clip_image002

 

3.属性字段的使用

    设置完属性字段与架构元素或属性之间的关联之后,即可在通过访问消息的上下文属性访问或设置该属性的值。注意消息的架构与升级为属性字段的架构一致。

clip_image003

 

      可以将属性架构中的“记录”节点升级为“字段元素”节点,但只有在“记录”节点的“内容类型”属性设置为 SimpleContent 的情况下才可进行此操作。

      在一个架构中,可以对同一属性升级多次,只要所有这些升级都是在不同的根节点下进行即可。这是因为消息是根据单个根节点进行验证的,只有在该根节点下升级的属性才会在运行时进行评估。

升级为属性之后会添加两部分

clip_image005

4.测试属性字段及其在路由中的应用

     输入的XML消息

      <ns0:Root xmlns:ns0="http://MultiPartMsgTest.Sch_One2">
         <Field1>Field1_0</Field1>
         <Field2>Field2_0</Field2>
      </ns0:Root>

   

     在发送端口的筛选器中使用升级属性,用于路由消息。

clip_image006

     在发送商口设定不同的输出文件名

clip_image007

      验证消息处理

clip_image008

     5.可分辨字段与属性字段的区别

下表概括出了属性字段与可分辨字段之间的区别,可如果需要更灵活的基于内容的路由可以采用属性字段,如果只是关键节点值的读取与赋值的话则可分辨字段比较合适。

属性

属性字段

可分辨字段

IsPromoted 属性

True

False

大小限制

255 字符

无限制

用于路由

用于跟踪

在业务流程中使用

需要属性架构

可通过管道和端口进行访问

参考资料《BizTalk Server 2006 Documentation》

posted on 2008-09-17 02:08 Gary Zhang 阅读(1248) 评论(14) 编辑 收藏

评论

#1楼  回复 引用   

请问Biztalk中的"路由"到底是什么意思呢?搞了很久没明白这个意思.tks
2008-12-26 13:47 | JJK-2[未注册用户]

#2楼[楼主]  回复 引用 查看   

@JJK-2
路由指的是将一个消息从一个端口传递到另一个或者多个端口. 也就是传递消息的意思.
2008-12-26 13:49 | Gary Zhang      

#3楼  回复 引用   

照你说的,那就是说可分辨字段不能传递到另一端口,可是我试了是可以的.不知道是否我理解错误.TKS
2008-12-26 17:36 | JJK-2[未注册用户]

#4楼[楼主]  回复 引用 查看   

@JJK-2
可分辨字段不参与路由,你在发送端口的筛选窗口中不能看到你升级的可分辨字段但是属性字段则可以。也就是说可分辨字段不能作为订阅条件。 你说的传递到另一个端口是什么意思?
2008-12-26 21:42 | Gary Zhang      

#5楼  回复 引用   

谢谢。我的意思是可分辨字段的值可以发送到另一端口
2008-12-27 00:30 | JJK-2[未注册用户]

#6楼  回复 引用   

btw:你说的订阅条件是指配置物理发送端口时“筛选器”里设置的条件么?
2008-12-27 00:34 | JJK-2[未注册用户]

#7楼[楼主]  回复 引用 查看   

@JJK-2
是的,这是最直观的一个了。当然其他地方也可以设置。
2008-12-27 09:02 | Gary Zhang      

#8楼  回复 引用 查看   

系列四和五感觉看不太懂,最好先有些铺垫的东西。
2009-10-20 15:41 | hobase      

#9楼[楼主]  回复 引用 查看   

@hobase
嗯,系列四、五需要比较理解发布订阅机制会好一点。没事有不明白的地方可以互相交流一下。
2009-10-26 09:55 | Gary Zhang      

#10楼  回复 引用 查看   

Hi 前辈,
学了这个部分之后,我有如下问题:
我对 Promote propery 中的"Distinguished Fields" 和"Property Fields",我所知道的就是当我把Field Attribute 或者Field Element升级到这两个中的时候,我在Orchestration中的组件中就可以直接访问到他们,比如Message_1.Field2,但是我不知道他们两个有什么区别,在那个情况下使用哪个?
谢谢您 ^_^
2010-03-10 15:36 | 香槟      

#11楼[楼主]  回复 引用 查看   

@香槟
文中不是已经介绍了吗?一个只是指向而以,另一个是直接在消息上下文中的。全局可以使用。
2010-03-12 12:58 | Gary Zhang      

#12楼  回复 引用 查看   

Hi 前辈,
对于这个问题,我找了好些资料,但是没有一个比较直观的认识。


消息属性

除了组成消息的各个部分之外,系统中的每条消息都附带有一个属性集,称为消息上下文。 这些属性的值是从消息本身提取或与消息本身相关的值。 例如,适配器将属性放入与消息接收操作相关的上下文中,例如接收消息的位置和用于接收消息的适配器类型。 可将属性写入上下文中,也可将其升级到上下文中。 这两个选项之间的区别在于:升级的属性可用作消息路由中的条件,而写入的属性则不能。

将值写入或升级到上下文中的概念与 BizTalk 编辑器中的升级属性相关,但不完全相同。 在 BizTalk 编辑器中,Schema中的Element和Attribute可以标记为升级属性[Property Fields]或可分辨字段[Distinguished Fields]。 如果消息架构中包含标记有 PropertyField 批注的项,则将导致管道拆装器[Decode/Encode]将升级的属性放入上下文中。 如果消息架构中包含标记有 DistinguishedField 批注的项,则将导致管道拆装器将写入的属性放入上下文中。

希望您可以提供一个Demo,可以对比着看一下他们的区别。
2010-03-12 13:13 | 香槟      

#13楼[楼主]  回复 引用 查看   

@香槟
看来我这个Demo写得还的够清楚。呵呵
2010-03-12 16:04 | Gary Zhang      

#14楼  回复 引用 查看   

Hi 前辈,
今天我突然顿悟了,我已经明白了您所表达的思想了,谢谢您^_^
2010-03-14 15:46 | 香槟      

导航

公告


本Blog所有内容,若无特殊说明,均为原创。如需转载,请注明作者和出处,且保证内容完整!如有其他用途,请联系作者: cbcye@live.com













昵称:Gary Zhang
园龄:4年1个月
粉丝:63
关注:2

我的标签

随笔分类(89)

随笔档案(117)

BizTalk资源

IBM Learning Resource

积分与排名

  • 积分 - 128953
  • 排名 - 773

最新评论

阅读排行榜