---
order: 2
navTitle: 绘制程序流
---
# 绘制程序流

程序流使用可视化的流程图绘制出服务器端后台业务逻辑的执行流程，图中每一个节点都代表一个执行动作（类似SuperPage的交互动作），本文讲述如何进行程序流的绘制：

![程序流示例图](./images/2021-09-26-16-43-47.png)

## 添加流程节点{#add-node}

当新建一个程序流时，系统会自动添加一个开始和结束节点，此时只需要添加程序流中的其他节点即可，如鼠标点击**开始**节点边框四周的+号，选择其中一个，即可添加第一个节点。

![添加节点](./images/2021_09_26_16_53_06_924.gif)

添加节点时有三种类型可选：

1. **动作节点**：一个节点对应一个动作，当流程走到这个节点时，就会执行这个节点上的动作。节点的可选项是[SuperPage动作](../superpage/design/action/README.md)的子集，主要是对数据的操作类动作，如[复制数据](../superpage/design/action/copy-data.md)、[提交表单](../superpage/design/action/submit-data.md)等。对于一些样式类的交互动作，如[显示对话框/悬浮面板](../superpage/design/action/show-dialog.md)，需要在SuperPage页面中自行设置，具体用法可参考对应的动作文档
2. **网关节点**：网关节点用于条件判断，使用菱形框表示。当流转条件比较复杂、需要分步或者维护时可以使用网关，帮助理清流程图结构，表示此处会根据不同条件，流转到不同的节点。网关没有节点属性，是通过连线上的条件执行不同分支
3. **结束节点**：每一条程序中，都至少有一个结束节点。新建程序流时，系统会自动添加一对开始和结束节点，将最后一个节点与结束节点进行连线即可。当流程中任务可能因为其他条件而需要结束流程，可根据需要自定义添加结束节点

## 流程线条{#line}

流程线条用来连接两个节点，以及在连线上设置分支的流转条件，如下所示：

![程序流线条](./images/2021_09_26_17_16_07_281.gif)

### 连接节点{#link-two-nodes}

鼠标移动到节点边框上的小圆点时，会变成一个+号，拖拽这个加号可以引出连线，拖动到目标节点边框四周的圆点上松开鼠标，可以绘出两节点之间的连线。如果要重新调整连线，可选中连线，连线的起点、终点以及中间会出现圆点，选中圆点可拖动连接至其他节点或调整连线的大小。

### 流程分支条件{#branch-condition}

如果节点有两个及以上线条流出时，需要设置线条的分支条件，流程依据设置的条件决定下一步执行到达的节点。有两种设置条件的方式：

- **设置启用条件**：即根据上一个节点的执行状态判断是否流转，在**启用**属性上设置，有以下几种选项：
  - 上一节点成功：表示上一节点执行成功时走这个线条分支，为默认选项。若上一节点是开始节点且满足**执行条件**，则一定会走这个分支
  - 上一节点错误：表示上一节点执行失败时走这个线条分支，可选择具体的导致上一节点执行失败的错误类型：
    - 全部：表示上一节点只要执行失败，无论导致失败的原因是什么，都会走这个线条分支，为默认选项
    - 主键冲突：表示操作的数据主键与表内已有数据的主键重复
    - 校验失败：表示模型上设置了[数据校验](https://docs.succapp.com/v5/data-gov/data-audit)，且校验失败
    - 其他异常：除**主键冲突**和**校验失败**外的所有异常错误
  - 上一节点结束：表示只要上一节点执行结束，无论最终的结果是否成功，都将走这个线条分支
  - 其他分支都不执行时：表示当其他线条分支的条件都不满足时，则走这个分支，该条件的优先级较低，总是优先判断条件为**上一节点成功/错误/结束**的分支
  - 禁用：禁用这条分支后，该条分支节点不再执行，一般在调试阶段使用，选择后不可设置**执行条件**
- **设置执行条件**：输入表达式来判断模型中的数据或**程序流**中的全局参数是否满足某种条件，需要勾选**设置执行条件**，勾选后必须同时满足**启用**条件和**执行条件**，才会流转到该线条分支

:::tip

当程序流的任意一条分支都不满足条件时，程序流会直接结束，值得注意的是，这种情况并不算程序流执行失败。

:::

## 删除节点或线条{#delete}

当不需要节点或线条时，可以将其删除。选中节点或线条，鼠标右键，在弹出的菜单中点击删除即可。在删除节点时，同时会将连接该节点的线条都删除，如下所示：

![删除程序流节点或线条](./images/2021_09_26_17_18_51_842.gif)

:::tip

当需要同时删除多个节点或线条时，可以按住ctrl，鼠标点击选中多个后松开ctrl，选中的颜色会变成橙色，此时右键在弹出的菜单中选择**删除**可以进行批量删除。

:::
