# 输入与输出

Source: https://openflow.run/zh-cn/docs/concepts/inputs-and-outputs/
Language: zh-CN
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-cn/docs/nodes/start/index.md)定义工作流输入，[工作流输出节点](https://openflow.run/zh-cn/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)
