在使用jbpm4.x进行业务实例开发中,最后遇到了如何判断流程实例运转结束判断的问题。
当业务实例相对应的流程实例运转完毕之后,相应的,需要对业务实例信息做状态标记,表示该业务实例信息已经形成了最终的流程审批意见,可以根据具体的结果进行相应的任务处理。
这样,就涉及到了如何判断流程实例已经运转完成的判断。当然,根据现在的实际开发情况,需要写出一个公用的接口方法,用于判断某流程已经结束,而不是针对某具体流程来独立编写代码来完成。
在jbpm4.x之前的版本,有专门的API来做判断:
ProcessInstance processInstance = executionService.findProcessInstanceById(processInstanceId); if (processInstance != null) { return processInstance.isEnded(); }
但是在JBPM4.x之后,加入了历史流程处理,将已经流转完毕的流程实例数据全部移入相对应的历史资源记录表中。流程信息表中,只保留当前运转信息,提高流程实例运行效率。
这样产生的问题就是,当流程实例完成之后,通过 executionService.findProcessInstanceById(processInstanceId)来获取流程实例,是根本不会获取到对应的流程实例的,因为对应的信息已然不存在,如果执行相应的isEnded方法,只会获得一个空指针异常信息。
这样,就只有到历史表中,去查找相应的流程实例信息了。但是当获取到对应流程实例信息之后,问题也来了。jbpm4.x的处理方式是,当启动一个流程实例后,在流程实例信息表中,和对应历史表中,都会有相应的一条流程实例信息。
这样意味着,即使你从历史信息中获取到了对应的流程信息,也不能就确认,该流程实例已经运转结束。而且历史流程实体对象中,没有提供相应的isEnded方法用来判断。
这样,只好自己动手来想办法来处理了。
第一种方式是判断历史流程实例中,结束时间是否已经赋值。
通过流程实例信息观察,发现,若历史流程实例已经完成流转,则对其流程实例信息中endtime(结束时间)记录时间信息,标记该流程完成时间。
这样,在获取流程实例之后,在判断该流程实例的endtime值是否为空,不为空,就可以判断该流程已经完成了运转。
historyProcessInstance.getEndTime() != null
第二种方法是判断历史流程实例的状态,这种方法显得更规范些。
HistoryProcessInstance类有一个静态实例属性 STATE_ENDED,不论流程实例最终走到了那个结束的节点,是否是正常结束,还是异常结束,只要该流程实例结束,最后的状态都可以该属性相匹配。
historyProcessInstance.getState().equals(HistoryProcessInstance.STATE_ENDED);
暂时就是这两种解决方法了。
相关推荐
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
总的来说,理解并实践JBPM4实例,如"LeaveJbpm",不仅可以让你熟悉流程管理的基本概念,还能帮助你掌握如何在实际项目中应用这些知识,提升业务流程自动化的能力。通过不断的学习和实践,你将能够熟练地运用JBPM4...
JBPM4.chm jbpm4 帮助文档,英文版javaDoc
jbpm jbpm4.3.jar DDDDDDDD
【jbpm4请假实例代码】是一个基于jbpm4工作流引擎的示例应用,它用于演示如何在实际项目中实现员工请假流程的自动化管理。jbpm4是一个开源的工作流管理系统,它提供了强大的业务流程建模、执行和管理功能,使得...
JBPM采购申请系统源代码+全套流程+JBPM的详细介绍2.zip JBPM采购申请系统源代码+全套流程+JBPM的详细介绍2.zip JBPM采购申请系统源代码+全套流程+JBPM的详细介绍2.zip JBPM采购申请系统源代码+全套流程+JBPM的详细...
- **启动流程实例**:调用startProcessInstanceByKey方法,会在执行表jbpm4_execution、历史记录表jbpm4_hist_...等中新增条目。 **PVM 机制** JBPM4引入了Process Virtual Machine(PVM)机制,用以替代之前的...
7. **监听器(Listeners)**:Jbpm允许开发者定义各种监听器,比如任务监听器、流程实例监听器等,来跟踪流程执行的各个阶段,实现自定义的行为。 8. **服务任务(Service Task)**:在流程中,服务任务可以调用...
这个经典的jbpm实例提供了一个已经配置好的环境,可以直接在Tomcat应用服务器上部署,并能在MyEclipse集成开发环境中导入使用,极大地简化了开发者的学习和开发流程。 一、jbpm简介 jbpm是一个基于Java的流程引擎,...
**jbpm4实例源码详解** ...通过研究这个jbpm4实例源码,开发者不仅可以了解jbpm4的基本概念,还能学习到如何在实际项目中部署和运行流程。这将极大地提升开发者的业务流程管理能力,使其能够高效地实现企业流程自动化。
**jBPM 4视频教程03:管理流程实例** jBPM 4是一个开源的工作流管理系统,它为业务流程的建模、部署、执行和监控提供了全面的解决方案。本视频教程03专注于如何通过jBPM 4来管理实际的业务流程实例,帮助初学者快速...
4. **配置文件**(如jbpm.cfg.xml):配置jBPM引擎的设置,如数据源、事务管理等。 5. **部署单元**(.ear或.war文件):将所有组件打包成可部署在应用服务器上的应用。 要运行这个实例,你需要: 1. 安装并配置一...
`JBPM4_EXECUTION`表记录了正在执行的流程实例的状态信息。它包含了执行上下文(如当前活动、变量等)的详细信息,是JBPM4实现其核心执行逻辑的关键表之一。 #### 7. `JBPM4_TASK` `JBPM4_TASK`表用于管理任务。每...
List<ProcessDefinition> ls = jbpm.getGraphSession().findLatestProcessDefinitions(); } catch (Exception e) { throw e; } finally { jbpm.close(); } ``` 2. **根据流程定义筛选流程实例状态** 对于...
了解jbpm流程引擎内核的设计思想和结构,需要具备一定的工作流基本概念,例如流程系统结构、流程定义和流程实例等。同时,需要具备一定的开发环境,例如Eclipse开发环境和jbpm-starters-kit开发包。 jbpm流程引擎...
5. **查看流程图**:jbpm4.4工程实例允许用户查看流程图,这是可视化流程的关键部分。用户可以通过图形方式理解流程的结构和流转逻辑。 6. **我的任务列表**:在jbpm中,每个用户可能有多个待处理的任务。"我的任务...
接下来,创建一个新的动态Web项目,例如命名为"jBPMDemo",并将jbpm-4.1_HOME/lib目录下的所有jar文件以及jbpm.jar复制到WEB-INF/lib目录下。注意,由于juel.jar中的javax/el类与Tomcat中的类冲突,需要从juel.jar中...
本篇我们将聚焦于Jbpm4中的流程定义文件——jpdl.xml,以及如何根据该文件绘制出对应的流程图。 首先,我们要理解什么是JPDL(Jbpm Process Definition Language)。JPDL是一种基于XML的语言,用于描述Jbpm中的业务...
这个源代码包可能包含了jbpm4的一个简单实现,用于公文流转,即电子化的工作审批流程。公文流转是企业管理中一个关键的环节,通过自动化的方式可以提高效率,减少错误。 jbpm4的核心特性包括: 1. **流程建模**:...
4. **持久化存储**:jbpm使用Hibernate进行数据持久化,将流程实例、任务、变量等信息存储在数据库中,确保数据的可靠性。同时,这也使得jbpm可以与其他ORM框架和数据库系统集成。 5. **事件处理**:jbpm支持事件...