EDI 类型(数据元素)验证
EDI 接收管道和 EDI 发送管道对事务集数据元素执行 EDI 验证。 此验证是通过验证页上的“ 验证 (”页上的“ 事务集设置” 部分下的“X12”或“EDIFACT 协议”) ,为来自或发送到特定一方的所有消息配置此验证。 如果未在“验证”页中选择“EDI 类型验证”属性,则不会执行本主题中所述的数据验证。
通过在“协议属性”对话框的双向协议选项卡的“验证”页中选择“EDI 类型验证”属性,为传入消息和传出消息启用 EDI 类型验证。 默认情况下,为传入消息和传出消息选择此属性,以便默认启用 EDI 验证。
验证检查
当 EDI 接收管道或 EDI 发送管道执行 EDI 验证时,将验证下列各项:
由架构的 EDI 属性定义的数据类型
长度限制
空数据元素和尾部分隔符
注意
该验证不会检查代码集(枚举)或最小/最大出现次数。
字符集
为执行 EDI 数据元素验证,EDI 接收和发送管道要求按如下方式建立字符集:
对于 EDIFACT,字符集是在“协议属性”对话框的单向协议选项卡的“字符集和分隔符”页的数据元素 UNB1 中建立的,如果尚未) 建立协议,则 (“EDIFACT 回退设置”对话框。
对于 KEDIFACT,字符在“协议属性”对话框的单向协议选项卡的“字符集和分隔符”页的数据元素 UNB1 中建立,与 EDIFACT 一样。 UNB1.1 元素的值必须设置为
KECA
。对于 X12,字符集是针对管道属性中的消息建立的。
注意
BizTalk 运行时对消息执行 EDI 验证时,将使用在管道属性中选择的 X12 字符集。 但是,使用在该对话框的“字符集和分隔符”页中选择的字符集来验证在“协议属性”对话框的页中输入的属性。 在运行时,管道将忽略“协议属性”对话框的“X12 字符集”属性和“分隔符”页的值。 如果这两个设置 (即“ 协议属性 ”对话框中的 X12 字符集属性设置为 “扩展 ”,而管道属性中的 X12 字符属性设置为 “基本) ”,则可能会导致消息验证错误。
数据类型验证
对于 X12,将在架构中批注以下 EDI 数据类型,以供接收或发送管道中的拆装器/组装器组件验证:数字、十进制、标识符、字符串、日期、时间、二进制和复合数据。
对于 EDIFACT,将在架构中批注以下 EDI 数据类型,以供接收或发送管道中的拆装器/组装器组件验证:字母、数字、标识符、字符串和复合数据。
长度限制
对于 X12 和 EDIFACT,必须验证元素或子元素,以确定其是否符合长度(最小和最大)要求。 长度定义为占用的字符位置数。 长度不包括符号和十进制符号。
注意
对于 X12_AN 字符串数据类型,可以在任何段中保留前导空格并允许使用尾部空格,以满足最小长度要求。
对于 KECA,长度解释为字节数。 例如,如果长度定义为 3,则元素或子元素可以包含三个单字节字符或一个双字节字符和一个一字节字符的组合。
空数据元素和尾部分隔符验证
对于 X12,实例中标记为必需的数据元素不能为空(如果段存在)。 如果数据元素为复合数据,则必须至少有一个组件数据元素为值。
对于 EDIFACT,将排除非值和条件可选的数据元素(和子组件),但保留分隔符。
对于 X12 或 EDIFACT,推荐使用尾部分隔符,但不是必需的。
禁用 EDI 类型验证时
如果停用 EDI 类型验证,EDI 接收管道或 EDI 发送管道将处理 EDI 类型验证查出有错的数据元素,而不会挂起正在处理的消息。
注意
即使 EDI 类型验证已禁用,仍会执行 EDI 结构验证。 即使 EDI 类型验证已禁用,未通过基本结构验证的交换也会被挂起。
将在不挂起消息的情况下处理的一些错误包括:
意外/未定义的事务集
段/循环和数据元素级别的意外/未定义数据
段/循环和数据元素级别的可选性(最小和最大出现次数)
数据元素级别的长度(最小/最大)违规(数据长度超出最大级别或低于最小级别)
数据元素级别的数据类型不匹配(ID 数据类型除外,该类型具有其自己的控件)
数据元素级别的无效枚举列表。
如果在接收端禁用 EDI 类型验证,但在发送端启用该验证,当 XML 文件包含错误时,EDI 发送管道无法将接收管道生成的 XML 重新处理成有效的 EDI 文件, 进而导致发送管道生成错误。
如果禁用 EDI 类型验证,EDI 接收管道或发送管道将按如下方式处理错误:
意外数据 | 操作 |
---|---|
意外/未定义事务集 | 即使尚未部署 EDI 接收或发送管道的架构,该管道仍将接受事务集。 |
意外段/记录 | 接收管道将生成具有相应前缀的标记:<UnexpectedSegment_%SegmentID%。> 发送管道将使用 XML 标记名称的前一至三个字符作为段名称。 |
意外简单数据元素 | 接收管道将生成一个 XML 标记,其中包含前缀、段标识符和索引,表示数据元素在段中的位置: <UnexpectedDataElement_%FieldName%。 |
意外复合数据元素 | 接收管道将生成一个 XML 标记,其中包含前缀、段标识符和索引,表示数据元素在段中的位置: <UnexpectedCompositeDataElement_%FieldName%。 |
缺少必需数据 | 管道将此数据视为可选数据。 |
数据元素长度违规 | 管道将无效数据元素长度视为有效(最小 = 0,最大 = 不受限制)。 |
实例中的无效枚举值(适用于 ID 数据类型) | 管道将忽略错误,并继续处理。 |
实例中的“最大”重复违规 | 管道将此类重复数据视为有效(最小出现次数 = 0,最大出现次数 = 不受限制)。 |
错误报告
关闭 EDI 类型验证后,BizTalk Server不会报告事件查看器中的错误,而是报告警告。 此外,确认将“接受”报告回源参与方,并在 X12 997 或 UCI.4、UCM.3 中将 AK501 和 AK901 设置为“E”,在 EDIFACT CONTRL 中将 UCF.4 设置为“7”。 因此,将消除在将来传输中进行纠正的任何可能。 但是,消息接收方可以通过手动干预更正文档,而不是拒绝或挂起消息。 此外, Edi.ErrorsInTransactionSet
如果 EDI 接收管道遇到任何这些错误,则将提升上下文属性。 如果遇到 EDI 或扩展验证错误,该属性将升级为“True”。 如果未遇到任何错误,该属性将升级为“False”。
如果接收或发送管道遇到意外数据,将报告父级别错误,并忽略子级别错误,如下所示:
意外数据 | 操作 |
---|---|
意外事务集 | 确认报告此错误,并忽略段/循环和数据元素级别的后续错误。 |
意外段/循环 | 确认报告此错误,并忽略数据元素级别的错误。 |
意外数据元素 | 确认报告此错误,并忽略与属性相关的复合错误(如 ID、长度和出现次数等)以及与复合数据元素字段(如果适用)相关的错误。 |