posts - 26,  comments - 7,  trackbacks - 0

  作者: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());
}
posted on 2007-09-23 16:29 jbpm 阅读(1164) 评论(0)  编辑  收藏 所属分类: jbpm实例

只有注册用户登录后才能发表评论。


网站导航: