1、injectParallelUserTask --- 给《任务实例》加入《子任务》
2、injectParallelEmbeddedSubProcess --- 给《任务实例》加入《子流程》
3、injectUserTaskInProcessInstance --- 给《流程实例》加入《子任务》
4、injectEmbeddedSubProcessInProcessInstance --- 给《流程实例》加入《子流程》
.
// injectParallelUserTask --- 给《任务实例》加入《子任务》
{
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().singleResult();
DynamicUserTaskBuilder taskBuilder = new DynamicUserTaskBuilder();
taskBuilder.id("custom_task")
.name("My injected task")
.assignee("kermit");
/**
*
* 1、创建新的 DeploymentEntity,并插入到 ACT_RE_DEPLOYMENT 表
* 2、《注入节点》到 BpmnModel 对象中的 process 的节点 --- updateBpmnProcess,【子流程+并行网关】
* 1、查找 UserTask 任务,且只支持 UserTask !!!
* 2、创建子流程 SubProcess
* 3、处理关系
* 1、userTask的前置节点 ---> subProcess
* 2、subProcess ---> userTask的后置节点
* 3、处理subProcess内的关系
* 1、创建 StartEvent
* 2、StartEvent ---> 《fork》并行网关ParallelGateway
* 3、创建 EndEvent
* 4、《fork》ParallelGateway ---> userTask
* 5、《fork》ParallelGateway ---> newUserTask
* 6、userTask ---> 《join》并行网关 ParallelGateway
* 7、newUserTask ---> 《join》并行网关 ParallelGateway
* 8、《join》并行网关 ParallelGateway ---> EndEvent
* 3、保存新的 bpmnModel 到 ACT_GE_BYTEARRAY 表
* 4、部署
* 保存新的 《定义数据》 到 ACT_RE_PROCDEF 表
* 5、修改数据、触发执行
* 1、修改已执行数据的 PROC_DEF_ID_ --- 要改动很多数据
* 2、触发流程到《新的dom元素节点》 --- updateExecutions 子类实现
* 。。。
*
* @see org.flowable.engine.impl.cmd.InjectParallelUserTaskCmd#execute(org.flowable.common.engine.impl.interceptor.CommandContext)
*/
dynamicBpmnService.injectParallelUserTask(task.getId(), taskBuilder); // 给《任务实例》加入《子任务》
}
// injectParallelEmbeddedSubProcess --- 给《任务实例》加入《子流程》
{
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().singleResult();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("oneTaskV2")
.singleResult();
/**
*
* 1、创建新的 DeploymentEntity,并插入到 ACT_RE_DEPLOYMENT 表
* 2、《注入节点》到 BpmnModel 对象中的 process 的节点 --- updateBpmnProcess
* 1、查找 UserTask 任务,且只支持 UserTask !!!
* 2、创建子流程parentSubProcess
* 3、读取流程定义,创建子流程 subProcess
* 4、处理关系
* 1、userTask前置节点 ---> parentSubProcess
* 2、parentSubProcess ---> userTask后置节点
* 3、在 parentSubProcess 处理关系
* 1、StartEvent ---> 《fork》并行网关ParallelGateway
* 2、《fork》并行网关ParallelGateway ---> userTask
* 3、《fork》并行网关ParallelGateway ---> subProcess
* 4、userTask ---> 《join》并行网关ParallelGateway
* 5、subProcess ---> 《join》并行网关ParallelGateway
* 6、《join》并行网关ParallelGateway ---> endEvent
* 3、保存新的 bpmnModel 到 ACT_GE_BYTEARRAY 表
* 4、部署
* 保存新的 《定义数据》 到 ACT_RE_PROCDEF 表
* 5、修改数据、触发执行
* 1、修改已执行数据的 PROC_DEF_ID_ --- 要改动很多数据
* 2、触发流程到《新的dom元素节点》 --- updateExecutions 子类实现
* 。。。
*
* @see org.flowable.engine.impl.cmd.InjectParallelEmbeddedSubProcessCmd#execute(org.flowable.common.engine.impl.interceptor.CommandContext)
*/
DynamicEmbeddedSubProcessBuilder subProcessBuilder = new DynamicEmbeddedSubProcessBuilder()
.id("customSubprocess")
.processDefinitionId(processDefinition.getId()); // 流程定义
dynamicBpmnService.injectParallelEmbeddedSubProcess(task.getId(), subProcessBuilder); // !!! 给《任务实例》加入《子流程》
}
// injectUserTaskInProcessInstance --- 给《流程实例》加入《子任务》
{
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
DynamicUserTaskBuilder taskBuilder = new DynamicUserTaskBuilder();
taskBuilder.id("custom_task")
.name("My injected task")
.assignee("kermit");
/**
* 《添加用户任务》
*
* 1、创建新的 DeploymentEntity,并插入到 ACT_RE_DEPLOYMENT 表
* 2、《注入节点》到 BpmnModel 对象中的 process 的节点 --- updateBpmnProcess,只能修改 initialStartEvent 的指向
* 1、查找StartEvent!!!
* 2、创建 EndEvent
* 3、创建并行网关ParallelGateway
* 4、并行网关ParallelGateway ---> userTask
* 5、userTask ---> EndEvent
* 6、StartEvent ---> 并行网关ParallelGateway
* 3、保存新的 bpmnModel 到 ACT_GE_BYTEARRAY 表
* 4、部署
* 保存新的 《定义数据》 到 ACT_RE_PROCDEF 表
* 5、修改数据、触发执行
* 1、修改已执行数据的 PROC_DEF_ID_ --- 要改动很多数据
* 2、触发流程到《新的dom元素节点》 --- updateExecutions 子类实现
* 。。。
*
* @see org.flowable.engine.impl.cmd.InjectUserTaskInProcessInstanceCmd#execute(org.flowable.common.engine.impl.interceptor.CommandContext)
*/
dynamicBpmnService.injectUserTaskInProcessInstance(processInstance.getId(), taskBuilder); // 给《流程实例》加入《子任务》
}
// injectEmbeddedSubProcessInProcessInstance --- 给《流程实例》加入《子流程》
{
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testProcess01");
List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).orderByTaskName().asc().list();
Task taskB = tasks.get(1);
ProcessDefinition subProcessDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("testProcess02").singleResult();
/**
*
* 1、创建新的 DeploymentEntity,并插入到 ACT_RE_DEPLOYMENT 表
* 2、《注入节点》到 BpmnModel 对象中的 process 的节点 --- updateBpmnProcess,
* 1、查找 StartEvent!!!
* 2、创建并行网关ParallelGateway
* 3、获取流程定义,创建子流程SubProcess
* 4、处理关系
* 1、并行网关parallelGateway ---> 子流程SubProcess
* 2、创建EndEvent,子流程SubProcess ---> EndEvent
* 3、StartEvent ---> 并行网关parallelGateway
* 3、保存新的 bpmnModel 到 ACT_GE_BYTEARRAY 表
* 4、部署
* 保存新的 《定义数据》 到 ACT_RE_PROCDEF 表
* 5、修改数据、触发执行
* 1、修改已执行数据的 PROC_DEF_ID_ --- 要改动很多数据
* 2、触发流程到《新的dom元素节点》 --- updateExecutions 子类实现
* 。。。
*
* @see org.flowable.engine.impl.cmd.InjectEmbeddedSubProcessInProcessInstanceCmd#execute(org.flowable.common.engine.impl.interceptor.CommandContext)
*/
dynamicBpmnService.injectEmbeddedSubProcessInProcessInstance(
processInstance.getId(), // 给《流程实例》加入《子流程》
new DynamicEmbeddedSubProcessBuilder()
.id("injectedSubProcess")
.processDefinitionId(subProcessDefinition.getId()) // 子流程的定义id
);
}
.