Java代码0202
List<Task02tasks02=02taskServicecreateTaskQuery()processInstanceId(procInstanceId)list();0202
然后根据当前任务获取当前流程的流程定义,然后根据流程定义获得所有的节点:02
Java代码0202
ProcessDefinitionEntity02def02=02(ProcessDefinitionEntity)02((RepositoryServiceImpl)rs)getDeployedProcessDefinition(taskgetProcessDefinitionId());02020202List<ActivityImpl02activitiList02=02defgetActivities();0202
//rs是指RepositoryService的实例0202根据任务获取当前流程执行ID,执行实例以及当前流程节点的ID:02
Java代码0202
String02excId02=02taskgetExecutionId();0202
ExecutionEntity02execution02=02(ExecutionEntity)02runtimeServicecreateExecutionQuery()executionId(excId)singleResult();0202
String02activitiId02=02executiongetActivityId();0202
然后循环activitiList 并判断出当前流程所处节点,然后得到当前节点实例,根据节点实例获取所有从当前节点出发的路径,然后根据路径获得下一个节点实例:02
Java代码0202for(ActivityImpl02activityImpl:activitiList){0202
String02id02=02activityImplgetId();0202if(activitiIdequals(id)){0202
Systemoutprintln(
"当前任务:"
+activityImplgetProperty("name"));02//输出某个节点的某种属性0202List<PvmTransition02outTransitions02=02activityImplgetOutgoingTransitions();
//获取从某个节点出来的所有线路0202for(PvmTransition02tr:outTransitions){0202
PvmActivity02ac02=02trgetDestination();02
//获取线路的终点节点0202Systemoutprintln("下一步任务任务:"
公司业务需求要求显示流程图的执行的线路高亮
然后就开始了漫长的复制粘贴之旅
因为activiti不会对走过Flow进行记录,只对活动做记录,基本思路就是通过historyService可以获取到所有的HistoricActivityInstance,然后通过活动顺序再获取到执行过的flowId
但是这里有一个巨坑,这个HistoricActivityInstance是无序的,里面并没有字段可以对其进行排序,网上有很多文章说是用开始时间进行排序
但这是根本就是扯淡,开始时间根本不能排序,因为很多活动都是一瞬间完成的,开始时间是完全相同的,比如开始事件和第一个活动,比如排他网关和执行的下一个活动,所以根本无法排序,同理结束时间也无法进行排序。
还有很多文章写了很复杂的算法来获取到执行过的线路,但是都是没有用,不是少了就是多了。
最后仔细的研究了HistoricActivityInstance这个类,发现其实是有规律的,那就是一个活动结束的时间是和下一个执行的活动的开始时间,如果当前Activity的结束时间和下一个Activity的开始时间相等两个活动中间的Flow就走过,知道原理就好办了。
在流程资源文件中,每一个节点元素在activiti中都有对应的元素属性承载类,比如,UserTask任务节点,它的元素属性承载类为UserTask,相同,startEvent开始节点的元素承载类为StartEvent,在bpmn流程文件进行解析时,也是将xml文档中每个元素解析为对应的承载类,从而进行组装成一个BmpnModel模型,我们可以直接由activiti将bpmn xml文件解析为一个实例模型(下图所示),也可以完成通过自定义手动创建模型。
关于模型校验器更多细节可查看 activiti源码剖析之BpmnModel模型校验器
流程节点上别指定具体人,使用${userId}变量的方式。
在上一节点的添加TaskListener,完成事件,对userId进行设置。
public class AssigneeSearch2 implements TaskListener {
public void notify(DelegateTask delegateTask) {
String userId = delegateTaskgetVariable("applyUserId")toString();
if ("user01"equalsIgnoreCase(userId) ) {
delegateTasksetVariable("userId", "leaderuser");
}
}
}
}
以上就是关于springboot 集成 activiti 流程引擎全部的内容,包括:springboot 集成 activiti 流程引擎、工作流Activiti表说明、ACTIVITI如何获取下一步节点求解答等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)