美文网首页
流程引擎之Camunda开发记录(三)

流程引擎之Camunda开发记录(三)

作者: _花 | 来源:发表于2022-03-14 20:35 被阅读0次

1.开启实例-ById

 Date nowTime = new Date();
        variables.put("startTime", nowTime);
        // 设置流程发起人
        identityService.setAuthenticatedUserId("initiator");
        ProcessInstance processInstance = runtimeService
                .startProcessInstanceById(processDefinitionId, businessKey, variables);

如果通过processDefinitionId来启动一个流程,那么代表启动流程定义的某一个版本,如果通过processDefinitionKey来启动流程,那么将会始终启动流程定义的最新版本

2.重启实例

runtimeService.restartProcessInstances(processDefinitionId)
 //                .startBeforeActivity("activity")
                .processInstanceIds(instanceId)
                .execute();

3.暂停实例

 runtimeService.suspendProcessInstanceById(processInstanceId);

4.实例列表

// 查询流程定义
        ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
        // 遍历查询结果
        PageHelper.startPage(currentPage, pageSize);
        List<ProcessInstance> list = processInstanceQuery.processDefinitionId(processDefinitionId)
                .orderByProcessInstanceId().desc().list();

注意:PageHelper不起作用

5.获取 variable

List<VariableInstance> lists = runtimeService.createVariableInstanceQuery()
                .processInstanceIdIn(instanceIds)
                .orderByVariableName()
                .desc()
                .list();

6.获取子实例

List<ProcessInstance> lists = runtimeService.createProcessInstanceQuery()
                .superProcessInstanceId(superProcessInstanceId)
                .list();

7.从任意节点启动实例

    public void createProcessInstanceByKey() {
        String processInstanceByKey = "leave";
        String activityId = "Activity_1r8r4jn";

        ProcessInstantiationBuilder processInstantiationBuilder = runtimeService.createProcessInstanceByKey(processInstanceByKey);
        ProcessInstance processInstance = processInstantiationBuilder.businessKey("001")
                //某节点之前开始
                .startBeforeActivity(activityId)
                .execute();
        System.out.println(processInstance.getId() + "," + processInstance.getBusinessKey() + "," + processInstance.getProcessDefinitionId());

    }

8.如何检索活动的实例树?

ActivityInstance rootActivityInstance = runtimeService.getActivityInstance(pi.getProcessInstanceId());

processInstanceIdexecutionId
ExecutionProcessInstance都用于获取当前流程实例的相关信息。

当流程中没有分支时,Execution等同于ProcessInstance,甚至连ID也相同;
当流程中存在分支(fork, parallel gateway),则在分支口会形成子Execution,在下一个gateway才会合并(joined)

新启动的流程,观察ACT_RU_EXECUTION表中:

PARENT_ID_字段有值为执行实例,流程实例为NULL;

ACT_ID_字段有值为执行实例,流程实例为NULL;

IS_ACTIVE_字段为0为流程实例,为1为执行实例。

相关文章

网友评论

      本文标题:流程引擎之Camunda开发记录(三)

      本文链接:https://www.haomeiwen.com/subject/fzujdrtx.html