> ## 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} 旨在透過 [工作流程](../flows/flows) 頁面上配置的端口來處理複雜的資料集成用例。然而，某些特殊情況可能需要使用指令碼擴充套件 {siteNameShort} 功能集。{siteNameShort} 包含兩種指令碼語言：

* [ArcScript](./arcscript) — 一種指令碼語言，用於透過簡單的基於 XML 的命令自動化工作流程、轉換資料和自定義端口行為。
* [Python](./python-scripting) — 一種程式語言，用於處理資料、自動化工作流程以及在各種平臺和行業中構建自定義應用程式。

指令碼可以用來修改檔案（內容、標頭、檔名等）、觸發外部訊息流、對不容易適應標準化格式的自定義資料進行建模、執行外部指令碼和流程等。本節概觀了 ArcScript 語言，並透過範例詳細介紹支援的數值格式化器、關鍵字和運算器。

## 指令碼 Hook

{siteNameShort} 提供三個主要的指令碼語言 hook：所有端口上的 [事件](#事件指令碼)、專用的 [Script 端口](../connectors/script)，以及 [XML Map 端口](../connectors/xml-map/xml-map) 中的 [自定義指令碼](../connectors/xml-map/xml-map-advanced#custom-scripts) 選項。

### 事件指令碼

每個端口都提供了在檔案處理過程中的特定時刻執行自定義指令碼的機會。這些機會稱為事件。

* `Before Send` 事件會在端口為傳送/處理檔案做好充分準備後，但在實際傳送/處理發生之前觸發。

* `After Send` 事件在端口已經傳送檔案之後觸發。該事件僅適用於將檔案傳送到應用程式之外的端口，例如將檔案上傳到遠端伺服器。

* `After Receive` 事件會在端口建立新檔案後觸發；這個新建立的檔案可能是從外部源接收到的檔案（例如透過 AS2 接收訊息），也可能是修改或轉換 {siteNameShort} 工作流程中已有檔案的結果（例如，將 EDI 檔案轉換為 XML 會建立一個新的 XML 檔案）。

例如，可能需要在剛剛透過 AS2 接收到的檔案中新增一個自定義標頭。可以使用 ArcScript 編寫用於確定標頭值並將標頭新增到檔案中的邏輯，然後在負責接收檔案的 AS2 端口的 `After Receive` 事件中設定該指令碼。

<Note>不能使用事件指令碼直接在工作流程中建立檔案，或透過工作流程修改檔案的內容。</Note>

#### 事件中的錯誤處理

事件指令碼的執行是由檔案的成功傳送或接收觸發的，因此指令碼中擲回的錯誤不會影響傳送/接收操作的狀態。出於這個原因，應將事件中的指令碼限制為保證成功，或可以失敗而不影響整個工作流程的指令碼。

為了確保指令碼中的例外會導致檔案停止處理，請將指令碼移入下一節所述的專用 [Script 端口](#script-端口)中。使用 Script 端口還可以將錯誤記錄到[活動頁面](../getting-started/administration/activity)，並利用 {siteNameShort} 的**重試**功能來處理可能失敗的操作。

### Script 端口

{siteNameShort} 包含一個專用端口，用於執行自定義指令碼。可以透過將檔案傳遞給端口（與其他端口相同）在工作流程中觸發 [Script 端口](../connectors/script)，也可以使用 **Receive** [自動化設定](../connectors/script#automation-settings) 使其按指定間隔自動執行。

Script 端口是透過 ArcScript 執行自定義邏輯的最靈活方式。此外，如果用專用端口直觀地表示指令碼執行，而不是配置在另一個端口的事件中，那麼 {siteNameShort} 工作流程可能更容易理解和維護。

Script 端口可以透過 `push` 關鍵字生成輸出檔案，或者僅執行一些邏輯而不生成任何輸出。

### XML Map 端口

[XML Map 端口](../connectors/xml-map/xml-map)提供了一個視覺化設計器，用於將 XML 從一種結構轉換到另一種結構。使用 XML Map 設計器的主要方法是將元素從源樹結構拖放到目標樹結構。這種簡單的方法透過指令碼概念得到增強，以支援對映過程中的可擴充套件自定義處理。

XML Map 端口的[節點值編輯器](../mapping/mapping-node-value-editor)使用 ArcScript 的[格式化器](./value-formatters/formatters)在對映過程中動態修改和格式化資料。這些運算式不需要指令碼的其他方面，例如設定變數和呼叫操作。

XML Map 端口還為特定元素對映提供了[自定義指令碼](../connectors/xml-map/xml-map-advanced#custom-scripts)編輯器。在自定義指令碼中可以使用 ArcScript 的全部功能，以支援對映過程中的任意業務邏輯。這些指令碼有一個獨特的要求，即在指令碼執行結束時，將 `result.text` 屬性設定為輸出值（應在對映的 XML 元素中設定的值）。
