EDI in Biztalk 2006 R2 举了一个简单的例子。 通过裁剪满足特定vendor格式的EDI Schema,接受EDI转换成XML。
这时候的EDI很简单。
ISA*00* *00* *01*Fedex *ZZ*Montaque *070607*1555*U*00401*000000025*0*T*>~
GS*IN*Fedex*Montaque*20070607*1555*25*X*004010~
ST*810*0025~
N1*SF*COMPANY X~
N3*P.O. BOX 12345~
N4*ANYTOWN*OH*45678~
IT1*1*0.528*TS*1.13**VP*1AGHA1223221~
CTT*1~
SE*7*0025~
GE*1*25~
IEA*1*000000025~
只有一个Group,Group中只有一个Transaction Set。 如果包含多个TransactionSet,Biztalk是怎么处理呢
假设EDI文件改为以下格式。一个GS中,有三个TransactionSet。
ISA*00* *00* *01*Fedex *ZZ*Montaque *080529*0927*U*00401*000000014*0*T*>~
GS*IN*Fedex*Montaque*20080529*0927*14*T*00401~
ST*810*0014~
N1*SF*Montaque~
N3*16839 E Gale Ave. 91745~
N4*ANYTOWN*OH*45678~
IT1*1*0.528*TS*1.13**VP*1AGHA1223221~
CTT*1~
SE*7*0014~
ST*810*0015~
N1*SF*Montaque~
N3*16839 E Gale Ave. 91745~
N4*ANYTOWN*OH*45678~
IT1*1*0.528*TS*1.13**VP*1AGHA1223221~
CTT*1~
SE*7*0015~
ST*810*0016~
N1*SF*Montaque~
N3*16839 E Gale Ave. 91745~
N4*ANYTOWN*OH*45678~
IT1*1*0.528*TS*1.13**VP*1AGHA1223221~
CTT*1~
SE*7*0016~
GE*3*14~
IEA*1*000000014~
在Batch Inbound的时候,EDIReceiver Pipeline首先识别Party,然后找到该Party的Setting。默认是会Split成N个单独的消息。每个消息包含一个TransactionSet。
如果把上面的EDI丢到Biztalk的话,他会产生三个消息。
每个消息包含一个TS。比如
而我们也可以把它设置为。Preserver interchange,后面两个选项。告诉你出错的时候,刮起对应的Interchange还是TS。
这时候再处理的话,就会看大他把几个消息放在一个文件中。
这个设置会牵涉到系统的设计。如果Vendor给一个包含10000个TS的EDI文件是启动一个Orchestration 实例处理,还是启动10000个。
一个的话,需要自己写一个Loop,而且load一个这么大的文件到内存。性能也不好。好处是实例数很少。