论坛首页 Java企业应用论坛

扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回

浏览 57477 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-07-08  
用run.bat生成的jar包,只需要activiti-engine-5.12.jar就OK吧
0 请登录后投票
   发表时间:2013-07-08  
这个流程引擎activiti的包,如果要执行的话,依赖的包也需要,都在那个distrib目录下面了,具体配置启动activiti流程引擎请参考文档:
http://yin-bp.iteye.com/blog/1506335
0 请登录后投票
   发表时间:2013-07-08  
你好,你扩展的Activiti-5.12引擎,能整合spring吗,
0 请登录后投票
   发表时间:2013-07-08   最后修改:2013-07-08
天龙星空 写道
你好,你扩展的Activiti-5.12引擎,能整合spring吗,

不行,这个是我专门为activiti做的bboss定制版本,所以只能在bboss中用
0 请登录后投票
   发表时间:2013-07-13   最后修改:2013-07-13
flashcloud 写道
另外,楼主为何在GitHub上的项目不从Activiti的GitHub项目上直接Fork出来再改啊,这样官方有新版本时,也好同步你的扩展啊,强烈建议这样做

在github上找了下官方的activiti,好像没有,只找到我分享的bboss改造版的activiti 5.12引擎



Activiti在GitHub上的官方源码库:https://github.com/Activiti/Activiti
强烈建议楼主采用Fork的方式进行扩展,这样,对同步升级应该有莫大好处。
0 请登录后投票
   发表时间:2013-08-09  
看了下你代码,回退那块是不是不合逻辑。你根据时间来判断上一个节点,这不太合适,如果有并行的情况就可能出错了
0 请登录后投票
   发表时间:2013-08-09   最后修改:2013-08-09
whdwsl 写道
看了下你代码,回退那块是不是不合逻辑。你根据时间来判断上一个节点,这不太合适,如果有并行的情况就可能出错了


这是我目前所能想到的比较合理的方法,因为扩展后的activiti可以不根据节点之间的路径来流转,而是可以任意节点间跳转,所以只能通过任务完成时间来识别上个处理节点而达到默认回退到上一个环节的功能。而且并行情况下是不会出问题的。如果你觉得这样不可靠,可以自己记录一下最近完成的任务节点key,然后使用以下两个api来代替rejecttopretask实现回退到上一个节点(taskid为当前任务id,destTaskKey对应于上一个节点key):
public void complateTask(String taskid,String destTaskKey)
public void complateTask(String taskid,Map<String,Object> vars,String destTaskKey)

说白了rejecttoPreTask方法就是为了应用实现回退或者驳回到上一个节点而提供的一个便利方法,而且确实能够解决大部分问题。
0 请登录后投票
   发表时间:2013-08-13  
不错啊,有进步。。。。。。
0 请登录后投票
   发表时间:2013-08-15  
yin_bp 写道
whdwsl 写道
看了下你代码,回退那块是不是不合逻辑。你根据时间来判断上一个节点,这不太合适,如果有并行的情况就可能出错了


这是我目前所能想到的比较合理的方法,因为扩展后的activiti可以不根据节点之间的路径来流转,而是可以任意节点间跳转,所以只能通过任务完成时间来识别上个处理节点而达到默认回退到上一个环节的功能。而且并行情况下是不会出问题的。如果你觉得这样不可靠,可以自己记录一下最近完成的任务节点key,然后使用以下两个api来代替rejecttopretask实现回退到上一个节点(taskid为当前任务id,destTaskKey对应于上一个节点key):
public void complateTask(String taskid,String destTaskKey)
public void complateTask(String taskid,Map<String,Object> vars,String destTaskKey)

说白了rejecttoPreTask方法就是为了应用实现回退或者驳回到上一个节点而提供的一个便利方法,而且确实能够解决大部分问题。


EN,你说的也有道理。有两点确认下:
1. 你写的回退,是根据时间来查当前节点外的最后一个节点。并行时会有问题,如:1->3,2->4  这是两个并行分支,现在1先完成,2后完成,待办任务为3, 4 ,任务3的执行人执行退回是希望退回到1
2. 我们把自由流这种方法做为限制级方法,只有流程管理员才能使用。所以执行的回退是根据节点之间的连线来执行的,不考虑自由流的情况。
0 请登录后投票
   发表时间:2013-08-15   最后修改:2013-08-16
whdwsl 写道

EN,你说的也有道理。有两点确认下:
1. 你写的回退,是根据时间来查当前节点外的最后一个节点。并行时会有问题,如:1->3,2->4  这是两个并行分支,现在1先完成,2后完成,待办任务为3, 4 ,任务3的执行人执行退回是希望退回到1

确实像你说的的这个例子在使用以下两个方法时就会出现节点3回退节点2的错误路径:
  void rejecttoPreTask(String taskId, Map<String, Object> variables);
  void rejecttoPreTask(String taskId);
但是我们可以通过以下两个方法来达成目标:
public void complateTask(String taskid,String destTaskKey)
public void complateTask(String taskid,Map<String,Object> vars,String destTaskKey)

例如:
taskServcie.complateTask(3的任务id,1的taskKey);
这样也不会干扰2->4这条路径的正常流转
whdwsl 写道

2. 我们把自由流这种方法做为限制级方法,只有流程管理员才能使用。所以执行的回退是根据节点之间的连线来执行的,不考虑自由流的情况。

本文所提及的自由流包含两个层面的意思:
一、向历史节点(流程通路上已经执行的节点)任意回退,不管当前节点和之前已经完成任务的节点之间是否有连接线
二、往后面节点(流程通路上还没有执行的节点)任意跳转,不管当前节点和之后的任务节点之间是否有连接线
所以我们可以根据实际的流程特点和需求灵活使用自由流功能,而不仅是作为管理员的限制级功能来使用
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics