一、 流程引擎节点类型
序号 |
节点类型 |
节点名称 |
功能含义 |
1 |
|
开始 |
发起流程的节点,通常要配置业务表单,设置可以发起流程的处理者。 |
2 |
|
结束 |
结束流程的节点 |
3 |
|
连线 |
连接任务节点,表示任务流转方向,可以在连线配置通过条件和通过后事件。 |
4 |
|
交互 |
表示该任务需要人机交互,通常需要配置业务表单和处理者,在业务表单中填写数据。 |
5 |
|
控制 |
当有多个分支或实例合流时控制是否向下流转,有两种控制方式And 或Or,会签需要配合该节点。 And表示前面的实例都必须完成时才能向下流转,Or表示前面的实例任何一个完成时即可向下流转。 |
6 |
|
查看 |
表示该任务只做查看,不用审批,但需要通知某人,被通知人查看后需要保留流程记录。 如果不需要保留流程记录请使用抄送功能。 |
7 |
|
子流程 |
表示进入另一个流程,理论上任何一个流程都可以做完其他流程的子流程。 |
8 |
|
适配器 |
表示该任务会转到后台执行,调用这里面配置的方法,不需要人机交互。支持存储过程、dll方法。 |
二、流程图实例
一个付款流程的部分截图:
三、节点属性设置
节点大致分为两种类型交互类型和非交互类型,交互类型包括:开始节点、交互节点、查看节点,非交互类型包括:适配器节点、控制节点、结束节点。交互类型的节点需要配置表单、处理者、权限、超时参数、任务通知、抄送;非交互类型配置较简单根据节点功能作相应配置。
四、处理者
处理者是指任务的处理对象,可以是个人、角色、部门、岗位、从变量获取、某一任务实际执行者、流程启动者、所有人等多种类型,并可以根据上述对象的关系设置处理人,例如设置流程启动者的部门领导。关系类型包括:本部门领导、所在部门、上级部门、下级部门、上级领导、下级领导等。还可以设置包含与排除关系,可以从上述处理者中排除某人,流程将不会流转给此人,注意只能排除某个人,不支持排除其他对象。
在设置处理者时,还可以设置处理者策略,包括任意用户处理(共享)和所有用户处理(会签),任意用户处理时,引擎会产生一个任务实例和多个处理者实例,只要任意用户处理即可;所有用户处理时,引擎会为每个用户产生一个任务实例,同时为每个任务实例产生一个处理人实例,每个任务实例都需要处理人处理,此时任务节点后面需要配置控制节点,并配置为And类型,表示所有任务实例都完成后才向下流转。
当处理人是提交人时可以设置跳过该处理,处理方式是自动以同意的方式提交流程。但会签时不会自动处理。自动处理时也会遵循连线通过条件。
注:处理者和处理人的区别,处理者是指处理对象,处理人是指具体的某个人,处理人是处理者的一种类型。
任务处理者除了在流程模板中配置外还可以在流程提交的时候动态选择处理人,该功能需要在权限控制中配置,并且在表单提交的时候调用动态处理人设置接口。
五、变量设置
流程引擎可以通过变量获取处理人,变量是数据库字段的映射,可以根据流程实例Id或者任务实例Id获取到字段值。根据访问范围不同,可以分为流程变量和任务变量,流程变量适用于整个流程实例,任务变量只适用于产生变量值的任务实例,其他任务节点不能访问。
一个流程实例中可能产生多个变量值,原因可能是退回多次处理该任务或者是循环流程,而每次流转都要获取最后一次创建的变量值,所以在设置变量时应设置排序规则,通常按照时间倒序,引擎会获取到最后创建的值进行使用。
六、连线属性设置
连线控制引擎流转方向,在连线上可以配置通过条件和通过后事件。
通过条件包括命令、优先级和表达式,无论是直流还是分流,每条线必须对应一个默认的命令和默认的优先级,分流时,分出的多条线可以使用同一个命令和优先级,也可以使用不同的命令和优先级,当使用同一个命令时,只流转优先级最高的连线,优先级低的连线将不会流转。表达式可以为空,当不为空时引擎会判断表达式是否成立。总之,连线通过的条件是命令、优先级、表达式都满足时,表达式遵循sql语法,支持and、or、括号等复杂表达式,变量名使用<%%>包括起来,使用时注意变量类型,例如:<%审核状态%>=1 and <%审核人%>=‘张三’。
注意:每次任务提交时至少要有一条线满足流转条件,否则引擎停在原地。
完成后事件是指在满足连线通过条件后执行的事件,事件类型包括:sql语句、存储过程、变量、dll方法。每种类型要求的参数和返回值如下:
1、 SQL:
类型 |
支持参数(不区分大小写) |
是否必须 |
说明 |
Sql
|
@workFlowInstanceId |
二者必须其中一个不能为空 |
自动获取流程实例Id |
@workTaskInstanceId |
自动获取任务实例Id |
||
@userId |
否 |
自动获取当前用户userId |
|
@userName |
否 |
自动获取当前用户userName |
|
@doResult |
否 |
自动获取表单传入的审批结果 |
|
@doResultMsg |
否 |
自动获取表传入的审批意见 |
|
@doCommandName |
否 |
自动获取连线执行的命令 |
调用实例如下图:
2、 存储过程:
类型 |
支持参数(不区分大小写) |
是否必须 |
说明 |
存储过程
|
@OrganizeId |
否 |
自动获取当前组织Id |
@UserId |
否 |
自动获取当前用户userId |
|
@UserName |
否 |
自动获取当前用户userName |
|
@OperatorInstanceId |
是 |
自动获取当前处理实例Id |
|
@doResult |
否 |
自动获取表单传入的审批结果 |
|
@doResultMsg |
否 |
自动获取表传入的审批意见 |
|
@doCommandName |
否 |
自动获取连线执行的命令 |
调用实例如下图:
返回值:
存储过程必须返回一个结果集0或者1,1表示执行成功,0表示执行失败。注意执行失败时引擎停止流转,但不回滚已经创建的任务,所以开发者必须保障存储过程执行准确,并自行在存储过程中做好事务处理。一个存储过程实例如下:
3、变量:
变量是指映射数据库中的字段,连线通过时会根据流程实例Id和任务实例Id更改该字段的值。如下图:
4、 Dll方法:
上述几种方法都离不开数据库,引擎还提供一种不依赖数据库的调用方式,即调用Dll方法,可以在该方法中实现网络远程请求。Dll必须放在bin\UserDll文件夹中,方法支持的参数如下表:
类型 |
支持参数(区分大小写) |
是否必须 |
说明 |
Dll
|
operatorInstanceId |
否 |
自动获取处理者实例Id |
userId |
否 |
自动获取当前用户userId |
|
userName |
否 |
自动获取当前用户userName |
返回值:true或false
实例如下图:
注意:dll类库构造函数不支持参数,且只支持非静态方法。
配置如下图:
七、会签
会签是指前面的任务实例都完成后向下流转,前面的流程实例可以来自一个任务节点(处理者策略需要配置为所有用户处理),也可以来自多个任务节点,无论是那种形式后面都必须使用控制节点且配置为And来完成合流。
如下图:
八、加签
加签顾名思义,增加一个签批,即任务需要某人处理后我再处理的场景,处理者把任务提交给某人,某人处理后归还任务,再由原处理人继续处理。
九、转办
转办是指任务交给其他人处理,本人不再处理该任务,其他人处理后直接提交任务,不再归还任务。
十、抄送
抄送是指任务实例完成后通知某人知晓,与通知节点不同的是,不产生流转记录,只在抄送人的待阅信息中查看。
十一、退回上一步
退回上一步是指任务退回给上一步提交人,通常是信息有误,需要提交人修改后再次提交。
十二、退回发起人
退回给发起人是指任务退回给流程启动者,通常是从开头重新走流程,该场景要求业务表单做好已产生数据的处理,避免数据重复。
十三、退回指定任务
退回给指定任务是指退回给已经走过的任务节点,让任务节点的人重新处理。通常是确定某一步出错了,从该节点重新走流程,该场景同样要做好已存数据的处理,避免重复。
十四、跳过任务
跳过任务是指按照默认同意的方式自动提交任务,继续遵循连线通过条件等规则。