2

我目前正在 BizTalk Server 2010 中实施 EDI 解决方案。这是场景:

BizTalk 负责 X.400 邮箱和客户的 ERP 软件之间的正确消息路由。它还用于使用 SharePoint Web 服务将有关交换消息的信息放入 SharePoint 站点。
我正在使用角色链接和 BizTalk 方管理来应用正确的设置(发送端口、UNB6 段中的密码等)。

现在我有以下问题:
当我尝试从客户的 ERP 系统中获取传出的 INVOIC 消息,提取编排中的相关信息并将其写入 SharePoint 站点时,使用 EDI 接收管道的接收端口会暂停,并显示以下内容错误信息:

An output message of the component "EDI disassembler" in receive pipeline 
"**********.Pipelines.FileNamePromotionEDIReceivePipeline, **********.Pipelines, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=****************" is suspended 
due to the following error: 
     Error: 1 (Miscellaneous error)
     33: Invalid occurence outside message, package or group.
The sequence number of the suspended message is 1. 

发生这种情况是因为消息在每个段分隔符之后使用 CR 和 LF 作为后缀。现在我可以将 CR 和 LF 的 ASCII 十六进制代码添加到管道的“EfactDelimiters”设置中,但问题是还有其他没有 CR 和 LF 的消息,然后无法使用相同的管道接收这些消息。顺便说一句,当我使用管道获取其中一条没有CR 和 LF 的消息时,也没有将 CR 和 LF 设置为分隔符,接收端口也被挂起,这一次由于使用点而不是逗号而导致错误消息小数分隔符(尽管我在管道中启用了“UseDotAsDecimalSeparator”选项)。同样,只有更改 EfactDelimiters 才有帮助。

我认为当事方协议中的“字符集和分隔符”页面应该使这成为可能:为每个业务方单独设置分隔符。但是我在这些设置中所做的更改似乎没有任何效果。我将“UNA6 Suffix”设置为“CR LF”,将“Decimal Notation (UNA3)”设置为“.(Decimal)”,重新启动主机实例......同样的问题。

任何人都可以帮忙吗?

4

1 回答 1

0

我从未使用过 biztalk,但我知道我的 EDIFACT,而且据我所知,那些包含 CR/LF 的消息在语法上是错误的。UNA6 后缀似乎是 Microsoft 的补充,因为我在UNECE的 EDIFACT 的官方文档中找不到它的踪迹。

通常,您想在 EDIFACT 消息中用作特殊字符的字符由特殊(可选)UNA段设置,该段始终位于首位。当您编写时,您设置分隔符/定界符,我真的不知道您的意思是什么,因为它可以指设置已创建消息的选项(消息中使用哪些定界符),设置定界符用于接收程序解析,或者它可以引用在UNA段中打印的字符。

知道,在该UNA段中,我无法知道使用任何 UNA6 后缀(如文档中明确指出的那样,该UNA段的长度必须恰好为 9 个字符,请参阅8.3 交换格式规则)。这使我得出结论,您为创建的消息设置了选项。如果可以避免的话,我不建议使用 UNA6 后缀。人类阅读消息可能很好,但它不属于那里,对机器阅读没有用处。

如果接收程序没有选项允许 CR/LF 的可选发生,并且您无法避免将这些消息混合到某种消息中,那么除了以某种方式插入一个摆脱 CR 的小程序外,我认为您没有其他方法/如果。

最重要的原则当然是让发送程序和接收程序用相同的语法说话,否则无法工作。小数点分隔符的问题也是如此。从语法规则 10.1开始,允许使用逗号或点,这是一个非常宽松的定义。如果你想在保存方面,发送一个UNA片段,指定你使用哪个,然后只使用那个。

我不太确定,这对您解决具体问题有多大帮助,因为它可能只是一个关于如何配置biztalk的问题,但我认为一些背景信息应该是有用的。

于 2013-07-16T15:23:56.000 回答