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

# 脚本

> 知行之桥中脚本功能概述，包括 ArcScript 和 Python。

export const siteNameShort = "知行之桥";

export const siteName = "知行之桥";

{siteName} 旨在通过 [工作流](/26.2/self-hosted/zh/flows/flows) 页面上配置的端口来处理复杂的数据集成用例。然而，某些特殊情况可能需要使用脚本扩展 {siteNameShort} 功能集。{siteNameShort} 包含两种脚本语言：

* [{siteNameShort}Script](/26.2/self-hosted/zh/scripting/arcscript) — 一种脚本语言，用于通过简单的基于 XML 的命令自动化工作流、转换数据和自定义端口行为。
* [Python](/26.2/self-hosted/zh/scripting/python-scripting) — 一种编程语言，用于处理数据、自动化工作流以及在各种平台和行业中构建自定义应用程序。

脚本可以用来修改文件（内容、头部、文件名等）、触发外部消息流、对不容易适应标准化格式的自定义数据进行建模、执行外部脚本和流程等。本节概述了 {siteNameShort}Script 语言，并通过示例详细介绍支持的数值格式化器、关键字和运算器。

## 脚本 Hook

{siteNameShort} 提供三个主要的脚本语言 hook：所有端口上的 [事件](#事件脚本)、专用的 [Script 端口](/26.2/self-hosted/zh/connectors/script)，以及 [XML Map 端口](/26.2/self-hosted/zh/connectors/xml-map/xml-map) 中的 [自定义脚本](/26.2/self-hosted/zh/connectors/xml-map/xml-map-advanced#custom-scripts) 选项。

### 事件脚本

每个端口都提供了在文件处理过程中的特定时刻执行自定义脚本的机会。这些机会称为事件。

* `Before Send` 事件会在端口为发送/处理文件做好充分准备后，但在实际发送/处理发生之前触发。

* `After Send` 事件在端口已经发送文件之后触发。该事件仅适用于将文件发送到应用程序之外的端口，例如将文件上传到远程服务器。

* `After Receive` 事件会在端口创建新文件后触发；这个新创建的文件可能是从外部源接收到的文件（例如通过 AS2 接收消息），也可能是修改或转换 {siteNameShort} 工作流中已有文件的结果（例如，将 EDI 文件转换为 XML 会创建一个新的 XML 文件）。

例如，可能需要在刚刚通过 AS2 接收到的文件中添加一个自定义头部。可以使用 {siteNameShort}Script 编写用于确定头部值并将头部添加到文件中的逻辑，然后在负责接收文件的 AS2 端口的 `After Receive` 事件中设置该脚本。

<Note>不能使用事件脚本直接在工作流中创建文件，或通过工作流修改文件的内容。</Note>

#### 事件中的错误处理

事件脚本的执行是由文件的成功发送或接收触发的，因此脚本中抛出的错误不会影响发送/接收操作的状态。出于这个原因，应将事件中的脚本限制为保证成功，或可以失败而不影响整个工作流的脚本。

为了确保脚本中的异常会导致文件停止处理，请将脚本移入下一节所述的专用 [Script 端口](#script-端口)中。使用 Script 端口还可以将错误记录到[活动页面](/26.2/self-hosted/zh/getting-started/administration/activity)，并利用 {siteNameShort} 的**重试**功能来处理可能失败的操作。

### Script 端口

{siteNameShort} 包含一个专用端口，用于执行自定义脚本。可以通过将文件传递给端口（与其他端口相同）在工作流中触发 [Script 端口](/26.2/self-hosted/zh/connectors/script)，也可以使用 **Receive** [自动化设置](/26.2/self-hosted/zh/connectors/script#automation-settings) 使其按指定间隔自动执行。

Script 端口是通过 {siteNameShort}Script 执行自定义逻辑的最灵活方式。此外，如果用专用端口直观地表示脚本执行，而不是配置在另一个端口的事件中，那么 {siteNameShort} 工作流可能更容易理解和维护。

Script 端口可以通过 `push` 关键字生成输出文件，或者仅执行一些逻辑而不生成任何输出。

### XML Map 端口

[XML Map 端口](/26.2/self-hosted/zh/connectors/xml-map/xml-map)提供了一个可视化设计器，用于将 XML 从一种结构转换到另一种结构。使用 XML Map 设计器的主要方法是将元素从源树结构拖放到目标树结构。这种简单的方法通过脚本概念得到增强，以支持映射过程中的可扩展自定义处理。

XML Map 端口的[节点值编辑器](/26.2/self-hosted/zh/mapping/mapping-node-value-editor)使用 {siteNameShort}Script 的[格式化器](/26.2/self-hosted/zh/scripting/value-formatters/formatters)在映射过程中动态修改和格式化数据。这些表达式不需要脚本的其他方面，例如设置变量和调用操作。

XML Map 端口还为特定元素映射提供了[自定义脚本](/26.2/self-hosted/zh/connectors/xml-map/xml-map-advanced#custom-scripts)编辑器。在自定义脚本中可以使用 {siteNameShort}Script 的全部功能，以支持映射过程中的任意业务逻辑。这些脚本有一个独特的要求，即在脚本执行结束时，将 `result.text` 属性设置为输出值（应在映射的 XML 元素中设置的值）。
