快速业务通道

使用jBpm支持高级用户交互模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

jBPM实现中的关系并不总是双向的。如,从一个任务节点我们可以找到所有这 个节点定义的任务,但是从一个任务,并没有API可以完成找到包含它的任务节点 的工作;由某个任务实例,你可以得到一个任务,但是没有由某个任务得到所有 实例的API,诸如此类。

超时不是发生在任务自身,而是发生在任务节点上。由于某个节点可以关联多 个任务,并且jBPM关系实现并不是双向的(见上),因此要跟踪当前任务实例就 需要其他的支持手段。

以重新分配实现的上报的整个实现涉及3个处理器:

负责给任务分配参与者的分配处理器。这个处理器跟踪它是一个首次任务调用 还是一个上报任务调用。清单14给出了一个分配处理器的例子。

package com.sample.action; import org.jbpm.graph.def.Node; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.taskmgmt.def.AssignmentHandler; import org.jbpm.taskmgmt.exe.Assignable; public class EscalationAssignmentHandler implements  AssignmentHandler {   private static final long serialVersionUID = 1L;   @Override   public void assign(Assignable assignable, ExecutionContext  context)   throws Exception {   Node task = context.getToken().getNode();   if(task != null){    String tName = task.getName();    String vName = tName + "escLevel";    Long escLevel = (Long)context.getVariable(vName);    if(escLevel == null){    // First time through    assignable.setActorId("admin");    }    else{    // Escalate    assignable.setActorId("bob");    }   }   } }

使用jBpm支持高级用户交互模式(8)

时间:2011-07-08 infoq 译:胡键

清单14 分配处理器示例

这里我们尝试得到一个包含了给定任务上报次数的流程变量。如果变量未定义 ,则就分配“admin”为任务拥有者,否则任务就被分配给“bob”。在这个处理 器中可以使用任何其他的分配策略。

任务实例创建动作处理器(清单15),它保存流程实例上下文的任务实例 id

package com.sample.action; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.def.Node; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.taskmgmt.exe.TaskInstance; public class TaskCreationActionHandler implements  ActionHandler {   private static final long serialVersionUID = 1L;   @Override   public void execute(ExecutionContext context) throws  Exception {   Node task = context.getToken().getNode();   TaskInstance current = context.getTaskInstance();   if((task == null) || (current == null))    return;   String tName = task.getName();   String iName = tName + "instance";   context.setVariable(iName, new Long(current.getId()));   } }

清单15 任务实例创建处理器

任务节点计时器触发调用的超时处理器(清单16)。

package com.sample.action; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.def.GraphElement; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.taskmgmt.exe.TaskInstance; public class EscalationActionHandler implements ActionHandler  {   private static final long serialVersionUID = 1L;   private String escalation;   @Override

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号