JBPM 工作流引擎 JBPM指南 例子:任务指派实例(3.4)

本文介绍JBPM工作流引擎中的任务指派实现方法。通过一个具体的示例演示了如何使用JPDL定义流程,并实现任务指派的具体逻辑,包括任务的创建、分配和完成。

声明:

本人EVeryVeryPoor,又是刚刚开始学习JBPM工作流引擎,对原文及概念等理解不当的地方,请网友不吝赐教,吾将及时修改和更正。

本文仅是本人自己学习JBPM,对JBPM指南的学习理解过程。

还望可以对入门者有所帮助。共享之。

需要中英文对照Word文档者请联系:gutengcom@hotmail.com或留下邮件地址。

 

34任务指派实例

在下面的例子里,我们将向您展示如何能给用户分配任务。因为在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());
}

待续……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值