# 工作流程輸出

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

宣告工作流程回傳的業務結果，與節點日誌分開儲存。

工作流程輸出節點（Outputs）定義工作流程成功後回傳給呼叫方的值。程式碼或應用操作回傳的值，在對應到工作流程介面之前，都只是節點結果。

## 定義欄位與來源

一個工作流程最多有一個工作流程輸出節點。透過 `config.outputDefs` 定義具名欄位，透過 `node.add.inputs` 或 `input.set` 為各欄位綁定來源。

```json
{
  "op": "node.add", "as": "outputs", "type": "outputs", "name": "Workflow result",
  "config": {
    "outputDefs": { "message": { "schema": { "type": "string" }, "nullable": false } }
  },
  "inputs": { "message": { "kind": "output", "node": "$greet", "port": "message" } }
}
```

這裡的 `$greet` 引用同一批修改中較早建立的程式碼節點。還需要單獨連線到工作流程輸出節點的執行路徑。輸出定義沒有預設值。

## 執行行為

工作流程輸出節點是執行路徑的終點。它按一般匯合規則等待前驅節點，再從所選路徑計算宣告的欄位。它沒有下游執行連線，也沒有供下游讀取的資料連接埠。

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

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

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

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

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

成功結果與節點日誌分開保留，呼叫工作流程節點接收的就是這些業務輸出。執行一個未定義欄位的工作流程輸出節點，會得到空物件；沒有工作流程輸出節點的工作流程，則不宣告業務結果。

## HTTP 回應

Webhook 可以在整次執行成功後，將工作流程輸出作為回應回傳。這與 [Webhook 回應節點](https://openflow.run/zh-tw/docs/nodes/webhook-response/index.md)不同，後者可以提前回應，讓執行繼續執行。如果工作流程輸出節點被跳過，就無法提供動態的工作流程輸出 HTTP 回應。

## 資料來源

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#workflow-outputs)
*   [packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts)
