`
上杉t
  • 浏览: 32554 次
文章分类
社区版块
存档分类
最新评论

浅谈jbpm流程收回和回退的控制方法(一)

阅读更多

     在我们做流程项目时,总会有一种情况是流程已经跑到后面了,但客户要求我要从某某任务开始重走,而且还是要求从什么地方都可以重走.如果你要是按jbpm的思路做,就要到处划线,最后流程图是乱七八糟,(当然你客户不看流程图就没问题,呵呵).
     很多了解jbpm工作原理的人都知道要想让流程回到以前的一个任务重新开始,需要控制任务开启与关闭,还有就是要控制令牌的指向的节点.其实在实际应用中要跟复杂一些比如,要将流程回退到一个分支中,或从一个分支回到到分支开始之前任务上.从子流程回退到主流程中,从子流程回到前面的一个子流程中......(&%#$*? 更复杂的我就不说,用的比较少了).对于以上情况我们会逐个讨论.

     今天可以先讨论一下最简单的情况,先做个假设有流程 a-->b-->c-->d-->e.当前流程已经跑到d,如果要回到b重新跑怎么做那.步骤就是我们上面提到:

                                        一,关闭任务b后创建的并且没有关闭的任务

                                                (与任务b同在一个节点上没有完成的任务除外)

                                        二,开启任务b.

                                        三,将令牌指向任务b所在的节点.

       如何开关一个任务 :任务实例TaskInstance有三个重要的属性end(任务结束时间),isOpen(任务是否开启),isSignalling(任务是否可流转).控制这3个属性就可以控制任务实例.如果要开启一个任务,就让end=null.isOpen=true,isSignalling=true.如果要关闭一个任务就是end=new Date().isOpen=false,isSignalling=false.另外还有一个属性isCancelled,如果你关闭的任务作废了,不需要作为历史任务保留,就让isCancelled=true;

       如何控制令牌的指向 :当前令牌保存的是任务d所在节点的节点Id,因为你要从任务b开始重新走流程,所以应该将任务b所在节点的id装入令牌中:

                            Node node = taskInstance.getTask().getTaskNode();//取任务b所在节点
                            if (node == null) {
                                    node = taskInstance.getTask().getStartState();//有可能是要退到头的
                            }
                            taskInstance.getToken().setNode(node);

       这样就ok了,不过这样只能处理简单的回退,当涉及到分支,子流程事时不成的(这个下次再说),开启和关闭任务的3个属性有的是没有set方法的,需要写sql,hql.

       最后说一下我这里回退的业务逻辑,回退操作每次只能开启一个历史任务,该任务之后创建的任务全部作废(end=null.isOpen=true,isSignalling=true,isCancelled=true),但如果有属同一节点上的任务且未完成.就不作废了.

       今天就说到这吧,下次讨论一下含分支的处理逻辑.

分享到:
评论
7 楼 okhaoba 2008-10-05  
任务实例可以取消
taskInstance.cancel();
6 楼 yuyanshan 2008-08-08  
我按你说的做了,流程也回退到了B但是为什么没有对B再次进行角色赋值,现在是看流程是停在B了,但是没有人有权对B进行审批了,是为什么 呀
能不能把你的代码贴全一点呀
5 楼 zhoden 2008-07-28  
写得不错!
4 楼 上杉t 2008-07-24  
    谢谢大家指正,功能来自于客户需求.jbpm没有提供这个功能,我们只能出此下策,不过我别不任务对执行轨迹不好跟踪.做好历史任务列表功能也可以体现执行轨迹,
   其实我写这个小文章是想和大家分享jbpm对流程的控制方式,了解这些不管你是不是要用这个功能,至少可以对jbpm的流程执行有点了解,呵呵.
   对分支流程的分析正在编写中.择日推出,大家拍砖.
3 楼 skllb 2008-07-23  
功能上是可以实现,那是因为JBPM是基于状态图的,但实际上不应该这么做,因为这用写违背了JBPM的基于UML状态图的思想,且对流程执行轨迹不好跟踪。
2 楼 llandyl 2008-07-18  
不错。“如果你要是按jbpm的思路做,就要到处划线,最后流程图是乱七八糟”。
现在我们只是固定几种情况,即改变业务的复杂度。不支持任意流转。

期待你继续分析,总结。
1 楼 碧海山城 2008-07-16  
期待您的大作

相关推荐

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

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

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

    JBPM流程引擎资料

    JBPM是业务流程管理(BPM)领域的一个灵活且强大的开源工作流引擎,它主要用于建模、执行和监控业务流程。文档《JBPM流程引擎资料》详细介绍了如何利用JBPM开发流程应用,涵盖了从框架构造到节点处理的方方面面。 ...

    揭秘jbpm流程引擎内核设计思想及构架.doc

    jbpm流程引擎内核的设计思想和结构是jbpm流程引擎的核心部分,掌握了jbpm流程引擎内核的设计思想和结构,才能真正理解jbpm流程引擎的工作原理,并且能够更好地应用jbpm流程引擎来解决实际问题。 流程引擎内核的设计...

    JBPM流程引擎设计 工作流资料

    JBPM(Java Business Process Management)是一款开源的工作流管理系统,它为业务流程的建模、部署、执行和监控提供了全面的解决方案。JBPM流程引擎设计是IT领域中的一个重要知识点,尤其对于那些希望理解和实施企业...

    JBPM 流程 监控 的实现

    JBPM(Java Business Process Management)是由JBOSS公司开发的一款开源的工作流管理系统,它提供了全面的业务流程自动化和管理解决方案。作为一个强大的BPM平台,JBPM不仅支持工作流的建模、部署、执行,还提供了...

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

    开发者可以通过它了解如何设计和实现一个实际的业务流程,同时掌握回退功能的实现方法。 总之,JBPM4.4的请假流程实例是一个全面展示流程管理能力的案例,它涵盖了从流程设计、部署到运行的全过程,并特别强调了回...

    jbpm流程设计器

    jbpm流程设计器是一款强大的工具,专门用于设计和构建jbpm工作流。jbpm(Java Business Process Management)是一个开源的企业级工作流管理系统,它允许开发者通过定义业务流程来自动化企业的业务操作。jbpm流程设计...

    JBPM流程监控的实现过程

    虽然JBPM本身未直接提供流程监控功能,但借助其提供的API和底层数据库结构,通过手工编码的方式完全可以实现这一需求。通过上述步骤,不仅可以监控已发布的流程定义,还能详细了解每个流程实例的状态和进度,从而...

    揭秘jbpm流程引擎内核.pdf

    3. **任务管理**:jbpm提供了一个任务服务,用于管理流程中的任务分配和完成。任务可以分配给特定的角色或个人,并支持任务的委托、优先级设置、评论和附件等功能。 4. **持久化存储**:jbpm使用Hibernate进行数据...

    JOffice2中的JBPM4的任务回退实现

    在JOffice2中,JBPM4是一个强大的工作流引擎,用于管理和执行业务流程。本文将深入探讨如何在JOffice2中实现JBPM4任务的回退功能,这在处理复杂流程时尤其重要,允许用户纠正错误或根据需要调整流程方向。 任务回退...

    JBPM流程代码演示

    JBPM是一个开源的工作流管理系统,它允许开发者设计、执行和管理业务流程。本教程通过一系列代码示例,旨在帮助理解如何在Java应用程序中集成并运行JBPM流程。 在提供的文件列表中,我们可以看到以下几个关键文件:...

    MyEclipse6.0下Jbpm流程设计器

    【MyEclipse6.0下Jbpm流程设计器】是一个专为MyEclipse6.0集成的业务流程管理(Business Process Management,BPM)工具,主要用于设计和管理Jbpm流程。Jbpm是一个开源的工作流和业务流程管理平台,它提供了一套完整...

    JBPM7基础开发

    KieService 是 JBPM6 中的一个重要的 API,用于获取流程管理策略和资源加载源选取。KieContainer 是一个资源库和会话接口封装,提供了 KieBase、KieSession 和 StatelessKieSession 等接口。 JBPM7 基础开发是基于...

    JBPM流程框架源码

    JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于构建和管理业务流程。它提供了丰富的API、工作流建模工具以及执行引擎,使得开发者能够轻松地实现复杂业务流程的自动化。在本资料中...

    jbpm流程引擎框架源码

    jbpm流程引擎框架源码,一套流行的流程引擎框架代码

    jbpm4流程提交及执行完整代码

    jbpm4是一款强大的工作流管理系统,它提供了流程定义、流程实例管理、任务处理以及流程监控等一系列功能。在“jbpm4流程提交及执行完整代码”这个压缩包中,包含了实现jbpm4流程提交和执行所需的若干关键文件。下面...

    JBPM4.4完整可用审批流程

    JBPM4.4是JBoss Business Process Management (BPM)平台的一个版本,它是一个开源的企业级BPM解决方案,用于设计、执行和管理业务流程。在这个完整的审批流程工程中,我们看到它采用Maven进行项目构建和依赖管理,...

    深入浅出jBPM 5,6章

    《深入浅出jBPM 5,6章》是一本专为理解jBPM这一流程管理系统而精心编写的书籍。jBPM是一个开源的工作流管理系统,它提供了业务流程建模、执行、监控和优化的全面解决方案。这本书的第5章和第6章尤其关键,它们涵盖...

    eclipse3.4解压版带jbpm流程定义插件

    JBPM(Java Business Process Management)是一款开源的工作流和业务流程管理系统,用于设计、执行和监控业务流程。它与Eclipse的集成使得开发者可以在Eclipse环境中进行流程定义和调试,大大提升了工作效率。JBPM...

Global site tag (gtag.js) - Google Analytics