`

二十七、jbpm回退

 
阅读更多

要实现JBPM的任务回退很简单,只要对JBPM中的2个表进行修改,这2个表分别是:


jbpm_token和jbpm_taskinstance,对应类是org.jbpm.graph.exe.Token和
org.jbpm.taskmgmt.exe.TaskInstance.


修改方法:
将已经完成的任务实例jbpm_taskinstance表中的2个字段修改:issuspended_=0和
isopen_=0,将start_=null和end_=null这2个字段改不改都可以 我自己是另外用一个业务表来记录任务处理时间的
这样就能将已经完成的实例重开


还要修改的表就是jbpm_token中的node_字段,这里要将你所回退到的节点的ID写进去,进行数据库的更新。
这2个表对应的2个方法分别是getTokenForUpdate和getTaskInstanceForUpdate。


jbpm没将任务回退直接写成Java方法,估计是怕不同人有不同的需求,感觉如果将jbpm的表结构如果能全了解,那样要根据自己需求自己扩展就很简单了。

 

 

 多分支回退功能实现思路

在流程派发界面增加一个“回退按钮”,回退按钮仅能实现逐步回退,即回退到上一步;

如想实现多步回退,建议采用决策节点进行实现;

点击按钮后,系统进行如下判断:

首先需要了解当前节点的上一节点类型{

根据当前节点id(nodeid)查询JBPM_TRANSITION表,获得from信息;{

select name_,from_ as 上一节点id from JBPM_TRANSITION where PROCESSDEFINITION_ = ? and TO_ = ?[当前节点id]

}

select class_ from JBPM_NODE where id_ = 上一节点id

}

如果是开始节点(node class is R)则不允许

如果是普通节点(node class is K){

@todo:

1,将当前任务实例设置成完成状态(update JBPM_TASKINSTANCE set END_ = GETDATE(),ISOPEN_=0,ISSIGNALLING_=0 where id_ = ?;)

2,将上一节点对应的任务实例设置成未完成状态(

根据节点id获得任务id;

update JBPM_TASKINSTANCE set END_ = null,ISOPEN_=1,ISSIGNALLING_=1 where TOKEN_=? and TASK_ = ?;

)

3,将token移动到上一节点上(update JBPM_TOKEN set NODE_ = 1492 where ID_ = ?[tokenid];)

4,保存退回意见;操作JBPM_VARIABLEINSTANCE表{

INSERT INTO JBPM_VARIABLEINSTANCE

  ([CLASS_] -- 固定值

  ,[NAME_] --固定值

  ,[TOKEN_] --token id

  ,[PROCESSINSTANCE_] -- 流程实例id

  ,[STRINGVALUE_] -- name_ == 'operatorId' ? '当前登录人id' : '审批意见'

  ,[TASKINSTANCE_]) -- 当前任务实例id

VALUES

  ('S','operatorId',?,?,?,?) --记录操作人

  ,('S','comment',?,?,?,?) --记录操作人填写的审批意见

}

}

如果是汇聚节点(node class is J){

@todo:

1,查询汇聚节点的来源节点(select name_,from_ from JBPM_TRANSITION where PROCESSDEFINITION_ = ? and TO_ = ?)

2,将"必须执行"的节点结果集显示在界面上供用户选择(支持多选){

1,根据from_获得task_id(select * from JBPM_TASK where TASKNODE_ = ?[from_];)

2,检查节点是否必须执行(select if_must_approve[1必须0不必须] from wf_taskuser where task_id_ = ? and prcessinstance_id_ = ?)

}

3,用户选择预回退的节点后点击确认操作,系统做如下处理{

1,将当前任务实例设置成完成状态[同上]

2,获得所选节点信息

3,将获得的所有节点信息对应的任务实例设置成未完成状态[同上]

4,将token[子token]移动到每个所选节点上(update JBPM_TOKEN set NODE_ = ?[所选节点id],ISABLETOREACTIVATEPARENT_ = 1 where ID_ = ?[子tokenID];)

5,保存退回意见[同上]

}

}

如果是分支节点(node class is F){

@todo:

如果是汇聚节点,那么此操作一定发生在分支上且是其中一分支发起的回退操作;

首先系统提示操作者,此回退操作会自动设置所有分支中的任务实例状态为已完成;

确定操作后,token会回到汇聚节点处;

1,提示用户此操作的下场是什么

2,根据token查询所有子token(select ID_ from JBPM_TOKEN where PARENT_ = ?)

3,查询所有子token对应的任务实例(select * from JBPM_TASKINSTANCE where TOKEN_ in (select ID_ from JBPM_TOKEN where PARENT_ = ?))

4,将所有任务实例设置成完成状态

5,找到分支节点的上一节点并将对应的任务实例设置成未完成状态{

1,select from_ as 上一节点id from JBPM_TRANSITION where PROCESSDEFINITION_ = ? and TO_ = ?[当前节点id];

2,update from_对应的任务实例为未完成状态[同上]

}

6,将token(父亲)移动到分支节点的上一个节点上{

1,找到分支节点的上一节点[同上]

2,update JBPM_TOKEN set NODE_ = ?[from_] where ID_ = ?[tokenid];

}

6,保存退回意见[同上]

}

如果是决策节点(node class is D){

@todo:

1,将当前任务实例设置成完成状态

2,找到决策节点的上一节点并将对应的任务实例设置成未完成状态

3,将token移动到决策节点的上一节点

4,保存退回意见

}


 

 

分享到:
评论

相关推荐

    jbpm4.4 请假的例子,包含Jar包,实现回退功能可以运行

    包含Jar包,实现回退功能,可以运行,不喜勿喷

    JOffice2中的JBPM4的任务回退实现

    JOffice2中的JBPM4的任务回退实现

    JBPM7基础开发

    简单描述流程引擎相关概念和以jbpm7为基础的开发方式和实现方式做简单的说明

    JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)

    NULL 博文链接:https://eminemning.iteye.com/blog/875250

    Extjs4+jbpm4+SSH+oracle.zip

    业务流程执行:流程的启动、任务的提交、回退、撤销、取回、处理任务等操作、 实用需求实现:执行权限、工作流留痕、事务提醒 只需一套实现,你的业务只要在挂接中配置则可以具有工作流功能 业务方面:OA项目实战...

    ExtJs4.1+Jbpm4+SSH2+Oracle10g实际项目源码

    业务流程执行:流程的启动、任务的提交、回退、撤销、取回、处理任务等操作、 实用需求实现:执行权限、工作流留痕、事务提醒 只需一套实现,你的业务只要在挂接中配置则可以具有工作流功能 业务方面:OA项目实战

    基于JBPM 的特殊工作流研究与实现

    在开源工作流JBPM 的基础上,利用其特有的事件处理机制,提出了实现任务 回退,任务催办和会签任务等特殊工作流的方法,提高了开发效率并具有良好的灵活性,满 足了实际项目开发的需要。

    JBPM4.4使用到的术语及注意项

    任意回退、会签(包括加、减签,补签)、撤销(又叫回退)、自由流(又叫动态路由)。此处之所以叫做灵活的临时动态性需求

    比较完整的jbpm4.3例子

    包括用户登录、流程部署、启动、删除、回退、审批、流程跟踪等功能,

    jbpm-executor:用于调度 BPM 请求的 Executor 组件

    jbpm-执行器用于调度 BPM 请求的 Executor 组件可用的功能。 线程池。 重试机制失败回退要运行简单的示例/演示,请移至 src/test/java 并执行 NoCDIExecutorTest

    基于jBPM4的临时动态性需求研究

    介绍了国内目前的工作流领域特点,尤其对临时动态性需求(会签、撤销、任意回退等)的各种场景进行了分析,提出了基于jBPM4的解决思路及一种动态路由的方法,以解决临时回退的问题。

    基于jbpm与activiti的工作流平台技术架构介绍

    20.流程任务逐步回退处理(任务追回及多驳回 ) 21.流程自由跳转 22.流程跳转业务规则设置 23.多级分发任务与任务汇总 24.会签(并行与串行)、补签及投票处理 25.流程版本变更管理 26.流程催办(基于MQ短信及邮件...

    工作流系统源码,5人Team1年的心血结晶

    流程支持会签、并签、自由指派、自由回退、取回、代理等,并在每个审批节点都可以植入Java代码,实现任何业务需求,提供多种报表实时监控。 技术实现非常适合与研究GWT的人,有GWT的自定义控件、GWT与Spring集成、...

    工作流概念及模型的研究(学士学位论文)

    3.4.3回退处理 36 3.4.4自由流 36 3.4.5代理/代办 37 3.4.6异常处理 38 4.实验设计:基于JBPM的工作流管理系统 38 4.1 JBPM的简单介绍 38 4.2 需求 39 4.2.1 总体需求 39 4.2.2 功能需求 40 4.3 设计与实现 44 4.3.1...

    Joffice2.1操作手册

    提供流程定义、流程设置、流程版本更变,流程任务管理,流程实例管理,流程表单管理,流程表单在线义、模板表单,流程历史查询,查看我的任务,任务回退等丰富流程开发管理。 9 人力管理 10 报表管理 11 公文管理 ...

Global site tag (gtag.js) - Google Analytics