使用JBPM实现动态会签
关键字: jbpm/工作流/workflow原文出处:http://sqz.spaces.live.com/blog/cns!F319B9AFFE33A988!283.entry
目前有很多实现动态会签的文章,但是给人感觉不是很优雅,下面介绍一种实现方式。
1、流程定义文件:
在这里我们从node节点动态生成任务节点,会签时当有一个是reject时便结束所有节点。
2、动态派生ForEachFork代码:
在具体应用中需要灵活的根据业务逻辑需要派生所需要的分支。
3、DefaultAssignment
进行简单的权限操作,这里面主要是将#{reviewer}值作为actorId进行设置
4、JoinEndForkedTokens结束所有节点
- public class JoinEndForkedTokens implements ActionHandler
- {
- public JoinEndForkedTokens()
- {
- }
- /* (non-Javadoc)
- * @see org.jbpm.graph.def.ActionHandler#execute(org.jbpm.graph.exe.ExecutionContext)
- */
- public void execute(ExecutionContext executionContext)
- {
- Token token = executionContext.getToken().getParent();
- Map childTokens = token.getActiveChildren();
- for (Object childToken : childTokens.values())
- {
- cancelToken(executionContext, (Token)childToken);
- }
- }
- /**
- *
- 取消 token
- *
- * @param executionContext
- * @param token
- */
- protected void cancelToken(ExecutionContext executionContext, Token token)
- {
- Map childTokens = token.getActiveChildren();
- for (Object childToken : childTokens.values())
- {
- cancelToken(executionContext, (Token)childToken);
- }
- if (!token.hasEnded())
- {
- token.end(true);
- }
- cancelTokenTasks(executionContext, token);
- }
- /**
- *
- 结束token关联的任务
- *
- * @param executionContext
- * @param token
- */
- protected void cancelTokenTasks(ExecutionContext executionContext, Token token)
- {
- TaskMgmtInstance tms = executionContext.getTaskMgmtInstance();
- Collection tasks = tms.getUnfinishedTasks(token);
- for (Object task : tasks)
- {
- TaskInstance taskInstance = (TaskInstance)task;
- if (taskInstance.isBlocking())
- {
- taskInstance.setBlocking(false);
- }
- if (taskInstance.isSignalling())
- {
- taskInstance.setSignalling(false);
- }
- if (!taskInstance.hasEnded())
- {
- taskInstance.end();
- }
- }
- }
- }
结束所有分支节点任务,流向结束节点。
评论
错误出现在 executionContext.getJbpmContext().getSession().save(loopToken);
。通过跟踪发现,是executionContext.getJbpmContext()为空。即报Caused by: java.lang.NullPointerException的错误。
这个问题困扰我几天了。一致没有解决。
不知那位有过此情况下的情况,望告知。谢谢!
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 13804 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
使用JBPM实现动态会签
太感谢楼主的分享精神了,搞了好久的会签 被楼主点通了,谢谢
-- by rebellan -
terracotta在hibernate应 ...
没有,之前没有出现过这种情况,使用terracotta才出现的,去掉就不会出现这 ...
-- by pppppp -
terracotta在hibernate应 ...
是不是你让sessionfactory新建表了
-- by daquan198163 -
使用JBPM实现动态会签
问题已经解决。是测试程序测试方法不对造成的。
-- by llandyl -
使用JBPM实现动态会签
如果将流程定义文件修改,变成两次调用生成<node name="forea ...
-- by llandyl






评论排行榜