初探Flowable流程引擎,偶遇多实例子流程

对于flowable的认知一直是浅显的停留在理论了解上,并未深入学习研究,也没有完整的样例作品。了解过一些原理,架构,表结构说明等等,但老实说,如果没有实战,这些理论性的东西在记忆中并不会保留太长久,很容易被遗忘掉。

一直以来想把流程引擎这块空缺补起来,无奈团队的项目中尚未有真正的流程应用,暂时不易投入人力和精力来做这部分的内容。

前段时间,架构师接手的项目中涉及到了流程引擎的应用开发,我推荐了flowable,也做了一些理论基础的讲解。也协助解决了一些比较基础的问题。

五一节前的那天下班前,负责后端的架构师来问我一个稍微深入点的应用场景问题,一时间也把我给问住了。她的这个应用场景可能并不常见:多实例子流程。网上有关的资料并不多,因为一时间这毫无头绪的我想打开浏览器找一些资料的时候,架构师拦住了我,说你别找了,我都已经找遍了,没有!哈哈,看来架构师可能也是费尽了心思,实在搞不定了才来找的我!

架构师绘制的流程图应用场景如下:

初探Flowable流程引擎,偶遇多实例子流程_第1张图片

红色框中圈起的即是支持多实例的子流程配置,架构师遇到的问题是在前一节点,即主任审批这一节点审批通过后,通过divisionLeaderList流程变量启动对应数量(在主任审批这一节点办理时手动选择的分管部门领导标识列表)的子流程实例失败。

按照架构师的说法,后台报了个错,意思是说因为子节点中配置了一些变量,导致子流程实例无法创建,她猜测因为子流程实例创建时需要初始化那些变量,而那些变量又必须要在开始点动态指定的。于是就陷入了无解状态。

我想,即便是这种应用场景可能并不多,但flowable应该不至于连这些也不支持的吧。应该还是使用和配置的问题。

恰逢五一假期,唉,对于有重度强迫症的我来说这是成心不想让我过个好节啊。。。

但这块毕竟没有实战经验,一时也无从下手,所以决定假期先找一些成功的案例参考一下看有无类似应用场景。最终还是没有找到,但并非毫无收获,找资料的过程中了解了一些多实例任务、嵌入子流程,独立子流程等相关理论基础。这些都是我之前不曾了解过的。

五一节后,在一阵烦杂的工作之余,终于腾出一段相对集中的时间来处理这个横在心头的梗。

首先,拿到架构师绘制的bpmn xml文件,自己单独部署了一套UIDesigner方便查看变量配置及随时编辑调整,打算先复现问题再说:

初探Flowable流程引擎,偶遇多实例子流程_第2张图片

然后,编写测试程序,部署流程,启动主实例,对照参数设置,造了一些测试参数一步一步往下走,终于,在主任审批这一节点进行complete操作启动子流程时,成功复现了问题,后台抛出了异常:org.flowable.common.engine.api.FlowableException: Unknown property used in expression: ${processorSectionHead == null}

检查了子流程中的${processorSectionHead == null}条件配置,发现有两个地方做了配置:

一是在网关流条件中进行了配置,用于区分流向。

初探Flowable流程引擎,偶遇多实例子流程_第3张图片

二是在其中两个子节点中配置了自动批转条件Skip expression表达式中定义的,猜测应该是这里的问题。

初探Flowable流程引擎,偶遇多实例子流程_第4张图片

 

有了头绪就好办了,先去掉“科室负责人审批”和“办理人员审批”两个节点的Skip expression条件定义,再分别添加这两个节点的固定分配用户变量(如分别为subOfficeLeader和subOfficeWorker),再调整流程图(在开始节点后新增加一节分管领导审批的节点以替换原有的网关)如下所示:

初探Flowable流程引擎,偶遇多实例子流程_第5张图片

初探Flowable流程引擎,偶遇多实例子流程_第6张图片

最后,进行测试,在主任审批节点设置了三个分管领导标识,成功启动了3个子流程实例。

初探Flowable流程引擎,偶遇多实例子流程_第7张图片

逐个走完三个子流程的审批(满足多实例的完成条件${nrOfCompletedInstances/nrOfInstances==1})后,任务自动流转到了主流程中的“办文人员审批”节点。完整流程如下图所示:

初探Flowable流程引擎,偶遇多实例子流程_第8张图片

最后,再补充一种实现方案,可以采用独立子流程来实现,主流程中采用多实例任务来定义,在启动多实例任务时启动对等数量的子流程实例即可。只不过操作上要比这种嵌入式子流程复杂一些。

你可能感兴趣的:(学习资料,工作,流程引擎,flowable)