# 工作流输出

Source: https://openflow.run/zh-cn/docs/nodes/outputs/
Language: zh-CN
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-cn/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)
