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

# Finalize 端口

> Finalize 端口在下游工作流程成功後完成被延遲的來源訊息，讓來源端口可以安全地執行清理。

Finalize 端口用於完成被延遲的來源訊息。將其放在工作流程成功路徑的末端，用於確認工作流程已成功處理某個檔案，讓接收該檔案的端口執行其後續處理作業，例如刪除來源檔案。Finalize 端口隨知行之橋提供，不需要另外的授權。

> [!NOTE]
>
> 只有 [File 端口](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/connectors/file.md) 可以延遲最終確定。其他來源端口不支援此功能。

## 核心功能

* 延遲清理來源檔案，在下游工作流程成功之前不會刪除已接收的檔案
* 自動處理逾時，釋放待處理檔案以供再次接收，且不刪除來源檔案
* 無需設定即可關聯到來源端口，因為訊息本身攜帶了尋找來源端口所需的資訊
* 訊息無法最終確定時提供清楚的錯誤訊息

## 概觀

預設情況下，File 端口等來源端口在接收到訊息後會立即完成該訊息。任何後續處理作業（例如從來源資料夾中刪除檔案）都會立即執行，即使下游工作流程隨後失敗也是如此。

在 File 端口上啟用 **延遲最終確定接收的檔案** 後，端口會將每個接收到的檔案保持為待處理狀態。Finalize 端口會在工作流程的其餘部分成功後完成該待處理檔案。

當訊息到達 Finalize 端口時，該端口會：

1. 讀取訊息攜帶的延遲來源資訊。
2. 找到接收該檔案的來源端口。
3. 通知來源端口最終確定該檔案，從而觸發來源端口中設定的清理作業（例如，啟用 **刪除檔案（接收後）** 時刪除該檔案）。

Finalize 端口沒有輸出，只能作為[工作流程](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/flows/flows.md)中的最後一個端口使用。

## 端口配置

本節包含所有可設定的端口屬性。

### 設定索引標籤

*與端口核心設定相關的設定。*

<table><thead><tr><th>設定</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**端口 Id**</td>
<td>端口的靜態、唯一識別碼。</td></tr>
<tr><td>**端口型別**</td>
<td>顯示端口型別及其用途的描述。</td></tr>
<tr><td>**端口描述**</td>
<td>一個可選欄位，用於提供端口及其在流中的角色的自由格式描述。</td></tr></tbody></table>

### 進階索引標籤

#### 其他設定

| 設定 | 描述 |
| - | - |
| **處理延遲** | 放入 **交易** 索引標籤的檔案延遲處理的時間（以秒為單位）。這是一個舊版設定。最佳做法是[使用 File 端口](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/flows/designing-a-flow.md#與本地檔案系統互動)管理本機檔案系統，而不是使用此設定。 |

#### 日誌

*用於管理日誌建立和儲存的設定。*

<table><thead><tr><th>設定</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**日誌級別**</td>
<td>指定要記錄在端口日誌目錄中的資訊型別：
<ul><li>**None** - 不建立任何日誌。</li>
<li>**Error** - 僅當端口遇到錯誤時才建立日誌。</li>
<li>**Warning** - 僅當端口發出警告時才建立日誌。</li>
<li>**Info** - 記錄工作流程的一般資訊，包括任何錯誤和警告（如果適用）。</li>
<li>**Debug** - 記錄成功和失敗工作流程的詳細偵錯資訊。</li>
<li>**Trace** - 記錄成功和失敗工作流程的詳細跟蹤資訊。</li></ul>
\*\*請注意：\*\***Debug** 和 **Trace** 級別的日誌可能會記錄敏感資訊，包括訊息內容和 SSL 憑證。儘管連線屬性（例如密碼）被遮蔽了，但在與您的組織外部共享它們之前，請檢視此級別的日誌以避免洩漏敏感資訊。</td></tr>
<tr><td>**日誌資料夾結構**</td>
<td>指示端口根據選定的時間間隔將日誌資料夾中的檔案分組。例如，**Weekly** 選項指示端口每週建立一個新的子資料夾，並將該周的所有日誌儲存在該資料夾中。空白設定告訴端口將所有日誌直接儲存在日誌資料夾中。對於處理許多交易的端口，使用子資料夾有助於保持日誌的有序性並提高效能。</td></tr>
<tr><td>**保留訊息副本**</td>
<td>指示端口在日誌目錄中儲存最新訊息副本的切換。請注意，端口每個子資料夾只保留一個訊息，並且端口在再次執行時會覆蓋以前儲存的訊息。</td></tr></tbody></table>

#### 其它

*特殊設定適用於特定用例。*

<table><thead><tr><th>設定</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**其他設定**</td>
<td>允許在以分號分隔的清單中配置隱藏的端口設定，例如 `setting1=value1;setting2=value2`。正常的端口用例和功能不需要使用這些設定。</td></tr></tbody></table>

### 自動化索引標籤

#### 自動化設定

*與端口自動處理檔案相關的設定。*

| 設定 | 描述 |
| - | - |
| **傳送** | 指示端口在檔案準備就緒時自動傳送檔案的開關。 |
| **重試間隔** | 端口在重試失敗的傳送之前等待的時間間隔。 |
| **最大次數** | 端口嘗試傳送訊息的次數。將此值設定為 *1* 表示端口只執行初始傳送嘗試，不進行重試。每次嘗試之間，端口會等待 **重試間隔** 指定的時長。 |

#### 效能

*與端口資源分配相關的設定。*

<table><thead><tr><th>設定</th>
<th>描述</th></tr></thead>
<tbody><tr><td>**最大工作執行緒數**</td>
<td>此端口上處理檔案時從執行緒池中消耗的最大工作執行緒數。如果設定，則會覆蓋 [進階設定](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/advanced-settings.md) 頁面的 [效能設定](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/performance-settings.md) 部分的預設設定。</td></tr>
<tr><td>**最大檔案數**</td>
<td>分配給端口的每個執行緒傳送的最大檔案數。如果設定，則會覆蓋 [進階設定](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/advanced-settings.md) 頁面的 [效能設定](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/performance-settings.md) 部分的預設設定。</td></tr></tbody></table>

### 通知索引標籤

*與配置通知相關的設定。*

在執行服務級別協議 (SLA) 之前，需要設定電子郵件通知以接收通知。預設情況下，知行之桥 使用 [通知](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/alerts.md) 索引標籤上的全域設定。要為此端口使用其他設定，請啟用 **覆蓋全域設定**。

預設情況下，錯誤通知處於啟用狀態，這意味著每當出現錯誤時都會傳送電子郵件。要關閉錯誤通知，請取消選中 **啟用** 核取方塊。

輸入 **主題**（必填）。勾選**允許在主題中使用 ArcScript**，即可在**主題**欄位中使用 ArcScript。選中後會顯示 **ArcScript 編輯器**按鈕（![ArcScript 編輯器按鈕](https://docs.kasoftware.com/26.4/images/rest_arcscript_editor.png)）。

（可選）輸入以逗號分隔的**收件人**電子郵件地址清單。

### SLA 索引標籤

*與配置服務級別協議 (SLA) 相關的設定。*

SLA 允許配置預期流程中端口傳送或接收的資料量，並設定預期達到該資料量的時間範圍。當 SLA 未達到時，知行之桥 會傳送電子郵件警告使用者，並將 SLA 標記為 *存在風險*，這意味著如果 SLA 未能儘快達到，則會被標記為 *已違反*。這讓使用者有機會介入並確定 SLA 未達到的原因，並採取適當的措施。如果在風險時間段結束時仍未達到 SLA，則會將 SLA 標記為已違反，並再次通知使用者。

SLA 轉換為 *存在風險* 或 *已違反* 狀態時，也會寫入[應用程式日誌](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/activity.md#应用程序日志)，這意味著應用程式效能監控 (APM) 和日誌擷取工具也可以針對這些狀態發出警示。

要定義 SLA，請啟用 **預期資料量**，然後點選 **設定** 索引標籤。

![SLA Empty](https://docs.kasoftware.com/26.4/images/sla_empty.png)
<ul><li>如果端口具有單獨的傳送和接收操作，請使用選項按鈕指定 SLA 適用的方向。</li>
<li>在視窗的 **預計至少** 部分中：
<ul><li>設定預計處理的最小交易數量（交易量）</li>
<li>使用 **每個** 欄位指定時間範圍</li>
<li>指示 SLA 生效的時間。如果選擇 **開始於**，請填寫日期和時間欄位。</li>
<li>勾選希望 SLA 生效的星期幾對應的核取方塊。如有必要，請使用下拉功能表選擇 **每天**。</li></ul></li>
<li>在視窗的 **將狀態設定為“有風險”** 部分中，指定應將 SLA 標記為有風險的時間。
<ul><li>預設情況下，只有在違反 SLA 的情況下才會傳送通知。要更改此設定，請勾選 **傳送“有風險”通知**。</li></ul></li></ul>

以下範例顯示了為端口配置的 SLA，該端口預計在週一至週五每天接收 1000 個檔案。如果尚未收到 1000 個檔案，則會在時間段結束前 1 小時傳送風險通知。

![SLA Configuration Example](https://docs.kasoftware.com/26.4/images/sla_defined.png)

> [!NOTE]
>
> 如果有必要，可以關閉 SLA 通知。這在維護視窗期間非常有用。點選導覽列上的 **設定**，然後跳轉到 **通知 > 通用通知**。點選平板和鉛筆圖示進行編輯，並取消勾選 **SLA 通知** 設定。

### 交易索引標籤

此索引標籤列出了與該端口關聯的所有訊息。使用搜尋列尋找特定訊息，或點選漏斗圖示套用篩選條件。可以依時間、訊息方向和/或狀態進行篩選。

## 將 Finalize 與 File 端口搭配使用

若要將已接收檔案的刪除作業延遲到工作流程成功之後：

1. 在接收檔案的 File 端口上，啟用 **延遲最終確定接收的檔案**；如果希望刪除來源檔案，還需啟用 **刪除檔案（接收後）**。請參閱[接收](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/connectors/file.md#接收)。
2. 建置處理該檔案的工作流程其餘部分。
3. 新增一個 Finalize 端口，並將其連接到處理該檔案的最後一個端口的 **成功路徑**。

例如，某個工作流程先使用 File 端口接收檔案，再使用 X12 端口對其進行轉換，然後將資料 upsert 到 SQL Server，最後對檔案進行最終確定，其設定如下：

![包含 File 端口、X12 端口、SQL Server 端口和 Finalize 端口的工作流程](https://mintcdn.com/qiao/kYLwR1iZrGqYINH1/26.4/images/finalize-flow.png?fit=max\&auto=format\&n=kYLwR1iZrGqYINH1\&q=85\&s=75756e1f66745065f1c531e76d53c639)

1. File 端口從其設定的路徑接收檔案，並將其保持為待處理狀態。
2. X12 端口將檔案轉換為 XML。
3. SQL Server 端口將 XML 資料 upsert 到 SQL Server。
4. SQL Server 端口的 **成功路徑** 連接到 Finalize 端口，由 Finalize 端口完成該待處理檔案。

只有在工作流程開頭接收檔案的 File 端口才能延遲最終確定。工作流程後段用於將檔案傳送到資料夾的 File 端口不會延遲任何作業，但工作流程仍可以用一個 Finalize 端口結尾，以完成原始檔案。

在發生以下任一情況之前，檔案會一直保持待處理狀態，且不會被再次接收：

* **檔案到達 Finalize 端口。** File 端口完成該檔案並執行設定的清理作業。
* **達到待處理逾時時間。** 此逾時由 File 端口 [自動化索引標籤](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/connectors/file.md#自動化設定) 上的 **接收待處理逾時（分）** 設定控制。訊息會被標記為 Pending Timeout 錯誤，來源檔案不會被刪除，並且該檔案會被釋放，以便可以再次接收。

> [!NOTE]
>
> 並非來自已啟用延遲最終確定之端口的訊息無法被最終確定。將一般訊息傳送到 Finalize 端口會導致錯誤。

### 來源檔案變更

如果來源檔案在接收之後、最終確定之前發生了變更，端口不會刪除該檔案。應用程式日誌中會包含以下訊息，其中 `{0}` 為檔名：

`Source file '{0}' changed after it was received. Deferred finalization will not delete it.`

### 待處理逾時

File 端口 **自動化** 索引標籤上的 **接收待處理逾時（分）** 設定控制已接收檔案保持待處理狀態的時長。預設值為 10 分鐘；設定為 0 時，檔案會無限期保持待處理狀態。如果待處理訊息在逾時之前未被最終確定：

* 應用程式日誌會記錄該訊息在等待最終確定時超過了待處理逾時時間。
* 系統會傳送一封主旨為 **Send Failure: Pending Timeout** 的錯誤通知。
* 訊息會被標記為 Pending Timeout 錯誤，在 **交易** 索引標籤中顯示為 **Error**。
* 來源檔案不會被刪除，該檔案將可以被再次接收。

待處理訊息檢查會以 **檢查待處理** 自動化動作的形式執行。在 **Debug** [日誌級別](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/getting-started/administration/activity.md#日誌級別)下，[自動化日誌](https://docs.kasoftware.com/26.4/self-hosted/zh-Hant/getting-started/administration/activity.md#自動化日誌)會記錄每次檢查以及其處理的逾時訊息數量。

### 延遲訊息資訊

為延遲最終確定而保留的檔案會在其訊息標頭中攜帶額外資訊。若要檢視這些標頭，請在 File 端口的 **交易** 索引標籤中開啟該訊息，然後前往 **詳細資料** 索引標籤。

| 標頭 | 描述 |
| - | - |
| **File-Deferred-Source** | 等待最終確定的來源檔案的路徑。 |
| **Defer-Finalize** | 屬於最終確定鏈的工作區、端口和訊息 Id。Finalize 端口使用此標頭尋找來源端口以及要完成的待處理訊息。 |
| **Processed** | 列出處理過該訊息的每個端口及其狀態。在訊息被最終確定之前，已啟用延遲最終確定的 File 端口會顯示為 **待處理**。 |

## 疑難排解

當 Finalize 端口無法完成訊息時，會回報以下錯誤。

| 錯誤 | 原因和解決方法 |
| - | - |
| The message has no deferred source lineage. | 該訊息並非來自已啟用延遲最終確定的端口。請在啟動該工作流程的 File 端口上啟用 **延遲最終確定接收的檔案**。若要確認，請檢查該訊息的詳細資料中是否包含 **Defer-Finalize** 標頭。 |
| The deferred source lineage is invalid or has already been completed. | 用於識別來源訊息的資訊格式不正確，或者該訊息已被最終確定。請檢查工作流程是否多次將同一訊息傳送到 Finalize 端口。 |
| The deferred source connector `{workspace}:{connector}` does not exist. | 來源端口在接收檔案後被刪除或重新命名。請還原該端口，或從來源端重新處理該檔案。 |
| The deferred source connector `{workspace}:{connector}` is busy. | 來源端口正在處理其他工作。請在來源端口處理完成後重試傳送。 |
| The pending source message `{id}` does not exist in `{workspace}:{connector}`. | 待處理訊息在到達 Finalize 端口之前已逾時。如果此情況經常發生，請檢查工作流程完成所需的時間是否超過了 File 端口的 **接收待處理逾時（分）**，並在需要時增加該逾時值。 |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.