任务指派实例

任务指派实例

  作者:sunking

 

在下面的例子里,我们将向您展示如何能给用户分配任务。因为在jBPM工作流

引擎和组织机构模型之间是分离的,对计算参与者的表达语言将总是被限制的。

因此,你必须指定一个任务处理的实现,包括计算任务参与者。

 

public void testTaskAssignment() {
  
/* 
这个下面展示的业务是基于hello world业务之上。 
这个状态节点将被任务节点取代。这个任务节点是一个在JPDL中的节点,它表现为一个等待状态和在业务能继续被执行之前,生成的任务被完成。 
*/ 
  ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
    "<process-definition name='the baby process'>" +
    "  <start-state>" +
    "    <transition name='baby cries' to='t' />" +
    "  </start-state>" +
    "  <task-node name='t'>" +
    "    <task name='change nappy'>" +
    "      <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />" +
    "    </task>" +
    "    <transition to='end' />" +
    "  </task-node>" +
    "  <end-state name='end' />" +
    "</process-definition>"
  );
  
  
//创建一个业务定义的执行。
  ProcessInstance processInstance = 
      new ProcessInstance(processDefinition);
  Token token = processInstance.getRootToken();
  
  
/* 
我们启动业务执行,离开在它缺省转换的启动状态上。 
*/ 
  token.signal();
  
/* 
这个signal方法将阻止它继续,直到业务执行进入一个等待状态。在这个情况下,这是个任务节点。 
*/ 
  assertSame(processDefinition.getNode("t"), token.getNode());
 
  
/*
当执行到达任务节点,一个任务 ‘change nappy’被创建和
NappyAssignmentHandler被调用确定任务被分配给谁。
NappyAssignmentHandler将返回’papa’.
*/
 
 
/* 
在真实的环境里,这个任务被在org.jbpm.db.TaskMgmtSession 
里面的方法从数据库中取出。当我们不想包括例子里的持久化复杂性时,我 
们将取得第一个业务实例的任务例子。(在测试情节中我们只有一个实例) 
*/ 
  TaskInstance taskInstance = (TaskInstance)  
      processInstance
        .getTaskMgmtInstance()
        .getTaskInstances()
        .iterator().next();
 
  
//现在我们检查是否taskInstance确实被分配给’papa’. 
  assertEquals("papa", taskInstance.getActorId() );
  
  
//现在我们猜想’papa’已经完成了职责,标记这个任务完成了。 
  taskInstance.end();
  
//当这些是最后要作的任务时,完成的任务触发器将延续这个业务实例的执行。 
 
  
  assertSame(processDefinition.getNode("end"), token.getNode());
}

你可能感兴趣的:(任务指派实例)