按照jbpm4.0自带的例子,给一个任务分配执行人,必须在流程实例开始的时候,就以参数的形式代入。
如下所示: 
Map<String, Object> variables = new HashMap<String, Object>(); 
variables.put("order", new Order("johndoe"));
ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskAssignee", variables);其中的order变量,是在流程实例开始时就去调用new Order("johndoe")方法将参数代入的。我想请问,如何才能在流程执行到任务节点之前再给它分配执行人?
例如这个流程定义
<?xml version="1.0" encoding="UTF-8"?>
<process name="TaskAssignee" xmlns="http://jbpm.org/4.0/jpdl">
  <start g="20,20,48,48">
    <transition to="state1"/>
  </start>
  <state name="state1" g="101,107,92,52">
      <transition name="to review" to="review" g="-50,-18"/>
  </state>
  <task assignee="#{order.owner}" g="242,17,127,52" name="review">
      <transition name="to end1" to="end1" g="-42,-18"/>
  </task>
  <end name="end1" g="485,20,48,48"/>
</process>
我想在执行完state1这步时才去分配任务执行人,而不是在一开始startProcessInstanceByKey的时候就用参数代入分配,请问应该如何操作?
谢谢!

解决方案 »

  1.   

    自问自答了。
    使用jbpm4.0自己推荐的AssignmentHandler,实现接口中的assign(Assignable assignable, OpenExecution execution)方法,给任务分配执行人: assignable.setAssignee(XXX.getXXX());jpdl.xml如下
       <task g="105,229,112,52" name="approver">
          <assignment-handler class="com.qunda.sw.jbpm.service.impl.AssignTask"/>
          <transition g="-59,-17" name="reject" to="reject"/>
          <transition name="forward" to="approver2" g="-71,-17"/>
          <transition name="approve" to="approve" g="-65,-17"/>
       </task>