# 工作流使用

工作流是有多个节点串联组成的一段逻辑流程。组成工作流的节点包括了触发节点和动作节点。触发节点为工作流提供了触发、启动工作流运行的能力，通常是流程的入口和起点。动作节点提供了各种逻辑功能，例如条件分支、运行 JS 代码、提供 HTTP 响应、对接微信支付等。多个动作节点的顺序、分支、循环串联，组成了工作流执行的过程。

## 工作方式介绍

### 启动运行

工作流通过被触发的方式启动执行，触发方式通过触发器完成，可以提供多种触发方式。详细内容可以通过具体触发器进一步了解：

* 通过组件或调用触发：通过云开发SDK、API或微搭编辑应用中的组件行为触发。
* 在指定时间触发：通过设计需要的触发时间或触发周期，定时触发工作流。
* 收到 HTTP 请求时触发：通过提供 URL 地址，在指定地址上收到 http 请求时触发。常用于 Webhook 场景。
* 收到微信事件消息推送时触发：在关联的公众号或小程序产生类似事件推送、客服消息、服务消息推送时触发工作流。
* 收到微信支付消息时触发：在关联的微信支付账号产生回调消息时触发工作流。

每一个触发事件，将会启动一个工作流的实例运行，在运行结束前，实例独立存在，且在实例环境内独有当前实例的各节点运行数据及全局的工作流数据、实例数据。

### 流程执行

在工作流被触发后，将根据流程配置，从触发器开始按顺序执行。流程中的一个节点执行完成后，再执行下一个节点。分支节点将根据分支配置，决定分支内下一个节点。工作流将持续执行直到最后一个可执行节点，并在完成节点执行后，结束工作流执行。

### 执行失败

在流程执行过程中，当有某个节点执行失败时，工作流将停止后续执行，当次触发运行当记录为执行失败。

### 执行输入输出

在通过调用触发、或通过 http 请求、消息推送等方式触发工作流时，调用参数、http请求内容、消息内容可以认为是工作流的输入参数。工作流的输入参数通常是作为具体触发节点的输入参数，并且触发节点会将输入参数再次输出给到工作流内部使用，后续的执行节点可以通过触发节点的输出内容，获取到工作流的入参。

工作流有两种方式输出执行结果。一种是通过加入 HTTP Response 的响应节点，在具备此节点，且执行流程中经过了此节点，此时无论后续是否有其他节点执行，工作流的输出参数均为 HTTP Response 响应节点的输出内容，且格式为 http 响应包格式。另外一种是在不具备 HTTP Response 响应节点的情况下，工作流将会把最后一个执行的执行节点的输出，作为工作流的输出参数，响应给到工作流的调用方。

## 节点说明

工作流由多种节点按流程串联而成。工作流的节点包含了触发节点和执行节点。工作流的执行起点是触发节点，并依次调用执行流程中的执行节点。

### 节点配置说明

#### 节点标识

每个节点均具备节点标识。在工作流的执行环境中，可以通过节点标识来获取节点相关的输出输入内容。

节点标识在创建节点时自动生成。

#### 节点输入、输出、错误输出

每个节点均具备输入、输出、错误输出的相关参数，在工作流的配置或代码节点中，可以通过 `$node.input`，`$node.output`，`$node.error` 获取。

在实际配置或运行过程中，input 输入内容，可能仅部分节点存在。output 输出内容，各节点基本均存在。error 错误内容，仅在节点执行失败时存在。


## 开发调试

工作流当前通过特定的工作流编辑器来进行开发、调试。

### 创建工作流

通过工作流的创建入口，来启动工作流创建流程。创建时可以选择通过模板创建，或直接创建空白工作流。

通过模板创建工作流，可以快速完成针对特定应用场景的工作流创建，并在后续基于创建出来的工作流进行进一步调整，以适配和对接实际业务功能。

在创建空白工作流后，需要首选选择工作流的触发节点，确定触发方式。完成触发节点选择后，将可以继续进行后续的流程编辑及设置。

### 编辑工作流

在工作流编辑器中，主画布提供了节点的排列、流程编辑能力。右侧栏提供了新节点添加，和选择节点的配置编辑能力。

在主画布中，可以通过拖动节点的方式进行节点的移动排列，可以通过拖动节点间连接线的方式，配置流程。

在未选中节点的情况下，右侧栏提供了可新增的节点。可以通过选择及拖动到主画布中的方式，来添加新的节点。

### 调试工作流

工作流的调试分为全流程调试和节点调试。全流程调试通过编辑器上方的流程调试来启动，节点调试通过选中单个节点后，点击节点调试启动。

在工作流调试或节点调试时，工作流在调试环境中运行，不会对已发布的工作流产生影响。同时针对工作流的修改编辑及调试，均在调试环境中进行，不会修改已发布工作流的配置。

#### 调试工作流

在选择启动流程调试时，将会提供流程的触发方式，并基于不同的触发方式提供调试启动方式。当触发方式为 http 请求时，将会提供触发本次调试的请求说明或 CURL 命令供调用。

当在调试模式下触发工作流后，工作流将会完成完整的流程执行，并使用调试入参作为工作流的入参进行相关执行。

在工作流完成调试的流程执行后，将会显示节点的运行情况及运行路径。如果有流程分支，也会显示调试时的实际执行分支路径。

#### 调试节点

除启动流程调试外，工作流中的每个节点也可以单独启动调试。单独启动的节点调试将仅运行当前节点。如果在当前调试节点中依赖流程中其他节点的输出，可以先调试运行对应节点，产生输出后，再调试运行当前所需节点。

在调试工作流或调试节点时，均可以查看到节点的输出内容，用于了解节点的实际运行情况，判断输出内容是否正确。

### 发布及历史版本、回滚

完成工作流的编辑及调试后，可以通过右上角的发布操作，将工作流发布至运行环境中。进行发布时，平台将以当前保存的工作流配置进行发布操作。在发布操作后，触发器将进入实际工作状态，根据各请求、事件或定时时间触发工作流。触发器的详细工作方式可以进一步从触发器节点介绍中了解。

多次进行发布时，将会把每次发布生成为一个发布版本；可以通过右上角的版本历史查看已经发布过的版本。通过版本历史中的“重新发布”操作，可以使得生效版本为指定选择的版本。

可以通过“复制到开发中画布”，将指定选择的版本内容复制到当前的开发画布中，此操作将会覆盖当前画布中的内容，请谨慎操作。

### 运行日志

发布后的工作流，可以从运行日志中查看运行情况。工作流的每一次触发将会记录为一组日志。日志内记录工作流的各节点的执行顺序、执行结果，节点内如果有日志输出，也将在工作流运行日志中可以获取查看到。
