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
这样可以么? 


填写请假单 不放在流程中, 只是添加一条请假单数据,该数据可以随时修改。
一旦启动审批流程,则改变请假单的状态为“审批中”, 该数据不能被修改。
Global site tag (gtag.js) - Google Analytics