> ## 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.

# 工作流设计

> 如何在知行之桥工作流设计器中创建、连接和配置端口。

export const companyName = "知行软件";

export const siteNameShort = "知行之桥";

export const siteName = "知行之桥";

要访问工作流设计器，请单击 **工作流** 选项卡，然后创建一个新的[工作区](/26.2/self-hosted/zh/flows/workspaces)，或单击想要使用的现有[工作区卡](/26.2/self-hosted/zh/flows/workspaces#工作区卡)。

将出现工作流画布。如果已有端口，这些端口会显示在画布上。在这里，可以添加和配置新端口，连接并重新排列现有端口，以及配置现有端口。

* 左键单击并按住画布中的空白区域，可拖动设计器到合适的位置以获得更好的视图。
* 使用画布左下角的缩放选项，根据需要重新定位端口。

<Note>如果鼠标带有滚轮，也可以使用鼠标进行缩放。</Note>

## 创建端口

可以通过四种方式将新端口添加到工作流中：

* 单击画布右上角的 **添加** 按钮。
* 右键单击画布并选择 **添加端口**。
* 单击将鼠标悬停在连接两个现有端口的线上时出现的加号。
* 将鼠标悬停在现有端口的输入或输出箭头上，然后单击出现的加号。

根据选择的选项，将看到一个添加端口菜单，可用于选择要添加的端口。如果选择上述前两个选项之一，{siteNameShort} 缺少有关正在设置内容的上下文，因此会显示包含所有端口以及所有实现中包含的示例工作流的下拉列表。如果选择后两个选项之一，{siteNameShort} 只会显示适用于当前上下文的端口。

下图显示了完整窗口。每一行都包含端口名称和图标以及端口类型。将鼠标悬停在某一行上可查看当前许可证剩余的实例数。还可以按端口名称搜索，并按类型过滤列表。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_add_modal.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=7f0ffc3be21275e92c64c5bb1ebf178d" alt="Add connector" width="400" data-path="public/images/designing_flow_add_modal.png" />

做出选择后，**添加端口** 面板会打开。可以在此处命名端口，并选择它应执行的操作。有关面板中显示的所有信息的说明，请参阅[解释添加端口面板](#解释添加端口面板)。

根据端口选择，面板中可见的选项会有所不同。例如，某些端口没有任何操作，某些端口具有多选复选框，某些端口具有单选按钮，某些端口具有单选下拉菜单。有关详细信息，请参阅[指定操作](#指定操作)。该面板还会显示端口在工作流中出现时的预览，并包含指向端口特定文档的链接。下图显示了 [AS2](/26.2/self-hosted/zh/connectors/as2) 端口。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_add_modal2.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=dde08a47dce6edab55eb1fd12b2f8067" alt="Add connector pane with AS2 settings" width="600" data-path="public/images/designing_flow_add_modal2.png" />

<Tip>命名端口时（在 **端口 ID** 字段中），请务必选择一个能够清楚描述端口执行操作的名称。有关一些最佳实践建议，请参阅[端口命名约定](#端口命名约定)。</Tip>

单击 **创建端口** 以创建端口并打开其[配置](/26.2/self-hosted/zh/connectors#configuration)选项卡。有关详细信息，请参阅[配置端口](#配置端口)。

### 指定操作

创建端口时，**添加端口** 面板会要求指定要对端口使用的操作。

多操作 [MFT 端口](/26.2/self-hosted/zh/connectors/mft-connectors)，例如 [AS2](/26.2/self-hosted/zh/connectors/as2) 和 [AS4](/26.2/self-hosted/zh/connectors/as4)，支持在一个端口实例内使用单独的发送和接收操作。使用复选框选择一个或两个操作，如下图所示。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_actions.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=93be6e8d190af95765292a72f54c271e" alt="Connector action checkboxes" width="600" data-path="public/images/designing_flow_actions.png" />

如果同时选择发送和接收操作，{siteNameShort} 会创建两张端口卡片，每个操作一张。发送操作的卡片具有 **转到接收操作** 链接，接收卡片具有 **转到发送操作** 链接。下图显示了 AS4 端口：

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_multi-action.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=2f0f068167bcde9efda139ea16fb7817" alt="Multi-action AS4 connector cards" width="800" data-path="public/images/designing_flow_multi-action.png" />

<Note>对于多操作端口，未选择的操作不会显示在工作流画布中，但它们仍然有效。可以右键单击端口卡并选择显示或隐藏操作，而无需重新创建端口。</Note>

单操作端口（例如 [Database 端口](/26.2/self-hosted/zh/connectors/database-connectors)）支持每个实例一个操作（例如 Upsert、Select 或 Lookup）。使用下拉菜单选择操作。

转换[类型](/26.2/self-hosted/zh/connectors#categories)中的某些端口没有可选择的操作，因为它们执行一项任务：转换。这些端口上不会显示面板的 **操作** 部分。

### 开始触发器和流程终结

**开始触发器** 出现在工作流中第一个端口之前。它们指示哪些操作可以启动工作流。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_start_trigger.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=dc33ee18c752d4a938db9ebd90037902" alt="Start trigger display" width="500" data-path="public/images/designing_flow_start_trigger.png" />

开始触发器可以具有一种或多种状态，具体取决于端口使用以下哪种配置：

* 主动接收：在端口启用 **接收自动化** 时出现。触发器会显示 *下一次计划接收* 以及下一次接收的日期时间。
* 被动接收：当端口支持被动接收时出现。这意味着外部客户端可以随时向端口发送文件或请求。例如，[AS2](/26.2/self-hosted/zh/connectors/as2) 端口的触发器显示 *收到文件时*，而 [Webhook](/26.2/self-hosted/zh/connectors/webhook) 的触发器显示 *收到请求时*。
* 启用自动化或手动接收：当用户为特定时间间隔配置 **接收自动化** 时，启用自动化会生效。手动接收意味着需要导航到端口输出并单击 **接收** 按钮。这会触发一次接收操作。

当 {siteNameShort} 将消息交给底层磁盘，或消息在端口发送操作期间被该端口消耗且不生成输出时，**流程终结** 会显示在工作流末尾的终端端口上。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_terminal.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=2cbda16a75d319161cb6fee837cd3a1a" alt="Flow end on a terminal connector" width="450" data-path="public/images/designing_flow_terminal.png" />

## 使用注解

如果有权修改工作流，则可以向工作区添加注解。注解可以明确说明工作流的目的，并有助于组织工作流。每个注解都包含用户名和时间戳，详细说明其创建时间和上次修改时间。注解可以放在画布上的任何位置，并且可以随时拖动到其他位置。由于注解与工作区相关联，因此可以与其工作区一起[导入和导出](/26.2/self-hosted/zh/getting-started/administration/importing-exporting-flows)。

* 要添加注解，请右键单击工作流画布并选择 **添加注解**。
* 为注解添加标题并提供正文。
* 单击 **添加注解** 将注解保存在画布上。
* 使用注解上的省略号来编辑或删除它。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/flows_add_note.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=fe6115179326fc255197c12e512b55cf" alt="Add note dialog on a flow canvas" width="600" data-path="public/images/flows_add_note.png" />

## 连接端口

若要在设计器中重新排列端口，请拖动端口，让它们在画布上移动并重新排列到所需的配置中。

要连接端口，请从第一个端口 **输出** 部分中的箭头拖动到第二个端口左侧的箭头，如下图所示：

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_1.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=5e069e7f37f5c03304c2709455511388" alt="Connecting two connectors in the flow designer" width="800" data-path="public/images/designing_flow_1.png" />

这会在两个端口之间创建逻辑关系，以便第一个端口生成消息或文件后，将其直接传递给第二个端口进行处理。

要将端口连接到不同的端口，请将鼠标悬停在连接线上，然后单击并拖动要更改的连接末端的手柄。将连接放到新端口上。要断开端口连接，请单击连接两端箭头旁边的手柄。

## 配置端口

要配置端口，请单击画布上的端口以打开端口配置向导，如下图所示：

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_2.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=82c6b920a61116450c296563dbc56b0d" alt="Connector configuration wizard" width="1394" height="462" data-path="public/images/designing_flow_2.png" />

在出现的一系列选项卡上，可以配置和测试所有端口设置。完成更改后，选择面板左侧的灰色 x 以关闭端口配置向导，并将该空间返回给画布。

### 其他配置选项

右键单击工作流中的端口会显示以下选项：

* **删除端口** 删除端口。
* **显示错误路径** 显示错误路径。使用它来指定应将引发错误的文件路由到的端口。
* **显示成功路径** 显示成功路径。使用它来指定应将成功发送的文件路由到的端口。
* **导出端口设置** 将端口设置从当前服务器导出为压缩文件（名为 `ConnectorId.arcflow`）。
* **复制端口** 使用新的端口 ID 创建已配置端口的副本。
* **创建工作流 API 设置** 从选定的端口创建工作流 API。有关更多详细信息，请参阅[工作流 API](/26.2/self-hosted/zh/flows/flow-api)。
* **显示接收操作** 仅在允许多个操作但 **接收** 操作当前隐藏的端口上可见。使用它在画布上显示端口的接收操作。
* **显示发送操作** 仅在允许多个操作但 **发送** 操作当前隐藏的端口上可见。使用它在画布上显示端口的发送操作。

## 解释添加端口面板

下面的 AS2 **添加端口** 面板图像已添加注释，用于解释预览中每个元素的用途。每个数字对应下面的描述。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/flows_add_conn_modal_details.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=7e67d80f57dff7fee781ff1ef3956d1c" alt="Annotated Add Connector pane" width="600" data-path="public/images/flows_add_conn_modal_details.png" />

1. 使用此箭头将端口与工作流中的前一个端口连接。

2. 端口类型。将鼠标悬停在图标上可查看其预期用途的静态描述。

3. 将鼠标悬停在信息图标上可查看有关端口及其在工作流中角色的用户自定义信息。显示的内容来自 **设置** 选项卡上的 **端口描述** 字段。

4. 单击省略号打开上下文菜单。它包括 **显示成功路径**、**显示错误路径**、**复制**、**删除** 等操作。

5. 用户定义的端口名称（来自 **端口 ID** 字段）。

6. 这五个图标显示交易数量。如果没有可显示的交易，则隐藏警告和待处理图标。

   <table>
     <thead>
       <tr><th>图标</th><th>说明</th></tr>
     </thead>

     <tbody>
       <tr>
         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>
           <img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/add_connector_preview_success.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=a8abc994613d42e01f4ba695b538829e" alt="Successful transactions" noZoom style={{ display: "block", height: "24px" }} width="26" height="25" data-path="public/images/add_connector_preview_success.png" />
         </td>

         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>成功交易的计数。</td>
       </tr>

       <tr>
         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>
           <img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/add_connector_preview_unsent.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=a03e3b549ad2fc033cc701f8f37d5d01" alt="Unsent transactions" noZoom style={{ display: "block", height: "24px" }} width="22" height="25" data-path="public/images/add_connector_preview_unsent.png" />
         </td>

         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>未发送交易的计数。</td>
       </tr>

       <tr>
         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>
           <img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/add_connector_preview_warning.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=d4db78e7abac35ab09ffaced2fd50c27" alt="Warning transactions" noZoom style={{ display: "block", height: "24px" }} width="25" height="25" data-path="public/images/add_connector_preview_warning.png" />
         </td>

         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>带有警告的交易计数。</td>
       </tr>

       <tr>
         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>
           <img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/add_connector_preview_error.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=f7b26099daaebca65c46e0d961d66908" alt="Error transactions" noZoom style={{ display: "block", height: "24px" }} width="24" height="25" data-path="public/images/add_connector_preview_error.png" />
         </td>

         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>失败交易的计数。</td>
       </tr>

       <tr>
         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>
           <img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/add_connector_preview_pending.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=815a822bf762c6db81ee9750ade03d72" alt="Pending transactions" noZoom style={{ display: "block", height: "24px" }} width="28" height="25" data-path="public/images/add_connector_preview_pending.png" />
         </td>

         <td style={{ verticalAlign: "middle", padding: "0.25rem 0.75rem" }}>待处理交易的计数。</td>
       </tr>
     </tbody>
   </table>

7. 状态栏指示已配置的服务级别协议（SLA）的状态。SLA 在端口的 **提醒** 选项卡上配置。有关详细信息，请参阅 [SLA](/26.2/self-hosted/zh/getting-started/administration/activity#slas-tab)。状态栏有四种状态：
   * 开始：显示 SLA 开始的日期和时间。
   * 进行中：当 SLA 正在进行且不存在风险时显示。
   * 存在风险：当 SLA 正在进行且配置的截止日期即将到来，但尚未满足配置的数量时显示。
   * 已违反：当 SLA 截止日期已过且未达到预期数量时显示。

8. 端口中的灰色区域提供关键信息。例如，AS2 端口显示指定的操作（发送和/或接收）和配置的 AS2 ID。数据库端口显示指定的操作（select、upsert、存储过程等）和根表。

9. 使用输出箭头将端口连接到工作流中的下一个端口。

10. 引发错误的文件应路由到的端口路径。仅当右键单击端口并选择 **显示错误路径** 时才可见。

11. 成功发送的文件应路由到的端口路径。仅当右键单击端口并选择 **显示成功路径** 时才可见。

## 最佳实践

大多数工作流都有一个触发端口（数据在该端口处进入工作流）和一个终端端口（数据在该端口处退出工作流）。对于某些循环工作流，入口点和出口点可能是同一端口。

例如，当外部交易伙伴通过 AS2 发送业务文档时，数据可能会在 AS2 端口处进入工作流。该业务文档中的数据可能需要导入到数据库等后端系统中。在这种情况下，AS2 端口是触发端口，Database 端口是工作流的终端端口。

创建新工作流时，通常最容易从触发端口和终端端口开始。然后“向内工作”，向工作流中添加转换端口，以填充入口点和出口点之间的步骤（例如，可能需要添加将入站 AS2 负载转换为数据库插入的端口）。

### 与本地文件系统交互

{companyName} 建议在配置与本地文件系统交互的工作流时使用 [File 端口](/26.2/self-hosted/zh/connectors/file)。这对于与外部监控进程共享的文件夹尤其重要。下面概述了[文件拾取](#文件拾取)和[文件输出](#文件输出)的指南。

#### 文件拾取

要监控目录中待 {siteNameShort} 处理的文件，请在工作流开头添加 File 端口作为触发端口。在 **添加端口** 面板中取消选中 **发送** 操作。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/file_pickup.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=53c23148d2cb7f9a26e6d844138438bd" alt="File pickup connector configuration" width="600" data-path="public/images/file_pickup.png" />

然后按照以下步骤配置端口：

1. 打开 **设置** 选项卡。

2. 将 **路径** 属性设置为要监控的目录。可以使用宏基于日期和时间动态解析路径；将鼠标悬停在 **路径** 字段上可了解更多信息。

3. 使用要检索的文件模式配置 **文件掩码** 属性。

4. 为避免重新处理已拾取的文件，请根据最适合工作流的方式配置以下两个选项之一：

   * 在 **接收** 部分，选中 **删除文件（接收后）**。此选项会在文件处理后删除文件。
   * 在 **缓存** 部分，选中一个或两个缓存选项，以维护已处理文件的文件大小和/或时间戳记录。应用程序会跳过已缓存的文件，但不会删除它们。

5. 打开 **自动化** 选项卡。

6. **接收** 自动化应已启用。为目录设置所需的轮询间隔。

   <img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/file_pickup_automation.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=397339c9314f682a05ae1bbac3ea0bf5" alt="Receive automation settings" width="500" data-path="public/images/file_pickup_automation.png" />

#### 文件输出

要将处理后的文件输出到本地文件系统，请在工作流末尾添加一个终端 File 端口。

<img src="https://mintcdn.com/qiao/bVtjD3fvHFZBo1vE/public/images/file_dropoff.png?fit=max&auto=format&n=bVtjD3fvHFZBo1vE&q=85&s=93a78f5c28739794547314a7b2d85682" alt="File drop-off connector configuration" width="600" data-path="public/images/file_dropoff.png" />

按照以下步骤配置端口：

1. 打开 **设置** 选项卡。

2. 将 **路径** 属性设置为要输出文件的目录。可以使用宏基于日期和时间动态解析路径；将鼠标悬停在 **路径** 字段上可了解更多信息。

3. 打开 **高级** 选项卡。

4. 使用 **覆盖选项** 指定如何处理目标路径中已存在的文件。

### 文件传输端口特定于交易伙伴

通过网络发送或接收文件的端口（例如 AS2、AS4、FTP、SFTP、OFTP 等）是双向的，但它们针对单个交易伙伴进行配置。换句话说，一个 AS2 端口可以与 Amazon 发送 *和* 接收 AS2 消息，但不能同时也与 Walmart 发送和接收文件。

许多 MFT（可控文件传输）端口需要设置配置文件来交换文件。[配置文件页面](/26.2/self-hosted/zh/getting-started/administration/profiles)包含一个选项卡，用于为每个支持的协议配置应用程序范围的设置。例如，在 AS2 配置文件中配置的信息会用于所有 AS2 端口，而特定于伙伴的 AS2 连接详细信息则在每个 AS2 端口中配置。

### 端口命名约定

应始终为端口提供一个描述性名称，以传达端口在工作流中的角色。

* MFT 端口的名称（例如 AS2、AS4、FTP、SFTP、OFTP 等）应指示与之交换文件的远程方以及交换所用的协议（例如：*Walmart\_Production\_AS2*）。
* EDI 端口的名称（例如 X12 和 EDIFACT）应指示与之交换 EDI 文档的伙伴名称、转换方向和文档格式（例如：*Walmart\_X12\_Outbound*）。
* 数据映射端口的名称（例如 XML Map）应指示端口从何种格式/架构映射到何种格式/架构（例如：*Map\_850\_to\_Orders*）。
* 后端集成端口的名称（例如 Database、MySQL、CData）应指示特定的后端系统以及该后端系统中的表（如果适用）（例如：*PostgreSQL\_Orders\_table*）。

如果使用端口上的 **端口描述** 字段，则可以将光标悬停在信息图标上以查看该端口的描述。如果没有看到信息图标，则该字段中没有任何文本。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/designing_flow_description.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=e79f3f98010f5911a1a37dd6cb9c53ec" alt="Connector description hover tooltip" width="600" data-path="public/images/designing_flow_description.png" />

### 使用 XML 进行数据转换

{siteNameShort} 使用 XML 作为数据操作和转换的中间格式。许多端口会将各种格式的文件转换为 XML，反之亦然（例如 X12 端口、EDIFACT 端口、CSV 端口等）。此外，{siteNameShort} 使用 XML 对后端系统输入和输出进行建模（例如对类似数据库的系统执行 SELECT 和 INSERT）。

由于大多数源格式和目标格式都可以表示为 XML，因此数据转换工作流通常具有以下结构：

* 以原始（源）格式提取或接收数据的端口
* 将此源格式转换为 XML 的端口（如果它还不是 XML）
* 将此源 XML 转换为表示目标（目的地）格式的新结构的 XML Map 端口
* 将转换后的 XML 转换为目标格式的端口（如果需要非 XML 格式）
* 将最终文件发送到其预期目标的端口

[XML Map 端口](/26.2/self-hosted/zh/connectors/xml-map/xml-map)是在这些数据转换工作流中执行关键工作的引擎。熟悉数据转换通常意味着熟悉 XML Map 端口的可视化设计器。

### 将工作流组织到工作区

可以在同一个工作流画布中配置多个单独的工作流，而不会产生交叉污染风险，但将工作流划分到不同的[工作区](/26.2/self-hosted/zh/flows/workspaces)有助于减少混乱并保持组织有序。

单击 **工作流** 选项卡以打开工作区列表。可以在此处创建新工作区、导入或导出工作区配置设置，以及删除工作区（Default 工作区除外）。任何时候都只会显示当前工作区中的端口。

不同工作区中的端口不能相互连接，并且特定于这些端口的数据和配置文件保存在单独的文件夹结构中。
