package com.nantian.jbpm.utils;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.junit.Before;
public class BaseJbpm {
public static ProcessEngine processEngine;
@Before
public void testBase(){
this.processEngine = Configuration.getProcessEngine();
}
}
package com.nantian.jbpm.pi;
import java.util.List;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.history.HistoryTask;
import org.jbpm.api.task.Task;
import org.junit.Test;
import com.nantian.jbpm.utils.BaseJbpm;
/**
* 流程实例
* * 启动流程实例
* * 完成任务
* * 查询
* * 查询流程实例
* * 查询任务
* * 查询正在执行的任务
* * 查询所有的正在执行的任务
* * 根据任务的执行人查询正在执行的任务
* * 根据executionId查询正在执行的任务
* * 根据piid查询正在执行的任务
* * 根据pdid查询正在执行的任务
* * 根据taskid查询任务 taskService.getTask(String taskId);和其他的查询不一样
* * 查询已经完成的任务
* * 查询所有的
* * 根据任务的执行人
* * 根据executionID
* * .......
* * 结束流程实例
* @author Administrator
*
*/
public class PITest extends BaseJbpm{
/**
* 涉及到的表
* * JBPM4_EXECUTION
* * 表示当前正在执行的流程实例
* * 字段
* DBID_:主键
* ID_:流程实例ID
* ACTIVITYNAME_:当前流程实例活跃的节点
* PROCDEFID_:流程定义ID
* * JBPM4_HIST_PROCINST
* * 表示历史的流程实例,但是当前正在运行的流程实例也在这里
* * 字段
* DBID_:主键
* ID_:流程实例ID
* START_:整个流程实例的开始时间
* END_:流程实例的结束时间,如果该流程实例为当前正在运行的流程则,该值为空
* STATE:表示流程实例的状态 如果是正在运行,为active 如果流程实例结束 为ended
* * JBPM4_TASK
* * 表示当前正在执行的任务
* 说明:任务是jbpm流程图的一个节点
* * 字段
* DBID_:主键、任务ID
* NAME_:任务名称
* ASSIGNEE_:任务的执行人
* * JBPM4_HIST_TASK
* * 表示历史的任务,但是当前正在执行的任务也在这里
* * 字段
* STATE_:如果一个任务被完成以后,值为completed
* end_:任务的结束时间有值了
* * JBPM4_HIST_ACTINST
* * 表示历史的节点
* * 字段
* TYPE_:节点类型
* 说明:
* * 当启动流程实例的时候,会自动的离开开始节点,流向下一个节点
* * jbpm4_task为临时表,当当前的任务完成以后,该数据就被删除了
*/
@Test
public void testStartPIByPDID(){
ProcessInstance pi = processEngine.getExecutionService()
.startProcessInstanceById("qingjia-1");
System.out.println(pi.getId());
System.out.println(pi.getState());
}
/**
* 根据pdkey启动流程实例,是该key下,最高版本
*/
@Test
public void testStartPIByPDKEY(){
processEngine.getExecutionService()
.startProcessInstanceByKey("qingjia1");
}
/**
* 完成任务
*/
@Test
public void testFinishTask(){
processEngine.getTaskService()
.completeTask("130001");
}
/**
* 查询所有的流程实例
*/
@Test
public void testQueryAllPI(){
List<ProcessInstance> piList = processEngine.getExecutionService()
.createProcessInstanceQuery()
///.processDefinitionId("")//可以根据pdid查询流程实例,很多个
.list();
for(ProcessInstance pi:piList){
/**
* 可以查询piid,pdid,state等
*/
}
}
/**
* 查询所有的正在执行的任务
*/
@Test
public void testQueryAllTask(){
List<Task> taskList = processEngine.getTaskService()
.createTaskQuery()
//.processDefinitionId("")
.list();
for(Task task:taskList){
System.out.println("assignee:"+task.getAssignee());
System.out.println("name:"+task.getName());
System.out.println("createtime:"+task.getCreateTime());
}
}
/**
* 可以根据任务的执行人查询当前正在执行的任务
* 可以根据pdid查询当前正在执行的任务
*/
@Test
public void testQueryTaskByPDID(){
List<Task> taskList = processEngine.getTaskService()
.createTaskQuery()
.processDefinitionId("qingjia1-4")
.list();
System.out.println(taskList.size());
}
/**
* Execution
* * 如果不存在并发的情况,那么exection和process instance是一样的
* * 如果存在并发的情况,execution代表分支,process instance代表主线
* * 根据executionID查询任务,有唯一的一个
*/
@Test
public void testQueryTaskByTaskID(){
Task task = processEngine.getTaskService()
.getTask("100002");
System.out.println(task.getName());
}
/**
* 查询已经完成的所有的任务
*/
@Test
public void testQueryAllHistTask(){
List<HistoryTask> histTaskList = processEngine.getHistoryService()
.createHistoryTaskQuery()
//.assignee("") 可以根据任务的执行人查询已经完成的任务
//.executionId("")可以根据executionID查询已经完成的任务
.state("completed")
.list();
for(HistoryTask histTask:histTaskList){
System.out.println(histTask.getEndTime());
}
}
/**
* 直接结束流程实例
*/
@Test
public void testEndPI(){
processEngine.getExecutionService()
.endProcessInstance("qingjia.70001", "error");
}
/**
* 根据 piid查询流程实例,如果查询出来的结果为null,说明该流程实例已经结束了
*/
@Test
public void testIsEndPI(){
ProcessInstance pi = processEngine.getExecutionService()
.createProcessInstanceQuery()
.processInstanceId("qingjia.70001")
.uniqueResult();
System.out.println(pi);//如果该值为null,说明该流程实例已经结束了
}
}
相关推荐
1. **启动流程**:调用jBPM API启动流程实例,传入初始参数。 2. **任务管理**:查询待办任务,完成任务,或者通过API进行任务的分配和操作。 3. **流程监控**:通过日志、报表或监控工具查看流程执行状态,进行...
6. **工作流引擎的使用**:jbpm4提供API来启动流程实例、分配任务、完成任务、查询流程状态等。在实例代码中,我们需要了解如何通过这些API与工作流引擎交互。 7. **持久化管理**:jbpm4使用Hibernate作为默认的...
5. **启动流程实例**:通过API或用户界面启动流程实例,指定初始输入数据,流程就会按照定义开始运行。 6. **处理任务**:审批人通过工作流客户端接收并处理任务,他们的决策将影响流程的走向。在会签实例中,每个...
流程实例是工作流定义的实际运行实体,而执行服务则负责启动、暂停、恢复或结束流程实例。 报销流程通常涉及以下几个步骤:员工提交报销单,部门经理审批,财务审核,以及最后的支付。在JBPM中,这些步骤可以被设计...
7. **流程实例管理**:项目还可能包含启动新流程实例、查询现有实例、终止或挂起流程的功能。这些操作体现了jbpm对流程实例生命周期的控制。 8. **业务规则和事件处理**:jbpm支持与业务规则引擎(如Drools)集成,...
3. **启动流程实例**:通过API或用户界面触发流程实例的启动,流程引擎会自动根据定义执行流程。 4. **任务处理**:系统会根据流程定义分配任务给相应角色的用户,用户通过任务列表完成任务并推动流程前进。 5. **...
【jbpm+SSH实例(报销流程)】 在IT领域,工作流管理系统(Workflow Management System,简称WfMS)是用于自动化业务流程的关键工具。其中,jbpm(Business Process Management)是一个开源的工作流引擎,它提供了从...
在jbpm的开发中,你会遇到流程定义、流程实例的启动和执行、任务的分配和完成、流程变量的管理和查询等功能。例如,你可以使用jPDL定义一个请假流程,其中包含申请、审批和销假等步骤。流程的执行可以通过jbpm提供的...
这个经典的jbpm实例提供了一个已经配置好的环境,可以直接在Tomcat应用服务器上部署,并能在MyEclipse集成开发环境中导入使用,极大地简化了开发者的学习和开发流程。 一、jbpm简介 jbpm是一个基于Java的流程引擎,...
创建一个JUnit测试类,例如"SimpleProcessTest.java",初始化jbpm运行时环境,启动流程实例,并检查流程执行的结果。 最后,为了让流程实例能在实际应用中运行,你需要将jbpm项目打包成WAR或EAR文件,部署到应用...
源码中会包含如何启动新的流程实例,以及如何跟踪和管理这些实例。 6. **变量(Variables)**:在流程执行过程中,可以定义并操作变量,用于存储流程状态和数据。查看源码,你将了解如何设置和获取变量值。 7. **...
在员工请假流程中,可能会有处理请假申请的服务类,负责与Jbpm引擎交互,启动流程实例,以及处理审批结果。 `config`目录可能包含了配置文件,如数据库连接配置、Jbpm配置等。这些配置文件是Jbpm运行时不可或缺的,...
3. **流程实例(Process Instance)**:当流程定义被启动时,就会创建一个流程实例。每个实例都有唯一的ID,对应着一个具体的流程执行路径。 4. **任务(Task)**:任务是流程中的工作单元,可以分配给用户或角色...
- **编写代码**:集成JBPM4 API到Java应用中,控制流程实例的启动、暂停、恢复和终止,以及任务的分配和完成。 - **监控与管理**:通过JBPM4提供的管理界面,查看流程实例的状态,跟踪任务进度,进行审计和报表分析...
2. **流程实例数据(.process)**:当流程启动时,Jbpm会创建一个实例,保存流程状态和相关数据。 3. **部署文件(.bar)**:包含流程定义和其他资源,用于部署到Jbpm服务器。 4. **Java代码**:实现流程启动、查询...
【JBPM4.0经典实例】是一个以JBPM4.0为核心技术的毕业设计管理系统,该系统涵盖了两个关键的工作流程,即毕业设计选题出题流程和毕业设计提交流程。JBPM(Java Business Process Management)是一款开源的工作流管理...
6. **启动实例**:创建新的工作流实例,模拟请假审批流程的启动。 7. **任务操作**:编写代码或者使用jbpm提供的工具来处理流程中的任务,比如分配任务、领取任务、完成任务等。 8. **监控与调试**:观察流程实例的...
jbpm支持事件监听,比如流程启动、结束、任务完成等。在实例中,我们可能会看到如何定义和处理这些事件,以实现更精细的流程控制。 8. **监控与审计** jbpm提供了一套强大的监控和审计功能,可以实时查看流程实例...
5. **启动流程实例**:当需要执行某个流程时,通过`RuntimeService`的`startProcessInstanceByKey()`方法,传入流程定义的key来启动新的流程实例。 6. **处理任务**:流程执行过程中会产生待办任务(Task)。用户或...
在描述中提到的"jbpm开发的小例子",可能是一个小型的流程管理系统,涵盖了jbpm的基本操作,例如创建流程定义、启动流程实例、分配和完成任务、查询流程状态等。这个实例通常会包含以下关键组件: 1. **流程模型**...