jbpm管理流程实例

    xiaoxiao2023-03-24  5

        流程定义部署完成后,就可以使用流程定义所描述的过程进行工作了。流程定义开始工作就要依靠流程实例了,一个流程实例代表的是一个流程定义的执行,而一个流程实例可以有多个执行对象。

        流程实例即ProcessInstance,一个流程实例包括了所有运行阶段,其中最典型的属性就是跟踪当前节点的指针。一次流程实例的执行是一个Execution,管理流程实例也是通过ExecutionService来进行的。

        流程实例的管理包括以下几个方面:

            1、启动流程实例

            2、完成任务

            3、查询

            4、结束流程实例

        流程实例的管理主要是涉及到以下几张表:

            JBPM4_EXECUTION:表示当前正在执行的流程实例

            JBPM4_HIST_PROCINST:表示历史执行过的流程实例,但是也包含当前正在执行的流程实例

            JBPM4_TASK:表示当前正在执行的任务

            JBPM4_HIST_TASK:表示历史的任务,但是也包含当前正在执行的任务

            JBPM4_HIST_ACTINST:表示历史的节点

        在这些表中,JBPM4_TASK是一张临时表,当任务执行完成后,该表中的数据就被删除了。

    启动流程实例

        启动流程实例有两种方式,一种是根据流程定义ID启动流程实例,流程定义ID一般是“流程定义名称-版本号”组成,可以根据流程定义ID启动任何一个流程定义对应的流程实例。另一种就是根据流程定义名称来启动流程实例,一个流程定义名称可以对应多个版本,但是这种方式默认会启动该流程定义名称下最高版本的流程定义对应的流程实例。

    /** * 根据流程定义ID启动流程实例,可以启动任意一个版本的流程实例 */ @Test public void testStartPIByPDID(){ ProcessInstance pi = processEngine.getExecutionService() .startProcessInstanceById("qingjia-1"); } /** * 根据流程定义名称启动流程实例,是该key下,最高版本 */ @Test public void testStartPIByPDKEY(){ processEngine.getExecutionService() .startProcessInstanceByKey("qingjia1"); }

    完成任务

    /** * 完成任务 */ @Test public void testFinishTask(){ processEngine.getTaskService() .completeTask("130001"); }

    查询

        查询也包括两种,查询流程定义和查询任务,查询任务有分为查询正在执行的任务和查询已完成的任务。

    /** * 查询所有的流程实例 */ @Test public void testQueryAllPI(){ List<ProcessInstance> piList = processEngine.getExecutionService() .createProcessInstanceQuery() .list(); } /** * 查询所有的正在执行的任务 */ @Test public void testQueryAllTask(){ List<Task> taskList = processEngine.getTaskService() .createTaskQuery() .list(); } /** * 可以根据任务的执行人查询当前正在执行的任务 * 可以根据pdid查询当前正在执行的任务 */ @Test public void testQueryTaskByPDID(){ List<Task> taskList = processEngine.getTaskService() .createTaskQuery() .processDefinitionId("qingjia1-4") .list(); } /** * 根据任务id查询任务 */ @Test public void testQueryTaskByTaskID(){ Task task = processEngine.getTaskService() .getTask("100002"); } /** * 查询已经完成的所有的任务 */ @Test public void testQueryAllHistTask(){ List<HistoryTask> histTaskList = processEngine.getHistoryService() .createHistoryTaskQuery() .state("completed") .list(); }

    结束流程实例

    /** * 直接结束流程实例 */ @Test public void testEndPI(){ processEngine.getExecutionService() .endProcessInstance("qingjia.70001", "error"); } /** * 根据 piid查询流程实例,如果查询出来的结果为null,说明该流程实例已经结束了 */ @Test public void testIsEndPI(){ ProcessInstance pi = processEngine.getExecutionService() .createProcessInstanceQuery() .processInstanceId("qingjia.70001") .uniqueResult(); }

    转载请注明原文地址: https://ju.6miu.com/read-1201257.html
    最新回复(0)