需求描述: 用户提出会签之后,需要等所有的会签任务完成之后,再根据用户意见来判断是同意还是拒绝,所以,原来的那种方式还是无法实现这个需求。就在原来方案上做了部门修改,于这个星期一终于完成了会签。
下面就跟大家分享一下我的实现方法。
流程配置
xml 代码
<task-node name="060-Cosigning" create-tasks="false" signal="never" end-tasks="false"> ...
上次讲到代理人的解决方案,但是在使用的过程中出了很多的问题,在发现问题后,废除了原有的解决方案,重新设计了代理人方案。在jbpm外层,增加代理人信息,当代理人提交任务时,真正的处理人还是那个被代理人,这样不会导致混乱。
1、代理人机制是建立在人事的请假基础上的,当请假是就会设置代理人。
2、当流程提交到一个已经请假的人时,就会返回代理人,增加代理人资料。这样,两个人都能操作这个任务。
3、当代理人操作任务时,是被代理人的名义去完成这个任务的。
4、最后就是显示签核日志的问题,如果是代理人,就在代理人的后面显示一个”代理“字样。
从整体上来讲,这次的方案是比较合 ...
请看代码
java 代码
taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
Set
actorSet = new HashSet
();
PooledActor obj ...
这里仅讨论通过action动态创建task来实现的方式。
决定会签的方式主要是通过task-node的signal属性来决定的。
会签中,一个人reject,则结束会签,退回起草人;全部通过,则流到下一个node。
会签中,等待所有的人完成会签任务,然后根据会签人的意见(即所选的transition),来决定流程流向哪个node。
第一种情况,signal="last-wait",只要一个人拒绝,则系统需要将其他没有完成的任务完成掉,在完成时需要以拒绝的那个transition来做end,具体可以参考 http://tomkoo.javaey ...
就目前了解
有那么几种方式
swimlane: 在我的流程中,使用最多的是这种情况,因为我的参与者都是从HR数据库中直接查询获得的。
identity: 这种方式只在我刚开始测试的时候使用,直接将任务分派给一个滴定的人或者部门角色等等。
action: 有时候需要动态的创建任务,这个时候就需要通过这种方式。
流程变量: 这种方式是我刚刚开别人的blog发现的,可以直接调用流程变量来给这个任务分派参与者,原来的做法是通过swimlane先获取流程变量,然后再分派参与者,这样方式可以减少很多不必要的swimlane。 &nb ...
晕,保存了一下原来写的东西没了,哭啊~~~~~~~(下次再补上,大家自己看源码吧,写的不怎么样,请见谅)
在企业应用中,会有很多这样的情况,一个人起草之后,会需要他的上级一级一级的签,直到签到符合要求的那个主管等级,然后结束。这种情况,有不过不固定,因为每个人的上级不一样,所以如果要把这个图都画出来的话及其复杂,这样就有了以下的构思。通过同一个node的循环,来实现这种需要上级签合的情况。
下面是一个我们公司的资讯申请单流程
xml 代码
<?xml version="1.0" encoding="UTF-8"?>
<pr ...
现在手头的工作流页面端用的是struts2,由于以前没有用过webwork,所以现在用起来基本上是摸着石头过河,感觉蛮辛苦的,不过很有挑战性。
在经过一个早上的努力之后,实现了针对工作流页面的转发action,用于将不同的ProcessDefinition转发到相应的action。这里听取了同事的意见,直接把页面action的名字和流程定义名默认一样,这样就可以少一张table来维护,何乐不为。所以这个DispatchAction最后变成很简单的,就实现了一个可以动态转发action的动作。参考apache上面的文章,很快完成了这一部分的操作。
xml 代码 (struts2配置文件)
...
刚开始的时候,对这个概念超先不懂,什么叫泳道啊(主要是UML自己也没有学好)。然后看别人的文章看完之后就更惨了,彻底什么都搞不清楚了。
现在看来,这个就是一个流程角色,而且可以当成一个人来看,而不需要指定到什么role,等等其他概念上了,这样就能很清楚了。而且还起到一个解藕的作用,使task和actor之间有了一个中间桥梁,这样当actor变化的时候只需要修改swimlane就好了,如果写成一个动态类,那么,只要修改后台数据库数据就可以了。
想当初为了解决公司组织结构和流程衔接的问题,简直想破的脑袋。现在就针对每一个swimlane,作一个class,然后通过这个class去组织结构数据库 ...
这是第一个版本,写的可能比较龊,还请大家见谅
java 代码 (创建StartTask)
public long createTask(String strProcessName, String strRequisitioner, Map taskVariables, String transition) {
log.debug(" ...
在经历了2个星期的学习,及两个星期的开发之后,我们公司第一个用jbpm作为流程引擎的工作流完成了。虽然是一个不算很复杂的流程,但是还是折腾了两个多星期,今天刚刚收尾完毕,不过经用户确认之后还要小改一下。
总结的结果就是,流程不是问题,其实最难的是页面,准确来说繁琐,特别是对页面的读写控制,简直让人发疯。
这个项目使用 struts2 + spring2.0 + ibatis,基于通用及跨平台的考虑,jbpm部分我们用web service封装,好像也能称之为SOA,哈哈哈。刚开始的时候本来打算用hibernate的,虽然不熟,但是还是有那么点经验的。而且流程之间的model相对比较独立,不 ...
1、一个node中的task,在创建之后,如果重新回退到这个node,则,不会重新指定actor,就算actor是通过swimlane类动态指定的。也按原来这个task的actor重新创建这个taskInstance。不清楚jBPM是不是系统就是这么设计的。通过自己的测试,感觉是这样样子的。
2、为了能在同一个node,循环创建taskInstance,这里要用动态创建taskInstance方式来创建,并指定actor,这样可以创建出同样的task不同的actor。主要是为了循环利用一个相同的node。
公司对于代理人在流程中有这样的应用:
当用户设置了代理人之后的任务,用户和代理人都要能看到这个任务;
当用户设置代理人时,已有的任务需要添加代理人,并通知代理人处理;
当用户取消代理人设置后,原来代理人未完成的任务,需要重新回到用户的任务中。
经过昨天对ActorId和PooledActors的研究,想出这样一个解决方案,基本上完成了上面所需要的功能。
对于第一个要求,只需要设置TaskInstance的PooledActors这个属性给用户及代理人,这样用户及代理人都能看到这个任务。在代理人或用户确定要处理这个任务后,会进行check out的 ...
jBPM有两种分配任务的模式,推模式和拉模式。
推模式:系统主动分配任务给actorID。推模式只有一个人能参与这个任务。通过actorId指定用户
拉模式:actorId去申请这个任务。拉模式的任务可以是多个人参与的,但是只能有其中的一个人能结束。通过PooledActors指定用户群。
当同时指定了这两个属性的时候,actorId才是真正被指定的参与者。只有这个参与者才能完成这个任务,其他的在PooledActors里面的用户,是无法得到这个任务的,所以也没有办法处理这个任务。
设置用户
推模式:Assignable.setActorID(String actorId);
拉模 ...
最近在研究jBPM,碰到了一大堆问题,这个郁闷的了。不过到今天为止,终于小有成果,可喜可贺啊,:)
下面主要讲一下最近碰到的一些问题,疑问以及解决方案
1、流程的测试
刚开始不知道怎么用插件,流程代码都是手写的,结果等我好不容易写完之后发布,发现无法编译这个流程文件,这个郁闷啊。肯定是我哪里写错了。然后去找有没有dtd文件,结果好不容易找到了,但是好像没有起作用,我很奇怪,怎么这么好的东西,会没有dtd文件呢。最后还是决定用插件,因为找到了一篇怎么用插件的文章,原来所有的东西都可以做的,哈哈哈。真是不错。
还有一个比较郁闷的地方就是jBPM的api doc,这个简直就不是doc,里面基 ...
- 浏览: 11164 次
- 性别:


- 详细资料
搜索本博客
最近加入圈子
最新评论
-
终于一个流程整合完成了
我现在也在研究JBPM,能不能把我的DEMO发一份给我呀,我的电子邮件:yuya ...
-- by yuyanshan -
Swimlane的理解
很好,很强大
-- by uniquejava -
jbpm应用实例(Struts2+Sp ...
代码不是一般的乱,污染我的眼睛啊.楼主要整理一下
-- by uniquejava -
jbpm应用实例(Struts2+Sp ...
先顶再下最后看,感谢楼主,上帝kobe保佑你
-- by uniquejava -
流程情景应用--用户与代理 ...
呵呵,也都是自己慢慢摸索出来的。不懂了就去网上找找。 jbpm的内容确实是少,最 ...
-- by wuxufeng8080






评论排行榜