# 执行路径与数据绑定

Source: https://openflow.run/zh-cn/docs/design/execution-model/
Language: zh-CN
Product version: 0.1.0-beta.77

分别配置执行路径和输入来源，让工作流的行为有据可查。

工作流需要说明两件事：节点何时可以执行，以及数据从哪里来。执行连线和输入绑定分别回答这两个问题。

## 执行路径

一次运行从一个触发器开始。普通节点会等待本轮中所有直接前驱完成或被跳过；只要至少一条入边被选中，它就会执行。如果所有传入路径都被跳过，该节点也会被跳过。

条件节点和等待类节点会选择具名的执行路径。分支名是控制信号，并不是普通的业务数据输出。

条件节点比较客户等级，选择优先处理分支或 otherwise 分支。

**输入**
参与比较的客户等级为 "priority"。

**预期结果**
选中 Priority queue。将等级改为其他值后，会选中 Standard queue。

**运行前准备**
导入或执行此案例需要 Open Flow 服务；预览本身可离线使用。

[下载工作流](https://openflow.run/docs/examples/route-by-value.openflow.json)

## 数据来源

节点可以读取固定值、支持的变量，以及所选上游路径上可用的输出。连接执行线不会自动绑定输入，绑定输出也不会自动创建执行线。

在分支汇合处，输入可以引用选中前驱路径及其上游节点的数据。被跳过的路径不能提供上一次调用留下的旧值。运行界面展示的“最新结果”也不决定输入取值的优先级。

开始节点提供姓名，固定值节点提供前缀，代码节点组合两者，工作流输出节点声明最终结果。

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

**预期结果**
{"message":"Hello, Ada!"}

**运行前准备**
导入或执行此案例需要 Open Flow 服务；预览本身可离线使用。

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

## 循环

回边可以启动后续迭代。首次进入时不等待回边，重复执行受到执行预算限制。需要将结果反馈到后续迭代时，应明确引用当前路径上可用的输出，不能依赖“哪个节点最后完成”。

## 外部操作的影响

任务的业务结果通过输出校验后才会提交，但外部调用可能在后续步骤失败之前就已生效。取消运行、回滚发布或运行失败，都不会撤回已经发送的邮件、API 请求或其他外部写入。

无法确认的结果会保留为不确定状态。恢复运行时，不能自动重复结果尚未确认的外部操作。详见[错误与重试](https://openflow.run/zh-cn/docs/concepts/errors-and-retries/index.md)。

## 资料来源

*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#graph-execution-and-side-effects)
*   [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)
