[BizTalk 高级开发技巧]Configuring an outgoing batch
要在BizTalk中实现对EDI X12文件的批量打包功能,可以按以下步骤配置和开发:
1)配置Party的X12 Properties>Party as Interchange Receiver>Interchange Batch Creation Settings
1.1配置Filter criteria
1.2配置Release criteria 为”External release trigger”
1.3注意:如果一个SendPort要订阅这个Party的Batch Transaction Set就要设置以下订阅条件
EDI.DestinationPartyName == MyPartA And
EDI.ToBeBatched == False1.4然后启动就可以了
2)循环业务数据,对于业务数据生成的每一个Transaction Set,要用Correlation Set在Orchestration中提升如下属性(需要引用两个程序集:
C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Edi.BaseArtifacts.dll
C:\Program Files\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Edi.BatchingOrchestration.dll)EDI.DestinationPartyId = Party’s Id
EDI.ToBeBatched = True
EDI.EncodingType = 0/1 –0 for EDI X12, 1 for EDI FACT
然后,Direct Send to MessageBox,最后想办法向表[BizTalkMgmtDb].[dbo].[PAM_Control]写入一条记录(你可以直接操作DB执行INSERT,也可以使用SQL Adapter的updategrams执行INSERT)。为什么要向表[BizTalkMgmtDb].[dbo].[PAM_Control]写入这么一条数据呢?
INSERT INTO [BizTalkMgmtDb].[dbo].[PAM_Control]
([DestinationParty]
,[EdiMessageType]
,[ActionType]
,[ActionDateTime]
,[UsedOnce])
VALUES
(18,0 --0 for EDI X12, 1 for EDI FACT
,’EdiBatchOverride’
,GETDATE()
,0)这是因为BizTalk EDI Application 中的Microsoft.BizTalk.Edi.BatchingOrchestration.BatchingService会在接收到下面这种消息时会对前面Direct Send 到 MessageBox的EDI XML 消息组装成一个包含多个Transaction Set消息,然后可以通过EdiSend发送到FileSystem或者FTP等等。
PAM Control Message:
<ControlMessage xmlns="http://sqlcontrolmessage.issueselect"/>
<PAM_Control>
<DestinationParty>18</DestinationParty>
<EdiMessageType>0</EdiMessageType>
<ActionType>EdiBatchOverride</ActionType>
<ActionDateTime>[yyyy-mm-ddThh:mms.sss]</ActionDateTime>
<UsedOnce>0</UsedOnce>
<ToBeBatched>1</ToBeBatched>
</PAM_Control>
</ControlMessage>
那么,这种消息是如何到MessageBox的呢?它的产生过程是这样的:BizTalk EDI Application 有一个SQL Adapter类型的Receive Location(BatchControlMessageRecvLoc),它默认会30秒执行一下存储过程BizTalkMgmtDb.dbo.edi_GetControlMessage,然后由这个存储过程产生一个ControlMessage 消息,然后经过BatchControlMessageRecvPipeline处理,然后进入MessageBox,然后BizTalk EDI Application 中的Microsoft.BizTalk.Edi.RoutingOrchestration.BatchRoutingService和Microsoft.BizTalk.Edi.BatchingOrchestration.BatchingService在收到这种BatchControlMessage后就会做相应的路由和打包处理。它会将多个EDI XML处理成一个带有IAS,GS等头部信息的EDI Message,然后可以通过一个使用EdiSend Pipeline的SendPort将这个EDI Message处理成X12发送到FileSystem或者FTP等等。这个SendPort需要使用如下订阅条件:
EDI.DestinationPartyName == MyPartA And
EDI.ToBeBatched == False
如果要接收多个Party的这种Batch EDI Message可以设置多组这种订阅条件!
参考资料:(1)http://msdn.microsoft.com/en-us/library/bb226357(BTS.20).aspx
(2)http://blog.biztalk-info.com/archive/2009/01/29/BizTalk_2006_R2_X12_EDI_Batching.aspx
(3)http://www.biztalkgurus.com/blogs/biztalksyn/archive/2009/05/15/outbound-edi-batching-tutorial.aspx
Thanks for your reading! This is just my learning note.
posted on 2010-03-12 22:17 James.H.Fu 阅读(568) 评论(0) 编辑 收藏 举报