对方发出的报文(XML)文件带一个消息头(MessageHeader)对于业务本身只需要消息体的内容(<BodyConent>节点下的内容)。
发给对方的报文同样需要加这个消息头,业务消息放在消息体(<BodyConent>)里面)
下面通过简单Schema定义和Mapping实现对XML消息的分拆和组装。不需要额外开发自定义管道组件或代码。
1定义带消息头的Schema,也可以称是一个Envelope Schema,注意BodyConent下面需要加一个Any Element节点用于表示封装的消息体内容。
2设置Schema的Envlope 属性为true。
3设置Body XPath属性,拆分获取消息体的节点
4定义一个业务报文,BodyConent下内容的Schema
4设定完这些就可以实现报文的分拆了,配置接收,发送端口就不在这里写了。
输入的实例报文如下
输出的将2个BodyMsg的报文。
这里就是将输入BodyMsg报文输出时加上报文头。
这样的封装消息在BizTalk并没有现成的配置可以实现,一般的解决方案是通过自定义管道组件来实现或在流程里面通过代码写消息赋值表达式来实现。
下面我要演示的是通过自定义MAP实现,不用写代码。
1新建map,比如还需要将业务报文的这段map到消息头的某个字段上。
2通过编辑XSL mapping脚本文件,这里的XSL语法就不再这里说明了。
xsl:copy-of
Used to copy a result-tree fragment or node-set into the result tree. This performs a "deep copy," meaning that all descendants of the current node are copied to the result tree.
3配置接收发送端口,在接收端口上选择这个部署上去的MAP1
4输入一个BodyMsg报文 输出的就是这个Header报文,这里并不能将多个BodyMsg报文组合到一个Header报文中
当你对XML,XPath,XSL越是深入了解越会发现BizTalk真的越发强大,而且开发越是简单高效。
希望对BizTalk开发人员有所帮助。