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 子流程跳转到父流程

Activiti7工作流引擎:高阶篇 CallActivityTask 子流程跳转到父流程

Activiti7工作流引擎:进阶篇 ServiceTask