> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 文档工作流映射

> 在知行之桥中配置并测试交易伙伴文档与源或目标端口之间的 EDI 文档工作流映射。

export const siteNameShort = "知行之桥";

TPMC 的一个重要组成部分是配置传入或传出 EDI 文档与存储数据或发送数据的端口之间的映射。

*传入* 映射依赖于通过 MFT 协议从交易伙伴接收 EDI 文档，使用 EDI 标准将其从 EDI 转换为 XML，然后将其映射到目的地端口（如数据库）。

*传出* 映射依赖于从源端口（如数据库）中提取 XML 数据，将数据映射到 EDI 标准的 XML 表示形式，将 XML 转换为 EDI，然后通过 MFT 协议将 EDI 文档发送给交易伙伴。

文档工作流有两种定义方式。

* 在[交易伙伴](./edi-partners-tab#select-or-add-documents)选项卡中，单击交易伙伴的名称，然后选择 **工作流** 选项卡。有关如何添加文档和启动工作流的说明，请参阅[选择或添加文档](./edi-partners-tab#select-or-add-documents)。
* 在[文档](./edi-documents-tab)选项卡中，单击现有文档的名称，或选择 **添加文档** 来创建新文档。有关如何添加文档和启动工作流的说明，请参阅[从文档选项卡创建文档](./edi-documents-tab#creating-a-document-from-the-documents-tab)。

## 添加文档工作流

定义文档工作流包括以下步骤：

1. 完成 **添加文档工作流** 屏幕。
   1. 从 **交易伙伴** 选项卡添加文档时，单击 **添加工作流** 启动文档工作流。在这种情况下，**添加文档工作流** 屏幕上的字段是预填的。可以更改文档名称，但所有其他字段都是固定的。
   2. 从 **文档** 选项卡添加文档时，必须手动填写 **添加文档工作流** 屏幕上的字段。
2. [选择并配置来源或目标端口](#选择并配置来源或目标端口)
3. [配置映射](#配置映射)。除了不使用映射的 [File](../connectors/file)、[AMQP](../connectors/amqp) 和 [Apache Kafka](../connectors/apachekafka) 以外，映射适用于所有端口。有关更多信息，请参阅[无需映射的文档工作流](./workflow-nomapping)。

### 选择并配置来源或目标端口

创建*传入*文档时，必须指定要添加数据的目标端口。创建*传出*文档时，必须指定要从中提取数据的源端口。可用的端口包括 {siteNameShort} [数据库端口](../connectors/database-connectors)和[其他端口](../connectors/other-connectors)、[File](../connectors/file) 端口、[Workspace Send](../connectors/workspace-send) 端口（仅适用于传入文档）以及 [Workspace Receive](../connectors/workspace-receive) 端口（仅适用于传出文档）。

下图显示了如何配置传出文档的来源，但相同的原则也适用于传入文档的目标。在此示例中，源是从交易伙伴的 **工作流** 选项卡定义的，但也可以从 **文档** 选项卡获得相同的结果。

1. 在 **工作流** 选项卡中，单击 **添加源**。

   <img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_add_source.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=b44930a069c3197544d70ae4d3dc14c6" alt="Add Source button on the Workflow tab" width="600" data-path="public/images/edi_add_source.png" />

2. 在 **选择来源** 列表中突出显示一个端口，然后单击 **添加**。

   <img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_select_source_connector.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=e5036500e7ac7a2343478d8be3f30996" alt="Select Source connector dialog" width="300" data-path="public/images/edi_select_source_connector.png" />

3. 使用加号创建一个新的 **连接**，或使用下拉菜单选择现有连接。

   <img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_source_config.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=862ff9a9e993b6686be000119f51ff57" alt="Source connector configuration" width="300" data-path="public/images/edi_source_config.png" />

4. 添加新连接时，请在 **添加连接** 窗口中填写以下字段：
   * 名称
   * Server
   * Port
   * User
   * Password
   * AWS Access Key (optional)
   * AWS Secret Key (optional)
   * AWS Role ARN (optional)

5. 单击 **测试连接**。

6. 对于传出的文档，唯一可用的操作是 `Select`，因此当添加并测试连接后，单击 **下一步**。（传入文档的操作是 `Upsert`。请参阅[操作](#操作)以了解更多信息。）

这将打开端口的 **操作** 配置选项卡，可以在其中完成映射。有关如何使用此选项卡的说明，请参阅[配置映射](#配置映射)。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_mapping_start.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=da7ba1c71522b58d3b757d05c5c33574" alt="Mapping start page showing Action tab" width="800" data-path="public/images/edi_mapping_start.png" />

<Note>
  * 使用其他配置选项卡（例如 **设置** 和 **自动化**）完成端口配置。有关配置选项的详细信息，请单击问号帮助图标以打开端口文档。
  * 如果需要在原始设置后修改连接，请使用 **设置** 选项卡上的 **连接** 字段。
</Note>

## 配置映射

建立连接后，必须选择需要映射的表。如果要创建传入文档，请单击 **添加目标结构**。如果要创建传出文档，请单击 **添加源结构**。此示例显示如何添加目标结构。

以下已完成映射的图像已注释以解释屏幕上的每个元素。每个数字对应下面的描述。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_mapping_outgoing_annotated.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=8948eb1dcba939e69daec2bbac8810dc" alt="Annotated outgoing document mapping" width="800" data-path="public/images/edi_mapping_outgoing_annotated.png" />

1. 文档或端口名称。
2. 端口类型。
3. 文档的操作。传入文档的值为 **Upsert**，传出文档的值为 **Select**。
4. 映射的测试状态。值为 **测试成功**、**测试有错误** 或 **未测试**。
5. 切换 XML 流式处理的开启或关闭。开启时，映射引擎在完成循环后，删除映射中最顶层 `Foreach` 的当前迭代的文档对象模型 (DOM)。这可以显著提高大 XML 文档的性能。在映射引擎无法解析映射的情况下，它会自动关闭 XML 流式处理。
6. 切换是否显示或隐藏 XML 属性。
7. 刷新映射。
8. 打开 **测试映射** 页面。测试结果显示在 #4 中。（有关更多信息，请参阅[测试映射](#测试映射)。）
9. 保存映射。
10. 配置数据源中的目标表。
11. 映射的方向。
12. EDI 文档的架构（本例中为 810 发票）。
13. 源端和目标端的搜索栏。
14. 源表的结构。
15. 表的名称。这也称为表节点。
16. 表中的列。这也称为列节点。
17. 目标文档的结构。
18. 已完成的映射。

从下拉列表中选择一个表。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_select_first_table.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=7a2e7f87df529e1d7db5edc9a616a5e2" alt="Selecting the first table in the mapping" width="600" data-path="public/images/edi_select_first_table.png" />

要向映射添加更多表，请单击第一个表的链接，然后单击 **添加子表** 箭头并选择下一个表。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_select_child_table.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=41643be1270bfe97050dfb483d0b4c0e" alt="Selecting a child table in the mapping" width="600" data-path="public/images/edi_select_child_table.png" />

重复这些步骤，直到添加了所有必需的表。当进行更改时，映射页面将显示最新的表结构。

映射页面可创建 EDI 文档与来源或目标端口之间的链接。对于传入文档，EDI 文档结构位于左侧窗格中，端口表结构位于右侧窗格中。对于传出文档则相反，如在上面的带注释图片中看到的那样。

有关如何使用映射编辑器的详细说明，请参阅[映射](../mapping)文档中的[配置映射](../mapping/mapping-config)。

<Note>要编辑之前保存的映射，请单击 **EDI > 文档**，然后单击文档名称。在 **文档工作流** 部分中，单击 **文档目标**（用于传入文档）或 **文档源**（用于传出文档）中的端口链接。</Note>

### 了解来源和目标

如前所述，当创建*传入*文档时，必须指定将发送数据的目标端口。EDI 文档结构位于左侧窗格中，端口表结构位于右侧窗格中。

当创建*传出*文档时，必须指定要从中提取数据的源端口。此处，端口表结构位于左侧窗格中，EDI 文档结构位于右侧窗格中。

{siteNameShort} 提供了多种方式来操作表和文档结构中的信息。有关详细信息，请参阅[表结构节点](#表结构节点)和[文档节点](#文档节点)。

要更改文档架构，或上传代表源或目标 XML 结构的模板文件，请单击文档架构的链接并选择 **上传文件**。如果交易伙伴提供了他们希望发送和/或接收的示例文档，这将很有帮助。例如，如果交易伙伴提供了一个示例 X12 850，可以在常规工作区中以 `X12 to XML` 模式通过 [X12 端口](../connectors/x12) 将其转换为 XML。然后，可以将输出 XML 上传为模板文件。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_upload_template_file.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=164993752e8104853f66bc6c6b901a80" alt="Upload Template File dialog" width="300" data-path="public/images/edi_upload_template_file.png" />

浏览到模板文件，然后单击 **上传模板文件**。

#### 操作

配置端口时，有两个操作可用：

* Upsert 是针对传入文档的操作。此操作将数据插入或更新到目标表中。如果目标表中已存在记录，则使用输入提供的值对现有数据执行更新。
* Select 是针对传出文档的操作。此操作从目标数据源检索数据。

### 表结构节点

本节介绍显示源表或目标表结构的映射窗格中可用的选项。结构中有两种类型的节点：表节点和列节点。表节点表示表本身，列节点表示表中的列。

#### 表节点

表节点用表图标表示。将鼠标悬停在表节点上时，有两个附加选项：

* 单击漏斗图标打开 **添加映射条件** 页面，该页面可向映射添加过滤条件。有关更多信息，请参阅[使用条件编辑器](../mapping/mapping-condition-editor)。（仅适用于传入文档映射。）

* 单击省略号打开该表节点的选项列表：

  * **重命名表** 可更改节点的名称。
  * **删除表** 可删除节点。
  * **表设置** 打开一个编辑窗口，可在其中选择要包含在映射中的列，以及是否应用[过滤器组](#过滤器组)。（仅适用于传出文档映射。）
  * **编辑列** 打开一个编辑窗口，可在其中选择要包含在映射中的列。（仅适用于传入文档映射。）
  * **添加** 打开一个新的节点列表，可以在映射中创建和使用这些节点。（仅适用于传入文档映射。）选项包括：
    * **添加标题** 创建一个可以将值映射到的标头节点。映射的值不包含在输出文件中，但会作为标头添加到映射输出消息中。
    * **添加循环** 在所选节点上方创建一个循环节点，该节点将嵌套在循环节点内。有关更多信息，请参阅[映射循环](../mapping/mapping-config#mapping-loops)。
    * **添加条件** 可让您向目标节点添加条件，以便只有条件为真时数据才会更新插入到目标。有关详细信息，请参阅[使用条件编辑器](../mapping/mapping-condition-editor)。
    * **添加代码脚本** 打开 **添加脚本** 窗口，可以在其中命名脚本节点并提供自定义 {siteNameShort}Script。
    * **添加变量** 在所选节点下方创建一个变量节点。有关更多信息，请参阅[变量](../mapping/mapping-node-value-editor#variables)。

#### 列节点

列节点表示表中的列。每个列节点都有一个类型，即数据库中列的数据类型。共有七种不同的数据类型，每种都有自己的符号。将鼠标悬停在列上可查看其数据类型、大小以及是否可以为空。数据类型包括：

* String（字符串）
* Number（数字）
* Binary（二进制）
* Boolean（布尔值）
* Date（日期）
* Time（时间）
* Date and Time（日期和时间）

将鼠标悬停在列行上并单击省略号以打开该节点的选项列表：

* **重命名列** 可更改节点的名称。
* **删除列** 可删除节点。
* **添加** 打开一个新的节点列表，可以在映射中创建和使用这些节点。（仅适用于传入文档映射。）选项包括：
  * **添加标题** 创建一个可以将值映射到的标头节点。映射的值不包含在输出文件中，但会作为标头添加到映射输出消息中。
  * **添加循环** 在所选节点上方创建一个循环节点，该节点将嵌套在循环节点内。有关更多信息，请参阅[映射循环](../mapping/mapping-config#mapping-loops)。
  * **添加代码脚本** 打开 **添加脚本** 窗口，可以在其中命名脚本节点并提供自定义 {siteNameShort}Script。
  * **添加变量** 在所选节点下方创建一个变量节点。有关更多信息，请参阅[变量](../mapping/mapping-node-value-editor#variables)。
* **添加跟踪** 将[跟踪的标头](../getting-started/administration/activity#tracked-headers)添加到映射中。当节点启用跟踪时，它会显示一个指南针图标。

### 文档节点

文档节点是指映射另一侧的节点：非数据库侧。这些节点与数据源（带有列的表）没有明确关联，而是以 XML 结构表示 EDI 数据。对于传出文档，这些节点被映射到；对于传入文档，则从这些节点进行映射。

对于传出文档（使用 Select 操作），单击漏斗图标以打开 **添加映射条件** 页面，该页面可向映射添加过滤条件。有关更多信息，请参阅[使用条件编辑器](../mapping/mapping-condition-editor)。单击省略号以在目标文档中使用以下选项：

* **重命名节点** 可更改节点的名称。
* **编辑 XPath** 可编辑节点 XPath（仅适用于已映射为 `Foreach` 的元素）。
* **删除节点** 可从文档中删除节点。
* **添加节点**
  * **添加兄弟节点** 可在与所选节点相同的级别添加节点。
  * **添加属性** 可向所选节点添加属性。
  * **添加子节点** 可将节点添加为所选节点的子节点。
  * **添加标题** 创建一个可以将值映射到的标头节点。映射的值不包含在输出文件中，但会作为标头添加到映射输出消息中。
  * **添加循环** 在所选节点上方创建一个循环节点，该节点将嵌套在循环节点内。有关更多信息，请参阅[映射循环](../mapping/mapping-config#mapping-loops)。
  * **添加条件** 打开[条件编辑器](../mapping/mapping-condition-editor)，可以在其中添加条件，以便只有当条件为真时，数据才会更新插入到目标。
  * **添加代码脚本** 打开 **添加脚本** 窗口，可以在其中命名脚本节点并提供自定义 {siteNameShort}Script。
  * **添加变量** 在所选节点下方创建一个变量节点。有关更多信息，请参阅[变量](../mapping/mapping-node-value-editor#variables)。
* **剪切节点** 从当前位置剪切所选节点。
* **复制节点** 复制所选节点。
* **粘贴为子节点** 将剪切或复制的节点粘贴为所选节点的子节点。

对于传入文档（使用 Upsert 操作），单击源文档结构中的省略号以使用以下选项：

* **重命名节点** 可更改节点的名称。
* **删除节点** 可从文档中删除节点。
* **添加节点**
  * **添加兄弟节点** 可在与所选节点相同的级别添加节点。
  * **添加属性** 可向所选节点添加属性。
  * **添加子节点** 可将节点添加为所选节点的子节点。
* **剪切节点** 从当前位置剪切所选节点。
* **复制节点** 复制所选节点。
* **粘贴为子节点** 将剪切或复制的节点粘贴为所选节点的子节点。

也可以使用 **编辑节点** 打开 **编辑节点值** 页面。请参阅[使用节点值编辑器](../mapping/mapping-node-value-editor)。

## 测试映射

配置映射后，应该对其进行测试。单击页面顶部的 **测试映射** 按钮。下图显示了测试传入文档。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_test_mapping.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=1d19abd71b4a8245419742c6e14b8b04" alt="Test Mapping page" width="800" data-path="public/images/edi_test_mapping.png" />

测试页面的源端有两个选项卡：**XML** 和 **标头**（**标头** 选项卡仅适用于传入文档）。源中填充了要测试的文档或表结构的 XML 表示，但可以根据需要对其进行编辑。对于传入文档，单击 **标头** 选项卡以添加要在映射中使用的任何标头（有关更多信息，请参阅[跟踪的标头](../getting-started/administration/activity#tracked-headers)）。准备就绪后，单击 **测试映射**。

测试结果指示器显示在交易伙伴 **工作流** 页面和映射本身上。映射上的值为 **测试成功**、**测试有错误** 或 **未测试**。**工作流** 页面显示成功测试的勾选、未测试映射的棕色感叹号和有错误测试的红色感叹号。将鼠标悬停在图标上可查看有关错误的详细信息。

<Note>测试传入文档时，正在使用实时数据进行测试。单击 **测试映射** 时，{siteNameShort} 会在测试映射后尝试执行 `upsert`。</Note>

## 使用过滤器

如果需要过滤端口在源表结构中选择的数据，请单击省略号并选择 **表设置**，然后单击 **过滤器** 选项卡。将打开 **编辑 \<TableName> 设置** 窗口，可以在其中定义单个过滤器和过滤器组。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_filters.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=c6258f79d65145a46518576ca30969e4" alt="Filters tab in the Edit Table Settings window" width="700" data-path="public/images/edi_filters.png" />

### 创建过滤规则

要创建过滤器，请按照以下步骤操作：

1. 单击 **添加过滤器**。
2. 在新规则的下拉列表中，选择要过滤的列。
3. 选择过滤条件。可用的过滤条件取决于选择的列的数据类型。
4. 如果过滤条件需要值，请在空白值字段中输入该值。如果过滤条件不需要值（例如，如果选择 **Is Null**），则值字段会消失。

例如，可以在名为 Author 的列上创建一个过滤器，仅选择包含 Smith 的值。在此示例中，列为 **Author**，条件为 **Contains**，值为 **Smith**。

### 过滤器组

可以通过单击 **添加过滤器** 将多个过滤器应用于表。过滤器按组分隔，默认情况下所有过滤器都属于同一组。可以通过单击 **添加组** 创建多个组来分隔过滤器。

组中的每个过滤器根据在组顶部选择的选项与其他过滤器进行交互：

* 使用 **NOT** 切换开关可反转过滤条件。例如，在上面的 **Author** 过滤器示例中，启用 **NOT** 切换开关会指示端口选择不包含 **Smith** 的 Author 值。
* 选择 **AND** 或 **OR** 可确定多个过滤器的组逻辑。
  * 如果选择 **AND**，则组中的每个过滤器都必须为真才能满足过滤条件。
  * 如果选择 **OR**，则组内至少有一个过滤器必须为真才能满足过滤条件。可以满足多个过滤器，结果与只满足一个过滤器相同。

### 使用查询视图

打开 **查询视图** 以编写自定义 SQL 查询，从数据源中选择数据。这将覆盖在设计器中创建的任何查询。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/edi_query_view.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=c8cd305da9cefe2c5188c4fc9a9ec5d0" alt="Query View mode in the mapping filter" width="700" data-path="public/images/edi_query_view.png" />
