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

# 範例

> 知行之橋中常見的系統 API 用例，需要組合多個 API 請求，包括 ArcScript 整合。

export const siteNameShort = "知行之橋";

本節列舉了一些需要組合 API 請求來完成的常見用例。

## 向工作流程中插入檔案

POST 到 **Files** 資源會將檔案新增到特定端口的 Send、Receive 或 Sent 資料夾。要將檔案插入到工作流程中，請將該檔案 POST 到應處理該檔案的第一個端口的 **Send** 資料夾。例如：

```xml theme={null}
POST http://mydomain.com:8001.com/api.rsc/files
```

```json theme={null}
{
    "ConnectorId":"myConnector",
    "Folder":"Send",
    "Filename":"test.txt",
    "Content":"VGhpcyBpcyBhIHRlc3Qu"
}
```

請注意，**Content** 參數包含檔案的 base64 編碼內容。

如果目標端口啟用了**傳送自動化**，則檔案會自動被處理。否則，需要額外呼叫 **sendFile** 函式，指示端口處理該檔案。例如：

```xml theme={null}
POST http://mydomain.com:8001/api.rsc/sendFile
```

```json theme={null}
{
  "ConnectorId":"myConnector",
  "File":"test.txt"
}
```

## 檢索特定交易的日誌檔案

**getTransactionLogs** 函式用於檢索特定操作的日誌檔案。呼叫此函式需要知道相關交易的 MessageId。可以先查詢 **Transactions** 資源來找到 MessageId（Transactions 資源傳回有關交易的中繼資料，但不傳回交易日誌檔案本身）。

對 **Transactions** 資源的 GET 查詢應包含識別特定交易所需的任何過濾器，除非結果集可以由其他處理程序解析，以找到所需交易的 MessageId。例如：

```xml theme={null}
GET http://mydomain.com:8001/api.rsc/transactions(connectorId='myAS2Connector',Filename='myFile.edi')
```

回應的 JSON 正文將包含特定交易的 MessageId。在 **getTransactionLogs** 呼叫中使用此 MessageId，以及其他必需參數 **ConnectorId** 和 **Direction**（*Send* 或 *Receive*）。**IncludeContent** 參數應設定為 *True*，以便在回應中包含日誌檔案內容。例如：

```xml theme={null}
POST http://mydomain.com:8001/api.rsc/getTransactionLogs
```

```json theme={null}
{
 	"ConnectorId":"myConnector",
 	"Direction":"Send",
 	"MessageId":"message_id_from_earlier",
 	"IncludeContent":"True"
}
```

回應的 **Content** 參數將儲存 base64 編碼的日誌檔案內容。

## 從 ArcScript 呼叫系統 API

可以使用 ArcScript 向系統 API 傳送 **arc:call** 命令。每個呼叫必須以 `api.rsc/` 開頭。

此功能具有以下限制：

* 不支援 OData 查詢語法。
* 不應用速率限制器。
* 如果指令碼直接從管理控制檯執行，則使用者將是當前登入使用者。
* 如果指令碼由自動化服務執行，則審計中的 IP 地址將為 127.0.0.1。

### 檢索端口

以下範例是一個獨立的 **arc:call** 命令，用於檢索 **connectors** [資源](./admin-api-resources)：

```xml theme={null}
<arc:call op="api.rsc/connectors" httpmethod="get" authtoken="6o6B3m4r3F8z6m4R3d1k" out="o">
```

此命令由以下組成部分構成：

| 組成部分                                 | 描述                                                                                                                      |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| **op="api.rsc/connectors"**          | 設定 **op**（操作）[參數](../scripting/keyword-reference/op-arc-call#parameters)，以呼叫系統 API（使用 `api.rsc/`）並檢索 **connectors** 資源。 |
| **httpmethod="get"**                 | 將命令指定為 **GET** 命令。                                                                                                      |
| **authtoken="6o6B3m4r3F8z6m4R3d1k"** | 將指定權杖傳遞給 **authtoken** 參數。可以在**設定**頁面的**使用者**部分取得。                                                                      |
| **out="o"**                          | 將命令傳回的端口分配給 **o**。                                                                                                      |

以下 ArcScript 程式碼使用此 **arc:call** 命令建立所有現有端口的清單：

```xml theme={null}
<!--Initialize item for output and filename-->
<arc:set attr="result.data" value=""/>
<arc:set attr="result.filename" value="connectors.txt"/>

<!--Empty 'in' attribute to allow global scope for connectors-->
<arc:set attr="in.in" value=""/>

<!-- List all existing connectors -->
<arc:call op="api.rsc/connectors" httpmethod="get" authtoken="YourUser:YourAdminAPIToken" out="o" in="in">
  <arc:set attr="result.data" value="[o.connectorid]([o.connectortype])\n[result.data]"/>
</arc:call>

<!--Push to output-->
<arc:push item="result"/>
```

### 建立和修改端口

以下範例向系統 API 發出 **POST** 命令，以在流程中建立新的 **Script** 端口：

```xml theme={null}
<arc:set attr="new.connectorid" value="Script1"/>
<arc:set attr="new.connectortype" value="Script"/>
<arc:call op="api.rsc/connectors" httpmethod="post" authtoken="test0:8s9T7b7m5Y5k3i5P2s6x" in="new">
</arc:call>
```

建立此新端口後，可以向系統 API 發出命令，以取得新建立的 Script 端口的 **LogLevel** 值：

```xml theme={null}
<arc:set attr="read.connectorid" value="Script1"/>
<arc:call op="api.rsc/connectors" httpmethod="get" authtoken="test0:8s9T7b7m5Y5k3i5P2s6x" in="read" out="o">
  <arc:set attr="result.new:old_loglevel" value="[o.loglevel]" />
</arc:call>
```

也可以使用 **PUT** 命令更新 Script 端口的 **LogLevel**：

```xml theme={null}
<arc:set attr="update.connectorid" value="Script1"/>
<arc:set attr="update.loglevel" value="Debug"/>

<arc:call op="api.rsc/connectors" httpmethod="put" authtoken="test0:8s9T7b7m5Y5k3i5P2s6x" in="update" out="o">
</arc:call>
```
