JBPM4.4简介(八)-Task与提交

Task

在我们上述流程定义中,张三审批这个环节,用的是一个Task类型的Activity来定义的。这种类型的Activity的行为是:创建任务实例 (TaskImpl),并把任务实例与参与者(assignee)相关联。Task是一个接口,而TaskImpl是具体的实现类。

 

任务实例(Task)这种概念,其实质是用来定义Execution与assignee之间的关联的。从上面我们知道流程已经执行到了张三审批这个环节了,因此,我们下一步的目标就是:通过张三,找出流转到他手上的所有的业务对象信息。下面是一个示例:

       ProcessEngine engine = newConfiguration()

           .setResource("jbpm.cfg.xml").buildProcessEngine();

      

       //根据用户,查询它的任务列表

       List<Task> tasks = engine.getTaskService().findPersonalTasks("张三");

       for(Task t:tasks){

           System.out.println("任务ID:"+t.getId()+","+t.getAssignee()+"手上有【"+t.getExecutionId()+"】等待:"+t.getActivityName());

       }

 

在数据库中,亦可查询到相关信息:

关于Task及其与Execution等之间的关系,我们在课堂上将做详细解析。

 

提交

张三如果审批完成,他需要继续向下提交,下面是示例代码:

       //根据任务ID,完成此任务

       //任务被完成之后,将自动流转到下一个环节

       engine.getTaskService().completeTask("10002");

      

       //任务被完成之后,下面的查询将无数据

       List<Task> tasks = engine.getTaskService().findPersonalTasks("张三");

       for(Task t:tasks){

           System.out.println(t.getAssignee()+"手上有【"+t.getExecutionId()+"】等待:"+t.getActivityName());

       }

completeTask就是完成某个任务实例,我们在查询出某人有哪些任务实例之后,他就可以选择其中一个任务实例来完成(complete)。任务实例被完成之后,任务实例对象将被删除,并被转移到历史库中。

 

在张三提交完成之后,JBPM4_TASK表将变为:

 

你也可以到JBPM4_HIST_TASK表中查询有关刚才那个Task的历史信息(比如它的完成时间等信息)。

 

后续工作

张三审批完成之后,我们可以继续用李四来查询其手上的任务列表,并结束任务对象;然后继续用王五来查询其手上的任务列表,并结束任务对象。

 

当所有环节都完成之后,流程实例对象及各种任务实例对象都会被删除,并被转移到历史库中。

大家可继续执行,直到执行结束!

你可能感兴趣的:(JBPM4.4)