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() 这样会不会有问题?应该会返回张三的第一个任务的节点对象
|