flowable 6.4.2 - 流程定义动态化的支持(DynamicBpmnService)

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 ); }

.

你可能感兴趣的:(bpm&流程引擎,activiti,flowable)