# 结构

我们的流程图支持顺序、判断、并行三种基本结构。

# 顺序

在快速上手中的请假流程就是一个典型的顺序执行结构,如下图:

# 判断

判断指流程根据一些表单字段的值来决定流程走向。

我们还是以先前的请假流程为例,现在在人事审核后需要添加一个判断,出国是出差的话需要办公室备案,备案后才进入申请人确认,如果不需要备案则直接进入申请人确认。

为此我们向流程图中加入一个判断节点,将这个节点插入到图中人事审核和申请人确认之间。

再添加一个办公室备案节点,配置步骤权限为办公室主任岗位,再将部门审核、判断节点、办公室备案、人事审核、申请人确认这些节点用动作连线连接起来并正确命名,此时我们的流程图如下。

填写判断节点的判断脚本

return "05".equals(${"fieldType"}):"Yes":"No";
1

判断脚本是符合BeanShell规范的可执行命令,这部分的说明可参考此处。我们看到判断脚本返回的是一个字符串结果,流程引擎会根据这个字符串匹配执行连线代码确定流程走向。这个脚本返回的是"Yes"和"No",所以我们判断节点后离开的两条连线的代码必须是"Yes"和"No",否则会不匹配。

# 并行

并行结构就是指流程可以同时在几个分支里流转,当然最终这些分支必须合并到一起。

现在我们的请假流程需求又改动了一下,当类型是出差时,允许办公室备案和人事审批同时进行,即办公室备案并不等待人事审批结束。当然这个在实际情况中显得并不合理,这里只是个举例说明并行的应用场景。

我们需要往流程图里添加并行和合并节点。

将人事审核和办公室备案节点拖放到并行和合并节点之间,现在我们的流程图如图所示。

现在人事审批和办公室备案就可以同步进行了,当这两步都完成后才会进入申请人确认节点。

以上的流程图没有考虑部门审核和人事审核不同意的情况,部门审核不同意或者人事任何不同意都应该回到填写请假单节点,为此我们添加部门审核回到填写请假单节点的动作连线。

此时会产生以下几个问题

问题1 部门审核节点连出多个连线但没有指定顺序

存盘时会报这个错误,因为此时部门审核节点连出了多个连线,这时候要指定顺序,这个顺序是办理流程时用户看到的操作按钮的顺序,另外提一下一般在不同意这样表否定的操作时基本都会跳过表单验证,而且表单界面上应该设置操作按钮颜色为次要色,表肯定的同意这样的按钮应该设置按钮颜色为主要色。所以我们配置不同意这个动作连线如下。



问题2 流程图不能确定发起节点

现在存盘会提示这个错误,因为不同意这个动作返回了填写请假单,此时流程图上就缺少了一个唯一只有出度没有入度的节点,为此我们需要告诉流程引擎哪个节点时启动节点,勾上默认启动节点选项即可。



问题3 返回填写请假单节点后的执行人限定不明确

目前填写请假单节点的限定执行岗位是教职员工,限定部门是网络信息中心,按现在的配置当流程被部门审核人退回后有权限执行这个待办的就是网络信息中心所有教职员工了,这显然是个错误。为此我们需要限定该步骤的执行人为第一次填写请假单的人,如下图配置。

现在开始处理人事审核中的返回填写请假但节点,部门审核不同意可以直接返回,但是人事审批节点不同意就不能直接返回填写请假单节点了,我们的流程引擎规定并行的所有分支必须回到合并节点,不能直接在一个并行分支中不经过合并就跳出并行结构。

为此我们的人事审批节点如果是不同意也需要流转到合并节点,并且出了合并节点后通过判断是继续前往申请人确认节点还是返回填写请假单节点,流程图再次改造如下。

人事通过判断节点中的脚本如下,以下脚本中的字段fieldHrPass用于判断是否人事审核通过,这需要以隐藏字段的方式加入到表单中。

return ${"fieldHrPass"}?"Yes":"No";
1

人事审核节点同意或者不同意都需要修改这个字段的值,最方便的做法是将设置值放到同意和不同意动作的执行脚本上。

// 同意
${"fieldHrPass"}=true;
// 不同意
${"fieldHrPass"}=false;
1
2
3
4

现在这个流程已经可以正常流转了,但这里还有一个小问题,那就是如果人事审核不同意,应该马上返回填写请假单,而不是像现在这样还需要等待办公室备案,为此我们需要在合并节点配置提前结束脚本。当任何一个分支流转到合并节点时都会判断提前结束脚本的返回值,当返回true时流程将会流转到合并节点的后续节点上继续运行。

添加以下代码到合并节点的提前结束脚本中,现在当人事审批不同意时将直接返回填写请假单节点。

return ${"fieldHrPass"}==false;
1

# 案例地址

download 案例流程