判断流程实例状态、历史流程实例查询、历史活动查询
标签(空格分隔): activiti
1.判断流程实例状态
下面是一个示例代码:
/**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文本
*/
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
*/
@Test
public void deploy(){
Deployment deployment=processEngine.getRepositoryService()//获取部署相关Service
.createDeployment() //创建部署对象
.addClasspathResource("diagrams/HelloWorld.bpmn") //加载资源文件
.addClasspathResource("diagrams/HelloWorld.png")
.name("HelloWorld流程")
.deploy(); //部署
System.out.println("流程部署ID:"+deployment.getId());
System.out.println("流程部署Name:"+deployment.getName());
}
上述代码首先部署了流程,接下来启动流程实例:
@Test
public void start() {
ProcessInstance pi=processEngine.getRuntimeService()//运行时Service
.startProcessInstanceByKey(“myFirstProcess”);//流程定义表的KEY字段
System.out.println(“流程实例ID:”+pi.getId());
System.out.println(“流程定义ID:”+pi.getProcessDefinitionId());
}
启动后可得到这个启动的流程的流程实例ID,最后就是我们本次讨论的查询流程实例状态:
/**
* 查询流程实例状态
*
*/
@Test
public void processState(){
ProcessInstance pi=processEngine.getRuntimeService() //获取运行时service
.createProcessInstanceQuery() //创建流程实例查询
.processInstanceId("37501") //用流程实例id查询
.singleResult();
if(pi != null){
System.out.println("流程正在执行!");
}
else{
System.out.println("流程已经结束!");
}
}
通过查询流程实例ID来查询对应的流程实例,如果流程实例不为空,则说明流程正在执行,如果流程实例为空,说明流程已经结束,和流程结束后,所有运行时的表都被清空有关。
2.历史流程实例(任务)查询
/**
* 查询历史任务
*
*/
@Test
public void historyTaskList(){
List list=processEngine.getHistoryService() //历史相关service
.createHistoricTaskInstanceQuery() //创建历史任务实例查询
.processInstanceId(“12504”) //用流程实例id查询
.finished() //查询已经完成的任务
.list();
for(HistoricTaskInstance hti:list){
System.out.println("任务ID:"+hti.getId());
System.out.println("流程实例ID:"+hti.getProcessInstanceId());
System.out.println("任务名称:"+hti.getName());
System.out.println("办理人:"+hti.getAssignee());
System.out.println("开始时间:"+hti.getStartTime());
System.out.println("结束时间:"+hti.getEndTime());
}
}
上述代码查询流程的所有任务信息。
3。历史活动查询
代码如下:
/**
* 历史活动查询
*
*/
@Test
public void historyActInstanceList(){
List list=processEngine.getHistoryService() //历史相关service
.createHistoricActivityInstanceQuery() //创建历史活动实例查询
.processInstanceId(“12504”) //用流程实例id查询
.finished() //查询已经完成的任务
.list();
for(HistoricActivityInstance hai:list){
System.out.println("活动ID:"+hai.getId());
System.out.println("流程实例ID:"+hai.getProcessInstanceId());
System.out.println("活动名称:"+hai.getActivityName());
System.out.println("办理人:"+hai.getAssignee());
System.out.println("开始时间:"+hai.getStartTime());
System.out.println("结束时间:"+hai.getEndTime());
}
}
活动包括任务,还包括start,end这两个节点,所以输出内容更多。
这几个工作流的查询接口都是去工作流表中进行查询的。