jbpm4流程内的第一个task节点的发起方式.

raindew 2010-09-26

流程的第一个节点一般都是填写申请单,用户填写申请单后我发起我的流程.这样第一申请的节点一般都是在流程外做的. 以请假流程为例: leave.jpdl.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<process name="leave" xmlns="http://jbpm.org/4.3/jpdl">
   <start g="196,25,48,48" name="start1">
      <transition to="申请"/>
   </start>
   <task assignee="#{leaven.createUser}" form="/jbpm/jbpm_request.action" g="172,118,92,52" name="申请">
      <transition to="经理审批"/>
   </task>
   <task assignee="#{leaven.manager}" form="/jbpm/jbpm_manager.action" g="175,217,92,52" name="经理审批">
      <transition g="-32,-8" name="批准" to="exclusive1"/>
      <transition g="128,221;124,165:-42,-18" name="驳回" to="申请"/>
   </task>
   <decision expr="#{leaven.day > 3 ? '老板审批' : '结束'}" g="200,308,48,48" name="exclusive1">
      <transition g="-39,-10" name="结束" to="end1"/>
      <transition g="339,342:-71,-17" name="老板审批" to="老板审批"/>
   </decision>
   <task assignee="#{leaven.boss}" form="/jbpm/jbpm_boss.action" g="294,375,92,52" name="老板审批">
      <transition g="339,457:" to="end1"/>
   </task>
   <end g="199,445,48,48" name="end1"/>
</process>

 

 首先add页面填写请假申请单,提交申请单.下面代码为保存申请单及发起流程代码

 

leavenDao.add(leaven);
Map map=new HashMap();
map.put("leaven", leaven);
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.startProcessInstanceByKey("leave", map);
TaskService taskService=processEngine.getTaskService();
Task task=taskService.createTaskQuery().processInstanceId(processInstance.getId())
				  .assignee(leaven.getCreateUser())
				  .uniqueResult();//取刚发起的流程的任务
taskService.completeTask(task.getId());//跳过申请task节点

 

由上面可以看出每次发起流程后还要把第一个task节点(申请节点)的任务跳过去.

 

以上是我第一个申请节点的实现方法,大家有没有更好的实现第一个申请节点的方法?

xyz20003 2010-09-26
我们基本也是这样做的。不过,感觉这种要求蛮多的,直接在executionService中加一个startAndCompleteTask()方法也许会更简单一点儿。
YDY20082008 2012-02-03
第一个申请task节点这么做没有问题,但如果有多个task节点,假设其中有二个节点的处理人是张三,这个时候到达属于张三处理第二个节点时,taskService.createTaskQuery().processInstanceId(processInstance.getId()).assignee(approveUserId).uniqueResult() 这样会不会有问题?应该会返回张三的第一个任务的节点对象
Global site tag (gtag.js) - Google Analytics