EDI 消息结构

EDI 消息由信封和一系列分层结构元素组成。信封包含一组头部和尾部,每组都描述并包含一个结构元素。这些结构元素如下所示:

EDI 消息的层次结构允许对事务集/消息和组进行批处理。即使一个交换只包含一个事务集/消息和一个组,该交换也具有与批处理时完全相同的基本结构元素,不同的是,它不会有多个事务集/消息或组元素。

EDI 的头部和尾部

EDI 交换的各部分由标头和尾部分隔,而标头和尾部必须遵循 X12 EDIFACT 标准。交换控制标头和尾部只出现一次;功能组和事务集标头和尾部可重复出现,前提是事务集和组在交换内是按批处理的。每个标头和尾部均由一系列数据元素组成,这些元素包含有关标头和尾部所含内容的信息。

X12 EDIFACT 的标头和尾部很相似。主要区别在于,在 EDIFACT 中,交换中使用的分隔符是在 UNA 服务字符串建议标头中定义的。而在 X12 编码中,分隔符是在 ISA 交换控制标头中定义的。

交换控制和功能组标头和尾部表示为信封段。当 BizTalk Server 将传入交换分割成事务集时,它将这些信封段另存为上下文属性。对路由非常有用的主要信封属性可作为单独的属性使用。当保留交换时,不会出现这种情况,此时信封数据属于消息自身的一部分。

BizTalk Server 生成传出消息时,它根据贸易合作伙伴协议来确定标头和尾部,或者在未确定任何参与方时根据全局协议确定。

标头字段和尾部字段,以及用于在交换中分隔它们的分隔符均在两个参与方之间的协议中进行定义。按照对协议的规定,切勿在交换、组或事务集的任何头字段或尾字段的定义中使用分隔符。如果使用了这样的分隔符,则在作为发送方的 BizTalk Server EDI 组装器中或在接收方的拆装器中将无法处理交换。如果交换为出站批,它在 EDI 组装器中将失败,因为组装器会根据头控制(服务)架构验证信封。如果交换未进行批处理,EDI 组装器会将其序列化,但交换在接收协议的拆装器中将无法处理。

X12 的标头和尾部

X12 编码消息的标头和尾部如下所示:

如果 ISA 标头后面紧跟 IEA 尾部,则交换为空。如果事务集存在,则 GS 标头和 GE 尾部必须存在,否则它们将受条件限制。

X12 编码的消息中,ISA 交换控制标头字段是固定长度。对于某些字段,可以输入小于字段固定长度的值。如果这样做,交换必须包含尾部空格(对于字符串字段)或前导零(对于数字字段),以便每个字段都具有所需长度。当创建出站交换时,BizTalk Server 将输入尾部空格或前导零,以便创建长度正确的交换控制标头。GS 组标头字段和 ST 事务集标头字段的长度不固定。

X12 编码中,功能安全标头、功能保证标头、功能安全值段和功能安全尾部段均超出 BizTalk Server EDI AS2 的范围。如果收到具有这些段的交换,则会挂起交换并显示错误日志,指示无法识别这些段。

ST01 字段是事务集 ID 代码;ST02 字段是事务集控制编号。ST03 字段是架构版本标识符。SE01 字段指示事务集中包含的段数;SE02 字段与 ST02 字段(事务集控制编号)相同。当解析传入消息时,BizTalk Server 将验证事务集中的段数是否与 SE01 字段的值相对应。当生成传出消息时,BizTalk Server 会将 SE01 字段设置为事务集中的正确段数。

要序列化到传出 EDI 交换中的 XML 事务集应当具有事务集标头和尾部。但是,如果没有事务集标头或尾部,EDI 组装器将处理相应消息。X12 EDIFACT 架构中的事务集标头和尾部段对于 XML 事务集而言是可选的。如果事务没有标头或尾部,则 EDISend AS2EDISend 发送管道中的 EDI 组装器将会向其添加事务集标头和尾部值。这些值将基于映射或计算。EDI 组装器将会为交换 XML(保留批)、批处理的事务集 XML 和事务集 XML 执行此操作。有关详细信息,请参阅X12 Transaction SetHeader and Trailer SegmentsEDIFACT TransactionSet Header and Trailer Segments

EDIFACT 的标头和尾部

EDIFACT 编码消息的标头和尾部如下所示:

无需 UNA 标头。但 UNB 标头是必需的。如果 UNA 标头存在,则其中将包含要在处理传入消息时使用的分隔符,否则将使用为 EfactDelimiters 管道属性定义的分隔符。

如果 UNB 标头后面紧跟 UNZ 尾部,则交换为空。如果 UNG 标头后面紧跟 UNE 尾部,则组为空。UNG 标头和 UNE 尾部对是条件元素,不一定必须出现在消息中。

EDI 交换结构元素

交换是 EDI 消息的最高级别的结构元素。它包含由两个合作伙伴交换的一个或多个组的集合。交换的目标必须是一个贸易合作伙伴。交换可能包含一种或多种类型的事务集/消息。

使用交换时,交换自身以及其中的组和事务集/消息由标头定义。段、数据元素和子元素由分隔符分隔。每个分隔符都有一个默认值,但可以为参与方定义其他字符。在 EDIFACT 交换中,在交换中用作分隔符的所选字符是在单独的 UNA 交换标头中定义的。而在 X12 交换中,分隔符是在 ISA 交换标头中定义的。请注意,在 X12 中,数据元素分隔符是位于第四个字符位置的字符,数据段终止符是位于最后一个字符位置的字符。其他 X12 分隔符和全部 EDIFACT 分隔符由字段定义,例如 X12 组件分隔符由 ISA16 字段定义,EDIFACT 数据元素分隔符由 UNA2 字段定义。有关详细信息,请参阅UNA Segment Definition Page (EDI Properties)ISA Segment Definition Page (EDI Properties)

EDI 组结构元素

组包含一个或多个事务集。一个 EDIFACT 组必须包含同一类型的事务集。一个 X12 组可能包含类似类型的事务集(基于事务集 - (GS01-ST01) 映射)或相同类型的事务集。下表列出了在单一组 (GS01) 可能会一起发生的类似 X12 事务集 (ST01)

 

GS01

ST01


CF

844


849


DX

894


895


FR

821


827


GC

920


924


925


926


HC

837


837_D


837_I


837_P


IA

110


980


IO

310


312


ME

198


200


201


245


261


262


263


833


872


MG

203


206


259


260


264


266


OG

875


876


PK

196


839


QG

878


879


888


889


896





QO

313


315


RO

300


301


303


RQ

836


840


RS

869


870


SL

135


139


SO

302


311


317


319


322


323


324


325


326


361


TO

197


199


265


485


486


TP

460


463


466


468


490


492


494


WA

140


141


142


143



HIPAA 5010 组还允许单一组内存在不同版本的事务集。

如果在处理事务集时遇到异常,将使用 EDI 参与方属性来确定是挂起整个交换还是仅挂起失败的事务集。

一个组必须以功能组标头(X12 中的 GS EDIFACT 中的 UNG),且必须以功能组尾部(X12 中的 GE EDIFACT 中的 UNE)结束。组标头包含发送方和接收方代码、日期和时间、与标头和尾部匹配的控制编号、可能包括在功能组内的用于定义事务集的集合的组标识符以及其他信息。组尾部具有指示组内事务集数目的元素。

组在 EDIFACT 交换内是可选的。即使不存在组(不存在 UNG 段),一个 EDIFACT 交换也可包含多个事务集。在此情况下,所有事务集都必须具有同一类型,因为一个组中的事务集的类型必须相同。例如,APERAK ORDERS 事务集不能同时出现在一个组或不具有多个组的交换中。

组在 X12 交换内是必需的。

交换包括一个用于定义 EDI 消息的信封。该信封必须以交换标头(X12 中的 ISA EDIFACT 中的 UNA/UNB)开头,且必须以交换尾部 (IEA/UNZ) 结束。交换标头包括定义以下各项的元素:发送方和接收方、日期和时间、版本号、与标头和尾部匹配的控制编号以及其他信息。

ISA12 GS8 字段(对于 X12 交换)和 UNH2 字段(对于 EDIFACT 交换)包含发现架构所必需的版本信息。

交换尾部具有指示交换中的组数的元素。

EDI 事务集/消息结构元素

事务集(在 X12 编码中)或消息(在 EDIFACT 编码中)包含构成消息数据的段。事务集由标头、数据段集合和尾部组成。事务集中提供了处理事务所需的所有详细信息。

事务集必须以 ST 事务集标头(在 X12 中)或 UNH 消息标头(在 EDIFACT 中)开始,且必须以 SE 事务集尾部(在 X12 中)或 UNT 消息尾部(在 EDIFACT 中)结束。尾部提供包括标头和尾部段在内的数据段的计数。

事务集可以包含一个或多个循环,这些循环是重复相关段的集合所必需的。

EDI 段结构元素

段包含一个或多个数据元素,是消息中的中间信息单位。每个段均以一个由三个字符组成的数据段标识符开头,以段终止符(默认情况下为撇号 ('))结尾。段内的数据元素由数据元素分隔符分隔。默认情况下,数据元素分隔符为加号 (+)。段可分为两类:必需段和可选段。传出交换的分隔符可在两贸易合作伙伴间的协议中设置,也可设置为后备贸易合作伙伴协议的一部分。

嵌套

段可以按一种称为嵌套的分层关系进行分组。有两种不同类型的嵌套:显式和隐式。在任何一个交换内,只能使用一种类型的嵌套。

  • 显式嵌套显式指示循环是嵌套的。使用显式嵌套时,段标记中的第一个组件数据元素将为段代码。段代码后将为表示段的级别和重复发生率的条件组件数据元素。用于此目的的组件数据元素的数量由段在消息结构中出现的层级决定。如果段将出现在级别一,则会使用紧跟在段代码之后的组件数据元素。如果段将出现在级别二,则会使用紧跟在段代码之后的组件数据元素和下一个组件数据元素。如果段将出现在级别三,则会使用段代码之后的三个组件数据元素。管道无法执行将数据与层次结构比较的结构验证。

  • 在隐式嵌套中,将严格遵循在消息结构中指定的段的顺序。段之间的嵌套关系是隐式的,处理时不需要进一步的指示。

循环

在一个事务集内,一个或多个段可以循环的形式重复。有两种不同类型的循环:未绑定和绑定。

未绑定循环

未绑定循环不具有标记循环的开头和结尾的唯一标识段。未绑定循环按照计数进行重复。如果计数没有值,则循环将重复两次。循环中的每个段只能按指定的顺序出现一次。

未绑定循环以唯一的第一个数据元素开头。在每次出现中,第一个元素可出现一次且仅出现一次。未绑定循环可在循环内进行嵌套;如果在循环内进行嵌套,则内部未绑定循环不能在与任何外部循环相同的序号位置处开始,也不能以与任何外部循环相同的段 ID 开头。嵌套循环包含的段不能同时为同一嵌套结构中任何外部循环的起始段。

绑定循环

绑定循环以预定义的段 LS(循环开头)开头,以预定义的段 LE(循环结束)结束。LS 段的可选性必须与循环中第一个段的可选性匹配。一个绑定循环可以包含另一个绑定循环。

便笺

X12 中的绑定循环与 EDIFACT 中的显式循环等价。

在循环中使用绑定是为了解决不明确的问题。LS/LE 段上的要求指示符与循环的第一个段的要求指示符相匹配。绑定会放松对某些经常重复段的用法的结构限制。绑定段对起始段 ID 没有限制。这样可使同一段在作为一个绑定循环的开头的同时在该循环之外使用,如下例所示:

复制

AALSBBCCLEBB

允许存在从属循环(循环内的循环)。如果绑定循环在循环内进行嵌套,则内部循环不能在与任何外部循环相同的序号位置处开始。内部绑定循环必须在与之相邻的外部循环之前结束。

事务集内的每个绑定循环必须具有一个唯一定义的 值,该值由一到四个大写字母或数字组成。建议对应的 LS LE 段也应包含同一唯一的 值。 数据元素将作为常规数据元素进行处理并验证其数据类型、最小/最大长度、可选性等等。不会执行跨段(跨越 LS LE)验证。BizTalk Server 将通过存在且仅存在 LS LE 段来验证模糊解析。在数据元素规则发生冲突的情况下,将接受存在错误的事务集,且 BizTalk Server 在确认中返回 AK501=E AK2/AK3 的相应评估。

还要求强制 LS/LE 段配对。在不匹配的情况下,由于存在内在的模糊解析问题而拒绝事务集,且在事件查看器和 997 确认中返回 AK501 = E AK502 = 5。如果缺少 LS/LE 段之一或两者,而事务集是明确的,将接受存在错误的事务集并返回 AK501=E AK502 = 5

LS/LE 对可以是可选的,也可以是必需的。但是,除非该对包含在可重复的父循环中,否则该对永不会是可重复的。在任一种情况下,LS/LE 对的 MaxOccurs 可为 1,但不能大于 1。在架构验证中,这是强制要求。

EDI 拆装器和 EDI 组装器处理 LS LE 段。在解析过程中,拆装器为 LS LE 段创建 XML 节点,并验证这两个段。在序列化过程中,组装器从 XML 节点创建 LS LE 段,并验证这两个段。如果缺少所需的 LS LE 段,则会挂起/拒绝 AK501 = E AK502 = 5 的事务集。如果存在 LS/LE 段而没有对应的数据元素,且启用了 EDI 验证,则会接受存在错误的事务集并在事件查看器和 997 确认中报告 AK501 = E AK502 = 5

EDI 数据元素:结构元素

数据元素是消息中的基本数据单元。数据元素由数据元素分隔符分隔,默认情况下 X12 是星号,EDIFACT 是加号。数据元素的可行性定义为:必需、可选或条件。

数据元素可以是简单型,也可以是复合型。简单数据元素为数值型,它们是最低级别的数据。复合数据元素是一串子元素,这些子元素是由复合元素分隔符分隔的简单数据元素。默认状态下,复合元素分隔符对于 x12 EDIFACT 是冒号。

对于 EDIFACT 编码的消息,如果经由 EDI 发送的数据需要发送任何定义用作分隔符的字符,则需要使用转义符来指明后面的字符不是分隔符,而是数据的一部分。默认情况下,转义符为问号 (?)

便笺

X12 不支持转义符。如果遇到作为 X12 编码的交换数据一部分的分隔符,则交换将在接收方或发送方挂起。