研究activiti有一阵了,逐渐了解了开源activiti的相关api,但对期中的processinstanceId,executeId,taskId相关应用还是有些模糊,得益于activiti开源技术推广者临远同志的启发,明白了很多工作流引擎的核心思想源自佩特里网(英语:Petri net),采用token机制来执行流程。<!--StartFragment -->
我针对公文流,做了个测试,对processinstanceId,executeId,taskId等变量做了个跟踪测试,这样可以更加直观的观察他们之间的关系。
一、流程图如下:
二。运行流程跟踪变量如下:
------------------------------------------------------------------------------------------------
taskName发文申请,processInstanceId:2101,executeId:2101,taskName,taskId:2106,assignee:75
taskName部门领导审批,processInstanceId:2101,executeId:2101,taskName,taskId:2108,assignee:76
taskName单位领导会签,processInstanceId:2101,executeId:2118,taskName,taskId:2122,assignee:84
taskName单位领导会签,processInstanceId:2101,executeId:2119,taskName,taskId:2127,assignee:85
taskName归档,processInstanceId:2101,executeId:2101,taskName,taskId:2132,assignee:75
-----------------------------------------------------------------------------------------------
三。总结:
一个流程实例运行的时候,processInstanceId不会变,每个运行节点node的taskId是不同的,而运行指针的情况是,如果是在主路线上executeId是相同的,如果有并行分支,则每个分支的executeId是不同的,但如果分支汇聚后又回到主运行线路,executeId又恢复原值。executeId就是这个token,而且变量,运行环境可以向后续节点传递。
如有不妥之处请指正。
参考文章: