Activiti7工作流引擎:进阶篇 调用子流程 CallActivityTask
Posted vbirdbest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti7工作流引擎:进阶篇 调用子流程 CallActivityTask相关的知识,希望对你有一定的参考价值。
造句:“朋友”,“我的”,“是”,“小明” 。
方法之间可以相互调用,同理,流程定义之间也可以相关调用,达到流程定义复用的目的。
一:流程定义1
二:流程定义2
Called Element: 调用其它流程,值为其它流程Id。
三:启动和启动流程
@Test
public void delopyAllBpmn()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("bpmn/LeaveProcess2.bpmn")
.name("请假流程")
.deploy();
processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("bpmn/LeaveProcess1.bpmn")
.name("请假流程2")
.deploy();
@Test
public void startProcessInstance()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRuntimeService()
.startProcessInstanceByKey("LeaveProcess1");
四:发起申请
@Test
public void testApplyTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
taskService.setAssignee(task.getId(), "zhangsan");
taskService.complete(task.getId());
张三发起请假流程,然后并审核自己,进入下一个节点,直接进入了LeaveProcess2.bpmn文件中定义的第一个节点(经理审批)。
调用子流程开启了2个流程实例。SUPER_EXEC_=2502流程实例1的执行流。
五:经理审批
@Test
public void testPMTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
taskService.setAssignee(task.getId(), "pm");
taskService.complete(task.getId());
经理审批完,又回到了LeaveProcess1.bpmn中的人事审批了。
流程实例2执行完就删除了,剩下流程实例1。
六:人事审核
public void testHRTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
taskService.setAssignee(task.getId(), "hr");
taskService.complete(task.getId());
调用子流程 CallActivityTask:每个流程都是独立的,会生成两个流程实例。
输入参数和输出参数
方法调用可以传参数,方法自身也有返回值。同样CallActivityTask同样可以有输入参数和输出参数。
zhangsan发起申请,并完成任务,同时设置pmAuditor变量最终赋值给pm变量,最后调用流程,进入到经理审批。
@Test
public void testApplyTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
taskService.setAssignee(task.getId(), "zhangsan");
Map<String, Object> variables = new HashMap<>();
variables.put("pmAuditor", "wangjingli");
taskService.complete(task.getId(), variables);
经理直接审批结束,设置变量hrAuditor赋值给hr,结束流程2,回到流程1,进入人事审批。
@Test
public void testPMTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
Map<String, Object> variables = new HashMap<>();
variables.put("hrAuditor", "zhaoHR");
taskService.complete(task.getId(), variables);
人事直接审批完结束整个流程。
public void testHRTask()
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
Task task = taskService
.createTaskQuery()
.singleResult();
taskService.complete(task.getId());
public void leaveProcess1()
sout("zhangsan发起申请");
String pmAuditor = "wangjingli";
String hr = leaveProcess2(pmAuditor);
sout(hr + "人事审批");
public String leaveProcess2(String pm)
sout(pm + "经理审核");
String hrAuditor = "zhaoHR";
return hrAuditor;
以上是关于Activiti7工作流引擎:进阶篇 调用子流程 CallActivityTask的主要内容,如果未能解决你的问题,请参考以下文章
Activiti7工作流引擎:进阶篇 CallActivityTask
Activiti7工作流引擎:高阶篇 内嵌子流程 SubProcess
Activiti7工作流引擎:进阶篇 Activiti7与Spring整合
Activiti7工作流引擎:高阶篇 CallActivityTask 子流程跳转到父流程