在线网络文档
一、环境介绍
1、基础架构
springboot + springcloud + nacos + mybatisplus + mysql + snakerflow
spring-boot 2.4.10
spring-cloud 3.0.4
mybatis-plus 3.4.2
mysql 5.1.46
nacos 2021.1
snakerflow-spring-boot-starter 1.0.8
2、基本环境
3、数据库表
1.snaker表得相关理解:
1.snaker使用的时候不依赖相关组织架构,只有流程定义以及任务相关的数据表
2.一个任务开始后就会在wf_process新建一条数据,在wf_order可以看到相关的流程实例,一个实例对应的可能会有多个任务,可在wf_task查看任务,当前任务参与人是在wf_task_actor中查看。
wf_task_actor 任务参与者表
记录了流程设计图里面assignee
字段里面的内容,也是目前需要的审批人,目前当前是部门或者审批人的ID,每条数据对应的当前需要审批的任务
wf_task 任务表
记录当前任务一些基本信息
wf_order 流程实例表
当前流程实例,一个order_id可能对应有多个task_id任务
3.可在wf_hist_order查看历史实例,wf_hist_task中的一般是完成得任务,但流程不一定走完。查看流程走完一般看wf_hist_order里面得end_Time和order_State,当有end_Time和order_State为0时,流程才算走完。
wf_hist_task_actor 历史任务参与者表
查看每条任务审批人
wf_hist_task 历史任务表
历史任务审批人的基本信息
wf_order 流程实例表
历史流程对应的基本信息,一个流程基本就只有一个order,当我们传的args值都是在variable里面进行保存
4.根据目前场景新增了数据表
business_to_snakerflow 业务保存到流程表
其中business_id、business_type、model_type是与业务相关字段,每次新建一个流程时都会生成一条数据
snaker_process_design 流程设计器内容表
主要保存流程设计器也是*.snaker文件文件上面的内容,每个流程都需要一个对应的流程图,里面主要记录的是xml文件内容,可以通过内容上面的信息,将开启工作流
snaker_process_detail 流程使用表
流程详情,目前只是记录了流程里面当前开启流程、执行流程、作废流程的相关记录,如果后期开发需要记录,可以在此表中增加相关记录。
2.表目录
表名称 | 描述 |
---|---|
wf_process | 流程定义表 |
wf_order | 活动实例表 |
wf_task | 活动任务表 |
wf_task_actor | 活动任务参与者表 |
wf_hist_order | 历史实例表 |
wf_hist_task | 历史任务表 |
wf_hist_task_actor | 历史任务参与者表 |
wf_surrogate | 委托代理管理表 |
wf_cc_order | 抄送实例表 |
business_to_snakerflow | 业务保存到流程表 |
snaker_process_design | 流程设计器内容表 |
3.建表语句
1、项目依赖中有本身自带得建表语句
4、接口介绍
在使用snaker接口时,我们首选需要注入SnakerEngine
@Autowired
private SnakerEngine engine
1.流程定义业务类:
IProcessService里面可以使用Process相关得接口,
IProcessService使用:engine.process().**
2.流程相关的查询服务:
IQueryService里可查到Order和Task相关得实体以及历史
IQueryService使用:engine.query().**
3.流程实例业务类:
IOrderService可获取到与Order相关得接口
暂未使用到里面相关接口,详情可以自行查看
4.任务业务类:
ITaskService可获取到与Task
ITaskService使用:engine.task().**
5.流程引擎接口:
SnakerEngine是上层接口,可通过SnakerEngine查看流程实例、流程任务,以及开启流程实例和执行流程任务
二、相关流程
1.大体流程
2.流程步骤
流程在开始后会出现很多情况,正常会出现审批同意和审批驳回,驳回会出现驳回发起人,驳回已审批得任意节点,驳回上一级,驳回直接结束流程等,根据具体情况有对应得接口可以进行完成。
可通过executeAndJumpTask进行节点得跳跃。我们可以根据model.getStart().getOutputs().get(0).getTarget().getName();来获取初始节点,也可以根据nodeName进行跳跃,当nodeName为null时,则跳转至上一步处理,nodeName不为null时,则任意跳转,即动态创建转移
3.流程设计器
提供网页版流程设计器
4.整体使用流程
1.先用流程设计器画图流程设计图,具体可根据需求来进行设计
2.部署流程:可先通过deploy部署流程,目前使用部署的是用*.snaker(xml文件)和传字符传(将.xml文件进行上传数据库保存里面的内容,最好用文件的形式上传,直接字符传上传会出现异常)的形式。
3.发起流程实例:可通过engine.process().deploy(StreamHelper.**)方法来获取流程定义的Id,通过startInstanceById方法可将流程定义id当入参传值,开启流程
4.执行审批:
4.1:审批通过:engine.executeTask
4.2:审批驳回:engine.executeAndJumpTask,传节点名称可跳到指定节点,如果没有指定节点,直接跳转到上一个节点,也可指定到发起人(model.getStart().getOutputs().get(0).getTarget().getName())
或者直接关闭结束
5.流程完毕:正常流程完成会自动关闭,手动关闭可能会造成数据错误。
三、 相关问题
项目:
1.在使用得时候,snaker分页会与mybatisplus的分页有冲突
2.当你执行得审批executeTask得时候不要有返回对象,不然流无法关闭。
3.拦截器目前作用未知,且介绍简单,而且目前系统传这些会报错,出现类型实例化失败
4.在调用删除参与人的时候会有一个只有一个参与人的时候的异常抛出,就是当只有一个参与人的时候删除会出异常,删除的时候注意。
流程设计器:
1.有的时候修改节点信息内容的时候,设计内容无法同步过去,还有就是更改节点无效。
2.使用分流审批节点时,节点不会自动合并
3.相关使用的介绍比较少
...........
四、总结
1.项目是新建环境,环境搭建时候的时候会出现一定的依赖问题,按目前配置的依赖正常是没有问题的
2.关于snaker工作流上面,资料介绍太少,网上基本搜索不到什么有用的资料,目前只有开发文档还能用用,但是使用的时候不太好用。
3.开发文档比较少,好在源码相关接口介绍比较详细,接口调用起来相对于来说比较简单,但是一些复杂的业务可能就不太适合了。
4.目前在git上面还有一个使用项目用的比较齐全:mldong: 快速开发平台、工作流、snakerflow
这个开源项目可借鉴相关的工作流上面的操作
5.一个流程定义(wf_process)会有一个流程实例(wf_order),一个流程实例会有一个或者多个任务(wf_task),一个任务会有对应一个或者多个审批人(wf_task_actor).