# 輸入與輸出

Source: https://openflow.run/zh-tw/docs/concepts/inputs-and-outputs/
Language: zh-TW
Product version: 0.1.0-beta.77

為資料命名、定義型別和綁定來源，並與執行分支分開設定。

連接埠為一個值指定名稱、JSON schema 和是否允許為 null。節點執行時，由綁定的資料來源提供這個值。

## 輸入來源

| 來源 | 含義 |
| --- | --- |
| 固定值 | 儲存在節點中的 JSON 字面值。 |
| 上游輸出 | 所選執行路徑上可用的具名業務輸出。 |
| 變數 | 由部署端為本次執行讀取的帳號變數。 |
| 預設值 | 在節點支援時，繼承該輸入儲存的預設值。 |
| 未設定 | 明確不綁定輸入，也不繼承預設值。 |

不同節點支援的來源不同。應用觸發器的設定在執行建立之前就會使用，因此不能讀取本次執行中才會產生的結果。支援範圍以節點結構說明為準。

## 綁定上游輸出

下面的公開編排操作只綁定輸入，不會新增執行連線：

```json
{
  "op": "input.set",
  "node": "TARGET_NODE_REFERENCE",
  "input": "message",
  "source": { "kind": "output", "node": "SOURCE_NODE_REFERENCE", "port": "message" }
}
```

節點只有一個業務輸出時，公開介面允許省略連接埠，由系統自動確定。存在多個輸出時，應明確選擇連接埠。

開始節點提供姓名，固定值節點提供前綴，程式碼節點組合兩者，工作流程輸出節點宣告最終結果。

**輸入**
{"name":"Ada"}

**預期結果**
{"message":"Hello, Ada!"}

**執行前準備**
匯入或執行此案例需要 Open Flow 服務；預覽本身可離線使用。

[下載工作流程](https://openflow.run/docs/examples/first-workflow.openflow.json)

## 資料型別與缺失值

schema 約束和是否允許為 null 會分別檢查。即使畫布上連線了節點，數字也不能直接滿足字串輸入。下游需要選擇物件欄位時，應在 schema 中宣告 `properties`。

欄位選擇器只讀取輸出 schema 中宣告的某個直接屬性。屬性名中的點號和斜線都按一般字元處理，不表示巢狀 JSON 路徑。

沒有可用來源時，輸入得到 `null`；顯式輸出的 null 也算一個可用來源。同一輸入同時存在多個可用來源時會報錯。最終值能否被接受，再由連接埠驗證決定。

## 工作流程介面

[開始節點](https://openflow.run/zh-tw/docs/nodes/start/index.md)定義工作流程輸入，[工作流程輸出節點](https://openflow.run/zh-tw/docs/nodes/outputs/index.md)定義輸出及其取值對應。工作流程輸出節點沒有供下游讀取的資料連接埠，呼叫方會將其值作為工作流程業務結果接收。

## 資料來源

*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#edits-and-input-sources)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#execution-graphs-and-input-sources)
*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md)
