`

二十七、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包,实现回退功能可以运行

    在JBPM4.4版本中,我们可以看到一个具体的请假流程示例,该示例包含了实现回退功能的完整代码和Jar包,便于开发者理解和学习。 1. **流程设计** JBPM使用BPMN2.0(Business Process Model and Notation)标准进行...

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

    标题中的“JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)”是指在使用JBPM(Java Business Process Management)4.4版本时,设计了一个特殊的流程控制机制,允许用户在执行流程过程中进行回...

    JBPM7基础开发

    "JBPM7基础开发" JBPM7 基础开发是基于流程引擎的开发方式和实现方式的简单说明。流程引擎是一个自动化管理和优化流程的工具,旨在提高不同部门之间业务的整合效率,降低开发和维护成本。 概念1:BPM(业务流程...

    JOffice2中的JBPM4的任务回退实现

    本文将深入探讨如何在JOffice2中实现JBPM4任务的回退功能,这在处理复杂流程时尤其重要,允许用户纠正错误或根据需要调整流程方向。 任务回退在JOffice2中有两种主要的实现方式: 1. **完成当前任务并生成新的后退...

    jbpm使用简单示例

    5. **异常处理**:在整个过程中,可能出现拒绝申请、补充材料等异常情况,jbpm提供灵活的分支和回退机制,可以处理这些异常。 **jbpm关键概念** - **流程定义(Process Definition)**:描述了业务流程的结构和...

    jbpm工作流整合

    9. **错误处理和补偿**:jbpm支持异常处理和流程回退,允许在流程执行中处理错误,并通过补偿任务修复流程状态。 10. **持续集成与自动化测试**:通过Maven或Gradle等构建工具,可以设置持续集成流程,同时编写测试...

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

    在实际的项目开发中,利用JBPM特有的事件处理机制,可以有效地实现任务回退、任务催办和会签任务等特殊工作流的需求。这样不仅可以提高开发效率,还能保证工作流的灵活性,满足不同项目的实际需要。 总的来说,JBPM...

    jbpm Demo 可以走通一个简单的流程

    9. **异常处理与回退**:jbpm允许定义异常处理和回退策略,当流程执行过程中遇到问题时,可以根据预设规则进行错误恢复或流程回滚。 10. **持久化与事务管理**:jbpm使用JPA(Java Persistence API)进行数据持久化...

    JBPM与Activity分析.doc

    FixFlow不仅支持常见的工作流功能,如加签、会签、回退等“中国式工作流”,而且提供了更为友好的用户界面和更完善的本地化支持。 #### 五、总结 综上所述,JBPM与Activiti各有千秋,在不同的应用场景下展现出不同...

    JBPM开发实战教程

    - **回退机制**: 提供流程回退功能,以便于错误恢复。 #### 四、案例分析 ##### 4.1 报销流程示例 - **流程设计**: 包括提交申请、部门经理审核、财务复核等环节。 - **实现代码**: 使用Java代码实现流程启动、...

    jbpm3基本资料和代码总结

    - **流程执行**: 支持并发、分支、循环等复杂流程结构,以及异常处理和回退机制。 - **任务管理**: 包括任务的分配、领取、委托和监控。 - **规则集成**: 集成了Drools规则引擎,使得流程可以根据业务规则动态变化...

    jbpm工作流程的说明文档

    例如,它未直接支持“回退”、“取回”、“会签”、“委派”等功能,这些在中国被认为是常见的业务场景。然而,通过深入理解jbpm的架构和设计思路,开发者可以探索并实现这些特定需求的解决方案,以满足中国特色的...

    jbpm.rar_jbpm_jbpm tuxedo_工作流

    4. **流程执行与控制**:学习如何启动流程实例、完成任务、处理异常以及进行流程的回退和分支。 5. **jbpm集成**:jbpm可与多种技术栈集成,如Spring、Hibernate等。教程可能包含如何将jbpm嵌入到现有的Java应用中...

    jbpm4.4 demo

    7. **异常处理**:掌握如何在流程中处理异常情况,如错误处理、回退机制等。 总之,【jbpm4.4 demo】是一个宝贵的学习资源,对于想要理解和应用jbpm的开发者来说,它可以提供实践操作的经验,帮助他们更好地理解和...

    jbpm4.4API

    8. **流程实例的控制和调试**:API提供了丰富的功能,如挂起、激活、回退和跳过流程节点,这对于测试和调试流程行为至关重要。 9. **规则引擎集成**:JBPM集成了Drools规则引擎,允许在流程中嵌入复杂的业务规则。...

    jBPM-4.0DeveloperGuide.rar_jbpm

    jbPM 支持错误处理和异常回退策略,当流程执行过程中发生问题时,可以设定相应的错误处理节点,确保流程能够优雅地恢复或终止。 **10. 集成与扩展** jbPM 可以与其他Java企业级技术无缝集成,如Spring、Hibernate等...

    Jbpm工作流实例—报销申请

    在报销申请的场景中,我们还需要考虑异常处理,比如审批不通过时如何回退到上一步,或者在等待审批期间如何暂停流程。Jbpm支持条件分支、事件监听、定时器等特性,使得流程设计更加灵活。 总的来说,Jbpm通过流程...

    JBoss_jBPM_jPDL用户开发手册_3.2.3.pdf 中文-(转)zhangym

    - **异常处理与回退策略**:阐述如何处理流程中的异常情况,以及如何定义回退步骤。 - **报表与监控**:展示如何利用jBPM提供的工具监控流程实例的状态,生成业务报告。 - **案例研究**:提供实际应用场景,帮助理解...

    jBPM开发入门指南

    5. **异常处理与回退**: jBPM支持异常处理和流程回退机制,当流程执行中出现问题时,可以有策略地处理。 通过以上内容,你可以对jBPM有一个基本的认识,并开始在Eclipse环境下进行jBPM的开发。记得,实践是检验真理...

Global site tag (gtag.js) - Google Analytics