最近公司做的项目用到了工作流,便买了一本书进行学习和应用,
感觉activiti限制颇多,很多功能实现不了中国式全自由流程,
自由流是一种选择,但是因为不能让用户选择领导部门,所以就把这个方案给否了。
然后就开始模仿activiti机制自己写一套流程机制,
从节点的类型【顺序节点、分支节点、结束节点、子流程节点等】
到自定义表单,表单对应当前模型,每个节点也对应的相关展示表单项,实现动态控制流程和表单
目前这种实现方案还在继续使用,但总归自己封装的,没有activiti机制封装的好
所以又采用 acitviti+自己定义的动态表单 实现一版,作为后续升级更新版本
个人感觉这个版本还挺方便的,虽然开发工作量大,
但后期使用和维护人员会很轻松,开发可以不介入创建流程等操作。
对于实现分方法做一个简单的总结,不足之处欢迎大家给我指出。
第一步:activiti-modeler模型设计器,在上几篇文章中有体现,包括代码什么的都很详细,具体的项目再百度云盘里,文章结尾有连接。
设计节点期间,我没有采用activiti自带的用户和组相应机制,所以我这里除了开始节点、结束节点、和发起表单节点以外采用的都是统一格式
采用会签节点来放置一个 transactorIdList 容器,这样做比较灵活
我们可以在代码中动态获取下一节点id,然后根据配置的节点处理人动态来创建代办。
##############################################################################################
获取下一节点:
之后根据返回的节点id(这里包含了网关,任务接单,以及子例程等情况), 根据下一节点id 获取下一节点处理人这一块是自己配置的。
对于网关,可在线上写流转条件, 然后在 上图 variables动态设置流转条件。
###############################################################################
流程发布时 保存节点和子节点信息
记得要去重, 这里我是根据节点id来去重的。
###################################################################################################
配置好以后在办理过程中就很简单了,回显方面可采用 自己创建的动态表单+历史表 创建视图进行回显。
如果时间允许,自己定义实例表单,存储自己需要的节点处理历史更好。
最理想的方式就是 activiti流转机制+动态表单+动态处理人
activiti本身自带的组、用户、历史等全部可以丢掉,
发起办理时的表单、处理的时的表单回显(这里使用的freemaker直接生成的html代码块)、办理时获取节点处理人等我就不一一贴代码,业务不同,表结构不同获取方式也不同,
处理时遇到的子流程、调用活动、撤回、驳回、非正常结束等一些特殊节点和功能,会有特殊介绍。
运行效果:
模型配置表单
节点配置表单和处理人 :