https://blog.csdn.net/lazy_cpp/article/details/77979634
https://blog.csdn.net/shirdrn/article/details/6274744
1、嵌入子流程
子流程元素<subProcess>内嵌在主流程元素<process>之内,只能在该流程中使用该子流程,外部是无法访问到的。这种子流程一般作为局部通用逻辑处理,或者因为特定业务需要,使得比较复杂的单个主流程设计清晰直观;
2、调用子流程
首先实现一个流程,在另一个流程中可以调用该流程,通常可以定义一些通用的流程作为这种调用子流程,供其他多个流程定义复用。这种子流程使用<callActivity>元素来进行调用,间接地嵌入到主流程中,用起来比较方便。
@RestController
@RequestMapping("/subp")
@Api("subp")
public class SubProcessController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
private static String processDefindKey= "MyFourProcess";
@ApiOperation("启动实例")
@GetMapping("startProcess")
public void startProcess(){
System.out.println("启动实例");
Map paramMap = new HashMap<>();
paramMap.put("myname","王小宝");
paramMap.put("flow","3");
runtimeService.startProcessInstanceByKey(processDefindKey,paramMap);
}
@ApiOperation("完成任务")
@GetMapping("submitTaskProcess")
public void submitTaskProcess(){
System.out.println("完成任务");
String taskId = "65041";
taskService.complete(taskId);
}
@ApiOperation("查询任务")
@GetMapping("queryTask")
public void queryTask(){
System.out.println("查询任务");
List<Task> taskList = taskService.createTaskQuery().processDefinitionKey(processDefindKey).list();
for (Task task : taskList){
System.out.println("taskId:"+task.getId()+" execId:"+task.getExecutionId()+" 流程实例id:"+task.getProcessInstanceId()+" 任务key:"+task.getTaskDefinitionKey());
}
}
}
是另一个已经发布的流程的key
嵌入子流程和调用子流程的区别:
嵌入子流程,其实还是原来的流程,通过流程定义key能查询到任务等相关信息
调用子流程:在查询子流程任务,需要用子流程的key 才能查询到