Biztalk 可以做EAI,也可以做B2B。 做EAI的话,是企业内部的一个信息Hub或者总线。如果做B2B的话,则相当于企业对外的一个Gateway。不同的partner有不同的平台或者标准以及设置。所以biztalk除了做集成之外,还要去管理这些契约和元数据。
假定企业A使用EDI来跟不同的上下游做集成和信息交换。EDI经常会问几个问题?
- 这家企业使用的是那个版本?EDI有好多版本。对应到Biztalk就是我收到这家企业的EDI之后,该用哪个Schema来解释
- 使用X12还是EDIFact
- 要不要处理double posting的问题。
- Batch Inbound/outbound 处理。
- 要不要ACK
- 文件格式,换行时CR,还是CRLF等。
面对这个问题,Biztalk R2的EDI是通过一个新的Party识别机制来实现的。
每个Party都有具体的设定针对以上问题。Biztalk通过设别Party,从而应用该Party的设置。
我们看一下典型的EDI头。
ISA*00* *00* *01*Fedex *ZZ*Montaque *070607*1555*U*00401*000000025*0*T*>~
IS5-6事实上说sender是谁?比如*01*Fedex
*ZZ*Montaque * 则是说发给谁。 因为一家公司可能有不同的子公司。后面其实有00401 说明是什么版本。
Biztalk的Party识别就是基于这两个信息。首先看有没有一个party设置,完全匹配 Sender 和 receiver。
如果完全匹配,则使用该Party的设置。以上截图说明我们正好有个party叫Fedex。他的发送和接受完全匹配。设置其默认schema用来解析EDI。
一般来说一个party通常我们制定其Targetnamespace都一样。不同的文件,810还是850再做详细的剪裁。
然后如果Sender和Receiver不完全匹配。我们可能只指定Sender,Receiver为空。这时候适合一家公司下面有多个子公司,vendor发给你的时候,Biztalk作为Gateway忽略这些不同。
如果我们希望多个Sender来自不同的公司,使用一样的一组设置。那么可以设定QualifiedName
如果这些都没做,那么系统会默认使用Global Setting。
如何知道接收的消息所以那个Party呢? 一旦一个消息被解析为特定的一个party之后,该message会有一个PromotedProperty,叫做PartyName,比如下图所示。如果任何一个都没有被命中的话,则显示为Guestparty。
R2 EDI 很大程序上依赖这个party设置。包括AS2. 所以了解这个party解析算法很重要。
以上提到的是接受来自partner的EDI。 在party setting中称为Sender Setting。
如果是发送呢?
怎么知道该用哪个party的设置发送给Vendor?
这个正好反过来。你需要在系统中Promote PartyName,如果没有party的话,则会用Global的 Receiver Setting。
这里的Sender和Receiver是相对Biztalk 来说。 Sender 表示有个partner 发送消息给Biztalk。biztalk事实上是接受消息。这时候的IS5-8 是来识别Party。
Receiver表示有个partner需要加收Biztalk的消息。biztalk则是发消息给他。 这时候的IS5-8 是来制定EDI上的头。