自定义Biztalk输出文件名称
Biztalk的消息可以落地生成文件,在默认的情况下文件名称是随机生成的,这有两个缺点:
1、这个随机文件名称是由%MessageID%.xml生成的一个没有规律的随机字符串,而且前后一个大括号{},实在不美观,比如:{A1710270-B19D-4AAB-A7F1-28EC66771F1E}.xml。
2、在实际项目应用的时候,为了查找问题,有时候往往需要一个一个把报文打开来看。如果报文数量比较少,这种方式还可以对付,但如果有几百个报文,甚至更多的时候,这个就费事了。这个在实际项目应用中是非常常见的。
解决办法:通过定义有意义的报文名称来快速定位报文。
建议的文件名称:业务单号+状态字段+随机数
其中 1、业务单号:是你项目中业务的唯一编号,比如报关单,出库单号,订单号等等。
2、状态字段:是这个业务单号的所处的某个状态,因为一个业务单号在数据传输过程中往往有好多状态,比如:出库单号有(未出库,已出库)等状态。
3、随机数:为了避免文件名称重复。
注:为什么没有把时间放在命名当中,主要考虑到在目录中已经有时间了,再放到名称中是个浪费。
项目演示: 先定义一个简单的schema,其中有a,b,c,d四个元素,然后在输出文件名称中使用a,b两个元素。
一、在vs005中新建一个Biztalk项目:Biztalk.Demo1
二、定义一个简单的schema:
schema1
有a,b,c,d四个元素
- <xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Biztalk.Demo1.Schema1" targetNamespace="http://Biztalk.Demo1.Schema1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="Root">
- <xs:complexType>
- <xs:sequence>
<xs:element name="a" type="xs:string" />
<xs:element name="b" type="xs:string" />
<xs:element name="c" type="xs:string" />
<xs:element name="d" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
三、将a,b两个元素显示升级
四、添加流程Orch1
五、定义消息和变量
定义消息:
Message_1:消息类型为Biztalk.Demo1.Schema1
Message_2:消息类型为Biztalk.Demo1.Schema1
定义变量:
MyGuid:类型为System.Guid
六、设置消息赋值
注意:第二行和第三行不能合并为一行:
Message_2(FILE.ReceivedFileName) = Message_1.a+Message_1.b+"_"+System.Guid.NewGuid().ToString();
按理论上是可以的,但实际上就是不行,就分开来写吧!
七、编译部署
注意:在输出端口SendPort1文件名称为:%SourceFileName%.xml,不是默认的%MessageID%.xml
八、运行结果
注意:在输出目录下文件名称
九、总结
如果不在消息赋值的使用随机数,也可以在端口绑定的使用%SourceFileName%%MessageID%.xml来定义,但输入的文件名称有两个大括号{}。不信你自己试试!
演示代码下载
