Azure 逻辑应用中 EDIFACT 消息的 CONTRL 确认和错误代码

适用于:Azure 逻辑应用(消耗型 + 标准型)

在 Azure 逻辑应用中,可以创建工作流来处理使用 EDIFACT 操作时电子数据交换 (EDI) 通信的 EDIFACT 消息。 在 EDI 消息传送中,确认会提供处理 EDI 交换的状态。 接收交换时,EDIFACT 解码操作可以根据启用的确认类型和指定的验证级别,向发送方返回一种或多种确认类型。

本主题简要概述了 EDIFACT CONTRL 确认、交换中的 CONTRL 确认段以及这些段中使用的错误代码。

作为技术和功能确认的 CONTRL

对于 EDIFACT 编码的消息,CONTRL 确认 (ACK) 既用作技术确认,也用作功能确认。 完整的 CONTRL 消息充当功能确认,而功能确认中的某些部分可重新用于技术确认。 例如,如果在发送合作伙伴的协议属性或全局属性中同时选择技术和功能确认,则 EDIFACT 解码操作会生成两条 CONTRL 消息:CONTRL 技术确认和 CONTRL 功能确认。 CONTRL 确认符合 EFACT_<version-number>_CONTRL.xsd 的架构。

备注

在 Azure 逻辑应用中处理 EDIFACT 消息时,无论是确认回执、接受还是拒绝,都会发送一条 CONTRL 消息,来响应仅包含一条或多条 CONTRL 消息的已接收交换。 在逻辑应用中,不会发送任何 CONTRL 消息来响应仅包含一条或多条 CONTRL 消息的已接收交换。

已接收 CONTRL 消息中的错误必须通过除 CONTRL 消息之外的其他方法进行报告。 如果包含数据消息的交换中包含一条或多条 CONTRL 消息,将会生成 CONTRL 消息来响应该交换,就如同已接收的交换中未包含任何 CONTRL 消息一样。

作为技术确认,CONTRL 消息表明交换接收方收到了主题交换并承担以下责任:

  • 选中部分交换,以确认复制到报表交换响应 (UCI) 段中的数据元素的语法准确性。
  • 承担起通知发送方有关交换中其他部分的接受或拒绝情况的责任。
  • 采取合理措施通知发送方。

备注

仅当传入的 EDIFACT 消息重复或信封中存在错误(如字符集问题)时,CONTRL 技术确认才会报告 Rejected 状态。 EDIFACT 不会像 X12 在 TA1 确认中使用 TA104 字段那样,在 CONTRL 技术确认中报告 Interchange accepted with errors 状态。 如果接受了部分 EDIFACT 消息,CONTRL 技术确认会报告 Accepted 状态。 在某些情况下,如果拒绝了部分消息,CONTRL 确认仍会报告 Accepted 状态。 在此种情况下,UCI5 元素可能会报告错误。

作为功能确认,CONTRL 消息将报告已接收交换、组或消息的状态(如接受或拒绝),其中包括任何错误或不支持的功能。 该消息还表明交换接收方:

  • 已收到所确认交换的引用级别。

  • 已检查在确认的引用级别中是否有致命语法错误会阻止进一步处理交换。

  • 已检查所有确认的服务段部分在语义上是否正确(如果未报告错误,则正确)。

  • 遵循服务段的确认和引用级别中所请求的操作。

  • 接受在下列情况中通过发送 CONTRL 消息以外的方式通知发送方的责任:

    • 稍后会在相关部分中发现任何语法或语义错误。
    • 在提交的 CONTRL 消息中确认某部分后,由于某些其他原因无法处理该部分。
  • 采取合理措施,确保发现此类错误并通知发送方。

拒绝意味着交换接收方:

  • 由于 CONTRL 消息中指出的原因而无法确认交换或任何相关部分。
  • 不会对拒绝的主题交换部分中包含的业务信息进一步采取任何操作。

CONTRL 技术确认段

如果选择在 EDIFACT 协议中生成技术确认这一选项,或者如果 UNB9 消息字段设置为 2,则会生成 CONTRL 消息作为技术确认,以报告接收交换的结果。

下表描述了交换中的 CONTRL 技术确认段,并使用以下定义:

  • M = 必需
  • O = 可选
名称 强制或可选 说明
UNH 消息标头 M 消息标头段 (UNH) 标识并指定消息。
UCI 交换响应 M 标识交换并指示交换回执的性质。 UCI 段的最大出现次数为 1,因此,会报告在控制段中发现的第一个错误。
UNT 消息尾部 M 在名为 Syntax Error Code 的 UCI5 数据元素中报告了一个错误。 EDIFACT 编码的消息不像 X12 编码的交换一样存在 Accepted with errors 条件。

CONTRL 技术确认数据元素

CONTRL 技术确认包括以下数据元素:

元素 名称 使用情况
UNH1 消息参考编号 -
UNH2 消息标识符子组件 子组件:

- 1 = CONTRL
- 2 = 4
- 3 = 1
- 4 = UN

UCI1 交换控制编号 映射自已接收消息的 UNB5 字段。
UCI2 交换发送方 映射自已接收消息的 UNB2 字段。

- 必需:第一个子组件(标识)。
- 可选:第二个子组件(代码限定符)和第三个组件(反向路由地址)。

UCI3 交换接收方 映射自已接收消息的 UNB3 字段。

- 必需:第一个子组件(标识)。
- 可选:第二个子组件(代码限定符)。

UCI4 操作代码 此元素为必需项。 操作代码:

- 8(如果接受交换)。
- 7(如果接受交换,但拒绝某些事务集)。
- 4(如果因为 UNA 或 UNB 段中出现错误而拒绝交换)。

UCI5 语法错误代码 此元素在某些条件下可选,且可标识错误情况(如有)。
UCI6 服务段标记 此元素在某些条件下可选,且可标识在 UCI5 数据元素中具有错误情况的段。
UCI7 数据元素标识 标识在 UCI5 数据元素中具有错误情况的数据元素。 子组件:

- 必需:错误数据元素在段中的位置。
- 在某些条件下可选:错误组件数据元素在段中的位置,以及错误数据元素在段中的出现次数。

UCI8 - -
UNT1 段计数 -
UNT2 消息参考编号 -

CONTRL 功能确认段

如果选择在 EDIFACT 协议中生成功能确认这一选项,或者如果 UNB9 消息字段设置为 1,则会生成 CONTRL 消息作为功能确认,以报告检查交换语法的结果。

下表描述了交换中的 CONTRL 功能确认段,并使用以下定义:

  • M = 必需
  • O = 可选
名称 强制或可选 说明
UNH 消息标头 M 消息标头段 (UNH) 标识并指定消息。
UCI 段 M 标识交换,指示交换回执的状态,并包含对已接收交换中的 UNA、UNB 和 UNZ 段的引用。 UCI 段的最大出现次数为 1,因此,会报告在控制段中发现的第一个错误。
UCF 段 M(如果存在 UNG 段) 标识组段(由 UNG 标头和 UNE 尾部封装)并指示任何错误的性质。
UCM 段 M 标识消息段(由 UNH 标头和 UNT 尾部封装)并指示任何错误的性质。
UCS 段 M 标识事务集并指示任何错误的性质。
UCD 段 O(在某些条件下) 标识错误复合数据元素或错误组件数据元素并指示错误的性质。
UNT 消息尾部 M 如果收到的 CONTRL 功能确认仅包含 UNH、UCI 和 UNT 段,则 EDIReceive 管道会将确认作为 CONTRL 回执技术确认进行处理。 报告级别下的每个段(如 UCI、UCF、UCM、UCS 和 UCD 段)实例只能报告一个错误。

SG 循环和 CONTRL 功能确认结构

根据收到的交换是包括一个组还是多个组,CONTRL 功能确认的结构会有所不同。

  • 如果该交换包括一个组,则每个组的确认将包含一个 UCF 段。 每条消息的每个 UCF 段包含一个 UCM 段。 每个 UCM 段还同时包括一系列 UCS 和 UCD 段。

    XML 形式的确认消息包括以下循环元素:

    • 封装每个 UCF 段的 SG3Loop 元素。
    • 封装每个 UCM 元素的 SG4Loop 元素。
    • 封装每对 UCS 和 UCD 元素的 SG5Loop 元素。

    本机 EDI 消息格式中不存在 SG 循环标记。

  • 如果该交换不包括组,则确认中不包含任何 UCF 段。 相反,每条消息的确认中都包括一个 UCM 段。 每个 UCM 段同时包括一系列 UCS 和 UCD 段。

  • XML 形式的确认消息包括以下循环元素:

    • 封装每个 UCM 元素的 SG1Loop 元素。
    • 封装每对 UCS 和 UCD 元素的 SG2Loop 元素。

    与包括组的交换一样,本机确认格式中不存在 SG 标记。

根据行业用法,默认情况下接受的事务集不需要 SG1/SG4 循环。 但是,若要符合标准,可以按照以下步骤强制生成 SG1/SG4 循环:

  1. Azure 门户中,打开集成帐户。

  2. 在集成帐户菜单的“设置”下,选择“协议”。

  3. 打开 EDIFACT 协议,然后选择“发送设置”。

  4. 在“确认”下,选择“确认 (CONTRL)”。 现在可以选择“为已接受的事务集生成 SG1/SG4 循环”。

    如果选中此复选框,则无论接受还是拒绝事务集,接收管道都会生成 SG1/SG4 循环。 否则,仅针对 UCM5 不等于 7 的错误事务集生成这些循环。

CONTRL 功能确认数据元素

CONTRL 消息包含几个必需的数据元素,这些元素可从收到的交换进行复制。 如果交换中的数据元素丢失或在语法上无效,则无法生成在语法上有效的 CONTRL 消息。 因此,必须通过除 CONTRL 消息以外的其他方法报告错误。

CONTRL 功能确认包括以下数据元素:

元素 名称 使用情况
UNH1 消息参考编号 -
UNH2 消息标识符子组件 子组件:

- 1 = CONTRL
- 2 = 4
- 3 = 1
- 4 = UN

UCI1 交换控制编号 映射自已接收消息的 UNB5 字段。
UCI2 交换发送方 映射自已接收消息的 UNB2 字段。

- 必需:第一个子组件(标识)。
- 可选:第二个子组件(代码限定符)和第三个组件(反向路由地址)。

UCI3 交换接收方 映射自已接收消息的 UNB3 字段。

- 必需:第一个子组件(标识)。
- 可选:第二个子组件(代码限定符)。

UCI4 操作代码 此元素为必需项。 操作代码:

- 8(如果接受交换)。
- 7(如果接受交换,但拒绝某些事务集)。
- 4(如果因为 UNA 或 UNB 段中出现错误而拒绝交换)。

UCI5 语法错误代码 此元素在某些条件下可选,且可标识错误情况(如有)。
UCI6 服务段标记 此元素在某些条件下可选,且可标识在 UCI5 数据元素中具有错误情况的段。
UCI7 数据元素标识 标识在 UCI5 数据元素中具有错误情况的数据元素。 子组件:

- 必需:错误数据元素在段中的位置。
- 在某些条件下可选:错误组件数据元素在段中的位置,以及错误数据元素在段中的出现次数。

UCI8 - -
UCF1 组参考编号 此元素为必需项,从已接收消息中的 UNG5 字段映射而来。
UCF2 应用程序发送方的标识 此元素在某些条件下可选,从已接收消息和子组件中的 UNG2 字段映射而来。
UCF3 应用程序接收方的标识 此元素在某些条件下可选,从已接收消息和子组件中的 UNG3 字段映射而来。
UCF4 已编码操作 此元素为必需项,代码适用于此级别以及所有较低级别。 操作代码:

- 7(如果接受交换)。
- 4(如果因为 UNA 或 UNB 段中出现错误而拒绝交换)。

UCF5 语法错误,编码 此元素在某些条件下可选,且可标识组中的错误情况(如有)。
UCF6 服务段标记 此元素在某些条件下可选,且可标识组中的错误段。
UCF7 数据元素标识 标识在 UCF5 数据元素中确定了错误情况的数据元素。 子组件:

- 必需:错误数据元素在段中的位置,以及错误数据元素在段中的出现次数。
- 某些条件下可选:错误组件数据元素在段中的位置。

UCM1 消息引用编号 此元素为必需项,从已接收消息中的 UNH1 字段映射而来。
UCM2 消息标识符 此元素在某些条件下可选,从已接收消息和子组件中的 UNH2 字段映射而来。
UCM3 已编码操作 此元素为必需项,代码适用于此级别以及所有较低级别。 操作代码:

- 7(如果接受交换)。
- 4(如果因为 UNA 或 UNB 段中出现错误而拒绝交换)。

UCM4 语法错误,编码 此元素在某些条件下可选,且可标识组中的错误情况(如有)。
UCM5 服务段标记 此元素在某些条件下可选,且可标识出错的 UNH 或 UNT 段。
UCM7 数据元素标识 标识在 UCM5 数据元素中确定了错误情况的数据元素。 子组件:

- 必需:错误数据元素在段中的位置,以及错误数据元素在段中的出现次数。
- 某些条件下可选:错误组件数据元素在段中的位置。

UCS1 消息正文中的段位置 此元素为必需项,是始于 UNH 为 1 的错误段的位置计数。 若要报告缺失某个段,此值是在缺失段应该存在的位置之前处理的最后一个段的数字计数位置。 通过将组中第一个段标识为缺少来表示缺少的段组。
UCS2 语法错误编码 此元素在某些条件下可选,且可标识组中的错误情况(如有)。
UCD1 语法错误编码 此元素在某些条件下可选,且可标识组中的错误情况(如有)。

注意:如果 XSD 验证失败,UCD1 数据元素会报告代码值 12, Invalid Value

UCD2 数据元素标识 标识在 UCD1 数据元素中确定了错误情况的数据元素。 子组件:

- 必需:错误数据元素在段中的位置,以及错误数据元素在段中的出现次数。
- 某些条件下可选:错误组件数据元素在段中的位置。

UNT1 段计数 -
UNT2 消息参考编号 -

CONTRL 确认错误代码

这些错误适用于交换、组、消息和数据级别。 在发现支持的错误时,将拒绝整个交换、组或事务集。 EDIFACT 编码的交换不像 X12 编码的消息一样具有 Accepted with errors 条件。

标准 EDIFACT CONTRL 确认错误代码

下表列出了由 EDIFACT 规范定义的受支持的错误代码,这些代码在 CONTRL 确认的 UCI5 字段中用于处理 Azure 逻辑应用中的 EDIFACT 消息。

错误代码 条件 原因 是否支持?
2 不支持语法版本或级别 指出接收方不支持该语法版本和(或)级别。
7 交换收件人不是实际的收件人 指出交换接收方 (S003) 与实际接收方不同。
12 值无效 指出独立数据元素、复合数据元素或组件数据元素的值不符合该值的相关规范。
13 Missing 指出缺少必需的或必要的服务或用户段、数据元素、复合数据元素或组件数据元素。
14 在此位置不支持该值 指出接收方在使用了所标识独立数据元素、复合数据元素或组件数据元素的特定值的位置上不支持使用该值。 根据相关规范,该值可能有效,如果在另一个位置使用此值,则可能受支持。
15 在此位置不支持 指出收件人在标识的位置不支持使用段类型、独立数据元素类型、复合数据元素类型或组件数据元素类型。
16 组分过多 指出标识的段包含太多数据元素,或者标识的复合数据元素包含太多组件数据元素。
17 无协议 没有允许接收包含所标识独立数据元素、复合数据元素或组件数据元素的值的交换、功能组或消息的协议。
18 未指定的错误 指出已发现错误但未报告错误性质。
19 十进制符号无效 指出在 UNA 中指定作为十进制符号的字符无效,或数据元素中使用的十进制符号与 UNA 中指定的符号不一致。
20 字符在作为服务字符时无效 指出 UNA 中建议的字符在作为服务字符时无效。
21 无效字符 指出交换中使用的一个或多个字符不是 UNB 段中指定的语法标识符所定义的有效字符。 无效字符是引用级别的一部分,或者紧跟在所标识的交换部分之后。
22 无效服务字符 指出在交换中使用的服务字符不是在 UNA 段中建议的有效服务字符或者不是默认服务字符之一。 如果在 UCS 或 UCD 段中使用代码,则无效字符紧跟在所标识的交换部分之后。
23 未知交换发件人 指出交换发送方 (S002) 未知。
24 太旧 指出接收的交换或组早于在 IA 中指定或由收件人确定的限制。
25 不支持测试指示器 指出无法对标识的交换、组、消息或包执行测试处理。
26 检测到重复内容 指出检测到当前接收的内容可能与以前接收的交换、组、消息或包重复。 之前的传输可能已遭拒绝。
27 不支持安全功能 指出不支持与引用级别或数据元素相关的某个安全功能。
28 参考不匹配 指出 UNB、UNG、UNH、UNO、USH 或 USD 段中的控制引用与 UNZ、UNE、UNT、UNP、UST 或 USU 段中对应的控制引用不匹配。
29 控制数与接收到的实例数不匹配 指出组、消息或段的数量与 UNZ、UNE、UNT 或 UST 段中给出的数量不匹配。 或者,对象的长度或加密数据的长度与 UNO、UNP、USD 或 USU 段中所述的长度不一致。
30 组和消息/包混合 指出组与交换中位于组之外的消息或包混合在一起。
31 在组中有一种以上的消息类型 指出在功能组中包含不同的消息类型。
32 低级别为空 指出下列条件之一:

- 交换不包含任何消息、包或组。
- 组不包含任何消息或包。

33 在消息、包或组外出现无效内容 指出在交换中的消息、包或组之间存在无效的段或数据元素。 将在更高的级别报告拒绝。
34 不允许嵌套指示器 指出在不应使用显式嵌套的消息中使用了显式嵌套。
35 数据元素或段重复过多 指出独立数据元素、复合数据元素或段的重复次数过多。
36 段组重复过多 指出段组的重复次数过多。
37 字符类型无效 指出下列条件之一:

- 在字母(组件)数据元素中使用一个或多个数字字符。
- 在数字(组件)数据元素中使用一个或多个字母字符。

38 在小数点前缺少数字 指出小数点前没有一位或多位数字。
39 数据元素太长 指出收到的数据元素的长度超过了数据元素说明中指定的最大长度。
40 数据元素太短 指出收到的数据元素的长度小于数据元素说明中指定的最小长度。
41 永久性通信网络错误 指出用于传输交换的通信网络报告了一个永久性错误。 使用相同参数在网络级别重新传输相同交换的操作将失败。
42 临时性通信网络错误 指出用于传输交换的通信网络报告了一个临时性错误。 重新传输相同交换的操作可能会成功。
43 未知交换收件人 指出交换收件人对于网络提供者来说是未知的。
45 尾部分隔符 指出下列条件之一:

- 段终止符之前的最后一个字符是数据元素分隔符、组件数据元素分隔符或重复数据元素分隔符。
- 数据元素分隔符之前的最后一个字符是组件数据元素分隔符或重复数据元素分隔符。

46 不支持的字符集 指出下列条件之一:

- 所使用的一个或多个字符不在由语法标识符定义的字符集内。
- 接收方不支持由代码扩展技术的转义序列所标识的字符集。

47 不支持信封功能 指出收件人不支持遇到的信封结构。
48 违反了依存关系注释条件 指出由于违反了依存关系条件而发生了一个错误。

Azure 逻辑应用 CONTRL 确认错误代码

下表列出的自定义错误代码未由 EDIFACT 规范定义,但在 CONTRL 确认的 UCI5 字段中用于处理 EDIFACT 消息,并且针对 Azure 逻辑应用。

错误代码 条件 原因
70 事务集丢失或事务集标识符无效 事务集标识符丢失或无效的通知。
71 事务集或组控制编号不匹配 与事务集或组控制编号不匹配的通知。
72 无法识别的段 ID 段 ID 无法识别的通知。
73 XML 的位置不正确 序列化 XML 根元素时出现问题的通知。
74 段组重复过少 段组重复小于所需数量的通知。
75 段重复过少 段重复小于所需数量的通知。
76 找到的数据元素过少 找到的数据元素不足够的通知。

后续步骤

交换 EDIFACT 消息