# 第一个工作流

Source: https://openflow.run/zh-cn/docs/guides/first-workflow/
Language: zh-CN
Product version: 0.1.0-beta.77

让一个小工作流接收姓名并返回问候语，全程无需调用外部服务。

你需要能访问一个 Open Flow 服务及其工作台。本地安装方法见[快速开始](https://openflow.run/zh-cn/quickstart/)。本例仅使用内置节点和本地代码执行能力。

## 导入案例

下载下方的工作流文件，在工作台中导入。导入会创建一份未发布的草稿，并分配新的工作流 ID 和修订版本 ID。原工作流的运行记录、发布记录、账号凭据和权限不会一并复制。

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

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

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

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

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

## 查看四个节点

1.  **Start**（开始）声明一个必填的字符串参数 `name`。
2.  **Greeting settings**（问候语设置）用固定值节点保存字符串 `Hello`，供其他节点引用。
3.  **Compose greeting**（生成问候语）分别从开始节点和固定值节点绑定 `name`、`prefix`，返回 `message`。
4.  **Workflow result**（工作流结果）将这条消息映射到工作流声明的业务输出。

在预览中选中节点即可查看配置。在工作台里，执行连线和输入绑定需要分别设置。节点间的连线决定目标节点何时可以执行，并不决定它读取哪个输入值。

## 运行草稿

在运行菜单中选择开始节点，填写：

```json
{ "name": "Ada" }
```

代码节点运行下面的 ES 模块：

```javascript
export default ({ name, prefix }) => ({
  message: `${prefix}, ${name}!`
});
```

运行成功后返回：

```json
{ "message": "Hello, Ada!" }
```

打开运行记录，查看各节点的输入和结果。工作流的业务输出由工作流输出节点声明；仅在代码中返回一个值，还不会将它设为工作流输出。

## 修改与发布

修改问候语前缀，重新测试草稿，确认结果后发布。编辑草稿不会影响当前线上版本（Live）。发布成功后，生产运行即可使用这个固定版本。

继续阅读[测试与发布](https://openflow.run/zh-cn/docs/guides/test-and-publish/index.md)，或加入[条件分支](https://openflow.run/zh-cn/docs/nodes/condition/index.md)和[人工审批](https://openflow.run/zh-cn/docs/nodes/approval/index.md)来控制后续执行。

## 资料来源

*   [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)
