您的位置:首页 > 其它

Activiti入门教程十(详解历史服务组件HistoryService)

2015-09-22 13:10 597 查看

Activiti入门教程十(详解历史服务组件HistoryService)

2015-09-22 13:10
3812人阅读 评论(9)
收藏
举报

本文章已收录于:



Java 知识库



分类:
Java学习(113)




作者同类文章X
Dubbo源码分析(TimeoutFilter、ExceptionFilter、TokenFilter)

Dubbo源码分析(AccessLogFilter)

Dubbo源码分析(Filter)

操作系统知识点汇总

Netty学习笔记—helloWorld

更多

版权声明:本文为博主原创文章,未经博主允许不得转载。

     Activiti在删除流程定义、删除任务和删除流程实例时,均会将删除的数据保存到历史数据中,初次外,已经完成的流程实例以及相关数据,都会保持到历史数据中,如果要对这些数据进行管理的话,就需要用到HistoryService组件了。

     正如上面所说,Activiti在整个流程执行过程中,会把所有相关的信息,都想历史表中保存,因此HistoryService该组件的查询方法特别的丰富,下面小编带大家来见识一下吧!

     历史流程实例查询 

     使用HistoryService的createHistoricProcessInstanceQuery()方法就可以得到HistoricProcessInstanceQuery对象,该对象主要用于流程实例的历史数据查询。对于流程实例,不管流程是否完成,都会保存到ACT_HI_PROCINST表中。

[java]
view plain
copy

print?

<span style="font-family:Comic Sans MS;font-size:18px;">public class ProcessInstanceQuery {  
  
    public static void main(String[] args) throws Exception {  
        // 创建流程引擎  
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
        // 得到流程存储服务实例  
        RepositoryService repositoryService = engine.getRepositoryService();  
        // 得到运行时服务组件  
        RuntimeService runtimeService = engine.getRuntimeService();  
        // 得到历史服务组件  
        HistoryService historyService = engine.getHistoryService();  
        // 部署流程文件  
        Deployment deploy = repositoryService.createDeployment()  
                .addClasspathResource("bpmn/ProcessInstanceQuery.bpmn").deploy();  
        // 查询流程定义   
                ProcessDefinition define = repositoryService  
                        .createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();  
                // 开始流程  
                ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey1");  
                ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey2");  
                // 查询执行流  
                Execution exe1 = runtimeService.createExecutionQuery()  
                        .processInstanceId(pi1.getId()).singleResult();  
                Execution exe2 = runtimeService.createExecutionQuery()  
                        .processInstanceId(pi2.getId()).singleResult();  
4000

                // 完成第一条流程  
                runtimeService.signal(exe1.getId());  
                exe1 = runtimeService.createExecutionQuery()  
                        .processInstanceId(pi1.getId()).singleResult();  
                runtimeService.signal(exe1.getId());  
                // 查询已完成的流程  
                List<HistoricProcessInstance> datas = historyService  
                        .createHistoricProcessInstanceQuery().finished().list();  
                System.out.println("使用finished方法:" + datas.size());  
                // 根据流程定义ID查询  
                datas = historyService.createHistoricProcessInstanceQuery()  
                        .processDefinitionId(define.getId()).list();  
                System.out.println("使用processDefinitionId方法: " + datas.size());  
                // 根据流程定义key(流程描述文件的process节点id属性)查询  
                datas = historyService.createHistoricProcessInstanceQuery()  
                        .processDefinitionKey(define.getKey()).list();  
                System.out.println("使用processDefinitionKey方法: " + datas.size());  
                // 根据业务主键查询  
                datas = historyService.createHistoricProcessInstanceQuery()  
                        .processInstanceBusinessKey("businessKey1").list();  
                System.out.println("使用processInstanceBusinessKey方法: " + datas.size());  
                // 根据流程实例ID查询  
                datas = historyService.createHistoricProcessInstanceQuery()  
                        .processInstanceId(pi1.getId()).list();  
                System.out.println("使用processInstanceId方法: " + datas.size());  
                // 查询没有完成的流程实例  
                historyService.createHistoricProcessInstanceQuery().unfinished().list();  
                System.out.println("使用unfinished方法: " + datas.size());  
    }  
}  
</span>  

<span style="font-family:Comic Sans MS;font-size:18px;">public class ProcessInstanceQuery {

public static void main(String[] args) throws Exception {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务实例
RepositoryService repositoryService = engine.getRepositoryService();
// 得到运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 得到历史服务组件
HistoryService historyService = engine.getHistoryService();
// 部署流程文件
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("bpmn/ProcessInstanceQuery.bpmn").deploy();
// 查询流程定义
ProcessDefinition define = repositoryService
.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
// 开始流程
ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey1");
ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey2");
// 查询执行流
Execution exe1 = runtimeService.createExecutionQuery()
.processInstanceId(pi1.getId()).singleResult();
Execution exe2 = runtimeService.createExecutionQuery()
.processInstanceId(pi2.getId()).singleResult();
// 完成第一条流程
runtimeService.signal(exe1.getId());
exe1 = runtimeService.createExecutionQuery()
.processInstanceId(pi1.getId()).singleResult();
runtimeService.signal(exe1.getId());
// 查询已完成的流程
List<HistoricProcessInstance> datas = historyService
.createHistoricProcessInstanceQuery().finished().list();
System.out.println("使用finished方法:" + datas.size());
// 根据流程定义ID查询
datas = historyService.createHistoricProcessInstanceQuery()
.processDefinitionId(define.getId()).list();
System.out.println("使用processDefinitionId方法: " + datas.size());
// 根据流程定义key(流程描述文件的process节点id属性)查询
datas = historyService.createHistoricProcessInstanceQuery()
.processDefinitionKey(define.getKey()).list();
System.out.println("使用processDefinitionKey方法: " + datas.size());
// 根据业务主键查询
datas = historyService.createHistoricProcessInstanceQuery()
.processInstanceBusinessKey("businessKey1").list();
System.out.println("使用processInstanceBusinessKey方法: " + datas.size());
// 根据流程实例ID查询
datas = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(pi1.getId()).list();
System.out.println("使用processInstanceId方法: " + datas.size());
// 查询没有完成的流程实例
historyService.createHistoricProcessInstanceQuery().unfinished().list();
System.out.println("使用unfinished方法: " + datas.size());
}
}
</span>


     历史任务查询

     通过HistoryService的createHistoricTaskInstanceQuery()方法,就可以得到HistoricTaskInstanceQuery对象,主要用来根据查询条件,到历史任务表ACT_HI_TASKINST中查询符合条件的数据。

[java]
view plain
copy

print?

<span style="font-family:Comic Sans MS;font-size:18px;">public class TaskQuery {  
  
    public static void main(String[] args) throws Exception {  
        // 创建流程引擎  
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
        // 得到流程存储服务实例  
        RepositoryService repositoryService = engine.getRepositoryService();  
        // 得到运行时服务组件  
        RuntimeService runtimeService = engine.getRuntimeService();  
        // 得到历史服务组件  
        HistoryService historyService = engine.getHistoryService();  
        // 得到任务组件  
        TaskService taskService = engine.getTaskService();  
        // 部署流程文件  
        Deployment deploy = repositoryService.createDeployment()  
                .addClasspathResource("bpmn/TaskQuery.bpmn").deploy();  
        ProcessDefinition define = repositoryService.createProcessDefinitionQuery()  
                .deploymentId(deploy.getId()).singleResult();  
        // 初始化参数  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        Map<String, Object> vars = new HashMap<String, Object>();  
        vars.put("varDate1", sdf.parseObject("2020-10-10 06:00:00"));  
        vars.put("varDate2", sdf.parseObject("2021-10-10 06:00:00"));  
        //开始流程  
        ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess",   
                "businessKey1", vars);  
        ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess",   
                "businessKey2", vars);  
        //完成流程1  
        Execution exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())  
                .singleResult();  
        runtimeService.signal(exe1.getId());  
        exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())  
                .singleResult();  
        runtimeService.signal(exe1.getId());  
        // 流程2完成一个任务  
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi2.getId()).list();  
        for (Task task : tasks) {  
            taskService.complete(task.getId());  
        }  
        //历史数据查询  
        List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery()  
                .finished().list();  
        System.out.println("使用finished方法查询:" + datas.size());//结果3  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processDefinitionId(define.getId()).list();  
        System.out.println("使用processDefinitionId方法查询:" + datas.size());//结果4  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processDefinitionKey("testProcess").list();  
        System.out.println("使用processDefinitionKey方法查询:" + datas.size());//结果4  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processDefinitionName("testProcess2").list();  
        System.out.println("使用processDefinitionName方法查询:" + datas.size());//结果4  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processFinished().list();  
        System.out.println("使用processFinished方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processInstanceId(pi2.getId()).list();  
        System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .processUnfinished().list();  
        System.out.println("使用processUnfinished方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskAssignee("crazyit").list();  
        System.out.println("使用taskAssignee方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskAssigneeLike("%zy%").list();  
        System.out.println("使用taskAssigneeLike方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskDefinitionKey("usertask1").list();  
        System.out.println("使用taskDefinitionKey方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskDueAfter(sdf.parse("2020-10-11 06:00:00")).list();  
        System.out.println("使用taskDueAfter方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();  
        System.out.println("使用taskDueBefore方法查询:" + datas.size());//结果4  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .taskDueDate(sdf.parse("2020-10-11 06:00:00")).list();  
        System.out.println("使用taskDueDate方法查询:" + datas.size());//结果0  
        datas = historyService.createHistoricTaskInstanceQuery()  
                .unfinished().list();  
        System.out.println("使用unfinished方法查询:" + datas.size());//结果1  
    }  
  
}</span>  

<span style="font-family:Comic Sans MS;font-size:18px;">public class TaskQuery {

public static void main(String[] args) throws Exception {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务实例
RepositoryService repositoryService = engine.getRepositoryService();
// 得到运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 得到历史服务组件
HistoryService historyService = engine.getHistoryService();
// 得到任务组件
TaskService taskService = engine.getTaskService();
// 部署流程文件
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("bpmn/TaskQuery.bpmn").deploy();
ProcessDefinition define = repositoryService.createProcessDefinitionQuery()
.deploymentId(deploy.getId()).singleResult();
// 初始化参数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("varDate1", sdf.parseObject("2020-10-10 06:00:00"));
vars.put("varDate2", sdf.parseObject("2021-10-10 06:00:00"));
//开始流程
ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess",
"businessKey1", vars);
ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess",
"businessKey2", vars);
//完成流程1
Execution exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())
.singleResult();
runtimeService.signal(exe1.getId());
exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())
.singleResult();
runtimeService.signal(exe1.getId());
// 流程2完成一个任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi2.getId()).list();
for (Task task : tasks) {
taskService.complete(task.getId());
}
//历史数据查询
List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery()
.finished().list();
System.out.println("使用finished方法查询:" + datas.size());//结果3
datas = historyService.createHistoricTaskInstanceQuery()
.processDefinitionId(define.getId()).list();
System.out.println("使用processDefinitionId方法查询:" + datas.size());//结果4
datas = historyService.createHistoricTaskInstanceQuery()
.processDefinitionKey("testProcess").list();
System.out.println("使用processDefinitionKey方法查询:" + datas.size());//结果4
datas = historyService.createHistoricTaskInstanceQuery()
.processDefinitionName("testProcess2").list();
System.out.println("使用processDefinitionName方法查询:" + datas.size());//结果4
datas = historyService.createHistoricTaskInstanceQuery()
.processFinished().list();
System.out.println("使用processFinished方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(pi2.getId()).list();
System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.processUnfinished().list();
System.out.println("使用processUnfinished方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.taskAssignee("crazyit").list();
System.out.println("使用taskAssignee方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.taskAssigneeLike("%zy%").list();
System.out.println("使用taskAssigneeLike方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.taskDefinitionKey("usertask1").list();
System.out.println("使用taskDefinitionKey方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.taskDueAfter(sdf.parse("2020-10-11 06:00:00")).list();
System.out.println("使用taskDueAfter方法查询:" + datas.size());//结果2
datas = historyService.createHistoricTaskInstanceQuery()
.taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();
System.out.println("使用taskDueBefore方法查询:" + datas.size());//结果4
datas = historyService.createHistoricTaskInstanceQuery()
.taskDueDate(sdf.parse("2020-10-11 06:00:00")).list();
System.out.println("使用taskDueDate方法查询:" + datas.size());//结果0
datas = historyService.createHistoricTaskInstanceQuery()
.unfinished().list();
System.out.println("使用unfinished方法查询:" + datas.size());//结果1
}

}</span>


     历史行为查询

     流程在进行过程中,每每走一个节点,都会记录流程节点的信息,包括节点的id,名称、类型、时间等,保存到ACT_HI_ACTINST表中。

[java]
view plain
copy

print?

<span style="font-family:Comic Sans MS;font-size:18px;">public class ActivityQuery {  
  
  
    public static void main(String[] args) {  
        // 创建流程引擎  
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
        // 得到流程存储服务实例  
        RepositoryService repositoryService = engine.getRepositoryService();  
        // 得到运行时服务组件  
        RuntimeService runtimeService = engine.getRuntimeService();  
        // 得到历史服务组件  
        HistoryService historyService = engine.getHistoryService();  
        // 任务组件  
        TaskService taskService = engine.getTaskService();  
        // 部署流程文件  
        repositoryService.createDeployment()  
                .addClasspathResource("bpmn/ActivityQuery.bpmn").deploy();            
        // 开始两条流程  
        ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess");  
        ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess");  
        // 结束第一个流程实例  
        Execution exe = runtimeService.createExecutionQuery()  
                .processInstanceId(pi1.getId()).singleResult();  
        runtimeService.signal(exe.getId());  
        runtimeService.signalEventReceived("mySignal");  
        // 第二个流程实例完成第一个任务  
        Task task = taskService.createTaskQuery().processInstanceId(pi2.getId()).singleResult();  
        taskService.complete(task.getId());   
        //查询数据  
        List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery()  
                .activityId("endevent1").list();  
        System.out.println("使用activityId查询:" + datas.size());//结果1  
        datas = historyService.createHistoricActivityInstanceQuery()  
                .activityInstanceId(datas.get(0).getId()).list();  
        System.out.println("使用activityInstanceId查询:" + datas.size());//结果1  
        datas = historyService.createHistoricActivityInstanceQuery()  
                .activityType("intermediateSignalCatch").list();  
        System.out.println("使用activityType查询:" + datas.size());//结果2  
        datas = historyService.createHistoricActivityInstanceQuery()  
                .executionId(exe.getId()).list();  
        System.out.println("使用executionId查询:" + datas.size());//结果3  
        datas = historyService.createHistoricActivityInstanceQuery().finished().list();  
        System.out.println("使用finished查询:" + datas.size());//结果6  
        datas = historyService.createHistoricActivityInstanceQuery()  
                .processInstanceId(pi2.getId()).list();  
        System.out.println("使用processInstanceId查询:" + datas.size());//结果3  
        datas = historyService.createHistoricActivityInstanceQuery()  
                .taskAssignee("crazyit").list();  
        System.out.println("使用taskAssignee查询:" + datas.size());//结果2  
        datas = historyService.createHistoricActivityInstanceQuery().unfinished().list();  
        System.out.println("使用unfinished查询:" + datas.size());//结果1  
    }  
  
}  
</span>  

<span style="font-family:Comic Sans MS;font-size:18px;">public class ActivityQuery {

public static void main(String[] args) {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务实例
RepositoryService repositoryService = engine.getRepositoryService();
// 得到运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 得到历史服务组件
HistoryService historyService = engine.getHistoryService();
// 任务组件
TaskService taskService = engine.getTaskService();
// 部署流程文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/ActivityQuery.bpmn").deploy();
// 开始两条流程
ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess");
ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess");
// 结束第一个流程实例
Execution exe = runtimeService.createExecutionQuery()
.processInstanceId(pi1.getId()).singleResult();
runtimeService.signal(exe.getId());
runtimeService.signalEventReceived("mySignal");
// 第二个流程实例完成第一个任务
Task task = taskService.createTaskQuery().processInstanceId(pi2.getId()).singleResult();
taskService.complete(task.getId());
//查询数据
List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery()
.activityId("endevent1").list();
System.out.println("使用activityId查询:" + datas.size());//结果1
datas = historyService.createHistoricActivityInstanceQuery()
.activityInstanceId(datas.get(0).getId()).list();
System.out.println("使用activityInstanceId查询:" + datas.size());//结果1
datas = historyService.createHistoricActivityInstanceQuery()
.activityType("intermediateSignalCatch").list();
System.out.println("使用activityType查询:" + datas.size());//结果2
datas = historyService.createHistoricActivityInstanceQuery()
.executionId(exe.getId()).list();
System.out.println("使用executionId查询:" + datas.size());//结果3
datas = historyService.createHistoricActivityInstanceQuery().finished().list();
System.out.println("使用finished查询:" + datas.size());//结果6
datas = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(pi2.getId()).list();
System.out.println("使用processInstanceId查询:" + datas.size());//结果3
datas = historyService.createHistoricActivityInstanceQuery()
.taskAssignee("crazyit").list();
System.out.println("使用taskAssignee查询:" + datas.size());//结果2
datas = historyService.createHistoricActivityInstanceQuery().unfinished().list();
System.out.println("使用unfinished查询:" + datas.size());//结果1
}

}
</span>


历史流程明细查询

在流程进行的过程中,会产生许多明细数据,只有将History设置为最高级别的时候,才会被记录到ACT_HI_DETAIL表中。

[java]
view plain
copy

print?

<span style="font-family:Comic Sans MS;font-size:18px;">public class DetailQuery {  
  
    public static void main(String[] args) {  
        // 创建流程引擎  
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
        // 得到流程存储服务实例  
        RepositoryService repositoryService = engine.getRepositoryService();  
        // 得到运行时服务组件  
        RuntimeService runtimeService = engine.getRuntimeService();  
        // 得到历史服务组件  
        HistoryService historyService = engine.getHistoryService();  
        // 得到任务组件  
        TaskService taskService = engine.getTaskService();  
        // 部署流程文件  
        repositoryService.createDeployment()  
            .addClasspathResource("bpmn/DetailQuery.bpmn").deploy();  
        // 初始化参数  
        Map<String, Object> vars = new HashMap<String, Object>();  
        vars.put("days", 10);  
        //  开始流程  
        ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", vars);  
        ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", vars);  
        // 完成第一个流程   
        Execution exe = runtimeService.createExecutionQuery()  
                .processInstanceId(pi1.getId()).singleResult();  
        Task task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();  
        taskService.complete(task.getId(), vars);  
        exe = runtimeService.createExecutionQuery().processInstanceId(pi1.getId()).singleResult();  
        runtimeService.signal(exe.getId());  
        // 为第二个流程的第一个任务设置参数  
        exe = runtimeService.createExecutionQuery().processInstanceId(pi2.getId()).singleResult();  
        task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();  
        taskService.setVariableLocal(task.getId(), "name", "crazyit");  
        // 查询历史行为  
        HistoricActivityInstance act = historyService.createHistoricActivityInstanceQuery()  
                .activityName("First Task").finished().singleResult();  
        List<HistoricDetail> datas = historyService.createHistoricDetailQuery()  
                .activityInstanceId(act.getId()).list();  
        System.out.println("使用activityInstanceId方法查询:" + datas.size());//结果1  
        datas = historyService.createHistoricDetailQuery().excludeTaskDetails().list();  
        System.out.println("使用excludeTaskDetails方法查询:" + datas.size());//结果3  
        datas = historyService.createHistoricDetailQuery().formProperties().list();  
        System.out.println("使用formProperties方法查询:" + datas.size());//结果0  
        datas = historyService.createHistoricDetailQuery().processInstanceId(pi1.getId()).list();  
        System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2  
        datas = historyService.createHistoricDetailQuery().taskId(task.getId()).list();  
        System.out.println("使用taskId方法查询:" + datas.size());//结果1  
        datas = historyService.createHistoricDetailQuery().variableUpdates().list();  
        System.out.println("使用variableUpdates方法查询:" + datas.size());//结果4  
    }  
  
}  
</span>  

<span style="font-family:Comic Sans MS;font-size:18px;">public class DetailQuery {

public static void main(String[] args) {
// 创建流程引擎
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 得到流程存储服务实例
RepositoryService repositoryService = engine.getRepositoryService();
// 得到运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 得到历史服务组件
HistoryService historyService = engine.getHistoryService();
// 得到任务组件
TaskService taskService = engine.getTaskService();
// 部署流程文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/DetailQuery.bpmn").deploy();
// 初始化参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 10);
//  开始流程
ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", vars);
ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", vars);
// 完成第一个流程
Execution exe = runtimeService.createExecutionQuery()
.processInstanceId(pi1.getId()).singleResult();
Task task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();
taskService.complete(task.getId(), vars);
exe = runtimeService.createExecutionQuery().processInstanceId(pi1.getId()).singleResult();
runtimeService.signal(exe.getId());
// 为第二个流程的第一个任务设置参数
exe = runtimeService.createExecutionQuery().processInstanceId(pi2.getId()).singleResult();
task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();
taskService.setVariableLocal(task.getId(), "name", "crazyit");
// 查询历史行为
HistoricActivityInstance act = historyService.createHistoricActivityInstanceQuery()
.activityName("First Task").finished().singleResult();
List<HistoricDetail> datas = historyService.createHistoricDetailQuery()
.activityInstanceId(act.getId()).list();
System.out.println("使用activityInstanceId方法查询:" + datas.size());//结果1
datas = historyService.createHistoricDetailQuery().excludeTaskDetails().list();
System.out.println("使用excludeTaskDetails方法查询:" + datas.size());//结果3
datas = historyService.createHistoricDetailQuery().formProperties().list();
System.out.println("使用formProperties方法查询:" + datas.size());//结果0
datas = historyService.createHistoricDetailQuery().processInstanceId(pi1.getId()).list();
System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2
datas = historyService.createHistoricDetailQuery().taskId(task.getId()).list();
System.out.println("使用taskId方法查询:" + datas.size());//结果1
datas = historyService.createHistoricDetailQuery().variableUpdates().list();
System.out.println("使用variableUpdates方法查询:" + datas.size());//结果4
}

}
</span>




顶 0 踩 0
 
 
上一篇Activiti入门教程九(玩转RuntimeService流程控制API)

下一篇'sessionFactory' or 'hibernateTemplate' is required

  相关文章推荐


Activiti入门教程十一(来杯流程喝喝吧)

jBPM4.4:HistoryService历史服务

Activiti入门教程五(详解ProcessEngine的创建)

HTML5历史与开发介绍-HTML5 入门教程

Activiti入门教程三(详解流程引擎配置)

Java API——RMIIO入门教程(2)远程流传输示例之RMIIO服务源码

Activiti入门教程六(详解Activiti中的查询API)

Flex 3入门教程: 在 MXML 中构建自定义组件

Google Guice 入门教程08 - 整合第三方组件(2)

Activiti入门教程八(玩转Task任务API)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: