jBPM如何实现发起人撤回要求,或者是修改提交的内容
zybing
2011-12-07
就拿最简单的休假例子: 如果发起人填写了一个休假请求,需要组长和经理同时批准(同步批复的,组长不知道经理下一步安排、经理也可能不清楚组员目前工作的重要性,因此只有2人同时批复同意才行) 申请人已经提交了一个请求,可能由于种种因素,发起人需要修改休假单上的内容,譬如时间等,或者撤销请假; 这时候经理和组长可能没批、也可能有一个批准了,这时候如果还允许申请人修改休假单,修改申请单后: 如果原来经理和组长没有批,就继续批; 如果经理或组长有一个人批复同意了,需要把同意的批复撤销回来重新进行批复; 如果是上述情况,用jBPM可以实现吗?(或者Activiti是否可以实现?) |
|
zybing
2011-12-08
有人知道吗? --- 现在遇到好几个客户都要这么做,
2个人的工作: 第一个人提交后还可以继续做; 而第二个人的工作是基于第一个人的(譬如审批); 只要是第二个人的工作(审批)没有完成,第一个人还可以继续做下去(修改或者撤销),不知道怎么处理了!!!!! 顶起 |
|
gglu
2011-12-08
如果有图的话,会比较好说些;
不过lz的问题,jbpm提供监听器可以解决很大部分问题。 |
|
gglu
2011-12-08
引用 如果发起人填写了一个休假请求,需要组长和经理同时批准(同步批复的,组长不知道经理下一步安排、经理也可能不清楚组员目前工作的重要性,因此只有2人同时批复同意才行)
这样的话,前面应该是个fork节点,后面应该有个join节点; 在fork节点添加一个监听器(结束事件); 在该监听器里,构建一个可以修改 申请内容信息(假设是流程变量)的任务A,并将任务的id保存到全局变量里(在join节点里有用到)。当任务A结束后,让流程root execution,结束其子executions,设置execution状态,然后移动到fork节点,并执行之。这样流程又回到fork节点了,组长和经理又可以重新审批了。 在join节点也添加一个监听器(结束事件); 监听器主要作用是根据流程变量 任务A的id 终止任务A。 |
|
zybing
2011-12-09
gglu 写道 引用 如果发起人填写了一个休假请求,需要组长和经理同时批准(同步批复的,组长不知道经理下一步安排、经理也可能不清楚组员目前工作的重要性,因此只有2人同时批复同意才行)
这样的话,前面应该是个fork节点,后面应该有个join节点; 在fork节点添加一个监听器(结束事件); 在该监听器里,构建一个可以修改 申请内容信息(假设是流程变量)的任务A,并将任务的id保存到全局变量里(在join节点里有用到)。当任务A结束后,让流程root execution,结束其子executions,设置execution状态,然后移动到fork节点,并执行之。这样流程又回到fork节点了,组长和经理又可以重新审批了。 在join节点也添加一个监听器(结束事件); 监听器主要作用是根据流程变量 任务A的id 终止任务A。 流程: 1. 先填写休假单 2. 进入到审核流程 审核由组长和经理一起审核, 只要一个不同意就结束,不同意, 2个都同意才允许休假 在审核过程中,申请人还可以修改或取消; 取消的话,任务终止; 如果修改了休假单,则组长或者经理, 如果没有开始审批,则继续审批; 有一个已经审批完了则要任务回退,重新审批 不可能存在2个都已经审批完的情况; 就是这么一个要求; 对于组长和经理的审批,可以采用会签的方法完成,没有问题; 主要是 修改和取消 和 审批 之间的问题; 原来在fork后面不想引伸出一个“修改或取消” 的工作,可以根据工作人员身份“取回”原来的任务, 但是“取回”任务是通过HistoryService获取到的,通过HistoryService获取太多的工作任务了,还要一个个区分这个流程是否已经结束了,这个流程是不是请假流程(这步应该可以有办法略过),这样效率太慢了; 增加一个“修改或取消”可以直接从用户的代办任务中直接取到,简单多了,但是需要同步和2个审批任务之间的关系; ============================ 按照你的说法,和我现在的考虑基本一致(构建一个可以修改 申请内容信息(假设是流程变量)的任务A。当任务A结束后,让流程root execution,结束其子executions,设置execution状态,然后移动到fork节点,并执行之。这样流程又回到fork节点了,组长和经理又可以重新审批了。 ),就是几个技术现在还在考虑: 当任务A结束后,让流程root execution,结束其子executions,设置execution状态,然后移动到fork节点,并执行之--------就是这个怎么做,目前还没有想好 ----------流程图现在用fork,如果fork不行,准备采用foreach,可以获取subTask,这个以前做过没问题; |
|
alexandrae2008
2011-12-09
我觉得回复流程里的item节点不如重启流程。
例如: 发起人修改并重启流程,之前产生的一个workflow的实例先cancel掉,并把该实例的所有item task terminate 新建该workflow实例,重新run起来 |
|
alexandrae2008
2011-12-09
另外一个想法就是你可以给组长、经理一个reject权限,他们选择这个,
系统会把流程再跑回creator身上 如此你就可以rework了。 如此流程不会重启。 |
|
zybing
2011-12-09
alexandrae2008 写道 我觉得回复流程里的item节点不如重启流程。
例如: 发起人修改并重启流程,之前产生的一个workflow的实例先cancel掉,并把该实例的所有item task terminate 新建该workflow实例,重新run起来 这个只是大流程中的一个环节,现在只是截取这一段来说明问题,所以整个流程不能cancel重启 |
|
zybing
2011-12-09
alexandrae2008 写道 另外一个想法就是你可以给组长、经理一个reject权限,他们选择这个,
系统会把流程再跑回creator身上 如此你就可以rework了。 如此流程不会重启。 现在是这样: 如果组长同意了,这样组长这个工作环节已经结束了,到join了 经理这一步还没完成, 此时的工作task是: 1. 重填 2. 经理批准 经理还没批准,所以jion这个环节还没进入到工作流程中; 如果此时重填,需要把组长已经提交的任务回退回来,给组长再次一个任务: 做法有2种: 1. 把组长已经结束的任务回退回来: 现在就是在研究这个,不知道怎么处理; 2. 采用大任务下,再重新给组长开启一个SubTask:这个应该是好处理的; |
|
wangyu4882
2011-12-12
这样可以么?
填写请假单 不放在流程中, 只是添加一条请假单数据,该数据可以随时修改。 一旦启动审批流程,则改变请假单的状态为“审批中”, 该数据不能被修改。 |