判断流程实例状态、历史流程实例查询、历史活动查询

判断流程实例状态、历史流程实例查询、历史活动查询

标签(空格分隔): 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这两个节点,所以输出内容更多。

这几个工作流的查询接口都是去工作流表中进行查询的。

猜你喜欢

转载自blog.csdn.net/u013985662/article/details/73729789