相关文章

更多

最近更新

更多

Activiti入门程序-查看历史实例信息

2019-03-24 22:37|来源: 网路

HistoryService:查询历史信息的服务。在一个流程执行完成后,这个对象为我们提供查询历史信息。


历史实例查询包括:
1、历史流程实例查询 HistoricProcessInstanceQuery
HistoricProcessInstanceQuery hpiQuery = service.createHistoricProcessInstanceQuery();
2、查看历史活动实例 HistoricActivityInstanceQuery
HistoricActivityInstanceQuery haiq=service.createHistoricActivityInstanceQuery();
3、查看历史任务实例 HistoricTaskInstanceQuery
HistoricTaskInstanceQuery htiq = service.createHistoricTaskInstanceQuery();
以上历史实例对象可以设置流程定义的key或ID、人员、排序、分页查询等。获取相关历史流程的信息


实例:以下是刚启动了流程执行的结果

查看历史流程实例:

/** 查看历史流程实例 */
@Test
public void queryHistoricProcessInstanceTest() throws Exception {
    HistoryService service = processEngine.getHistoryService();
 
    // 获取历史流程实例的查询对象
    HistoricProcessInstanceQuery hpiQuery = service.createHistoricProcessInstanceQuery();
    // 设置流程定义KEY
    hpiQuery.processDefinitionKey("hello");
    // 分页条件
    //hpiQuery.listPage(firstResult, maxResults);
    // 排序
    hpiQuery.orderByProcessInstanceStartTime().desc();
 
    // 执行查询
    List<HistoricProcessInstance> hpis = hpiQuery.list();
    // 遍历查看结果
    for (HistoricProcessInstance hpi : hpis) {
        System.out.print("pid:" + hpi.getId() + ",");
        System.out.print("pdid:" + hpi.getProcessDefinitionId() + ",");
        System.out.print("startTime:" + hpi.getStartTime() + ",");
        System.out.print("endTime:" + hpi.getEndTime() + ",");
        System.out.print("duration:" + hpi.getDurationInMillis() + ",");
        System.out.println("vars:" + hpi.getProcessVariables());
    }
}

pid:2501,pdid:hello:1:4,startTime:Thu Mar 24 20:43:07 CST 2016,endTime:null,duration:null,vars:{}


查看历史活动实例


/** 查看历史活动实例 */
@Test
public void queryHistoricActivityInstanceTest() throws Exception {
    HistoryService service = processEngine.getHistoryService();
    HistoricActivityInstanceQuery haiq=service.createHistoricActivityInstanceQuery();
    //过滤条件
    haiq.processInstanceId("2501");
    // 分页条件
    //haiq.listPage(firstResult, maxResults);
    //排序
    haiq.orderByHistoricActivityInstanceEndTime().asc();
    List<HistoricActivityInstance> hais = haiq.list();
 
    for (HistoricActivityInstance hai : hais) {
        System.out.print("activitiId:" + hai.getActivityId() + ",");
        System.out.print("name:" + hai.getActivityName() + ",");
        System.out.print("type:" + hai.getActivityType() + ",");
        System.out.print("pid:" + hai.getProcessInstanceId() + ",");
        System.out.print("assignee:" + hai.getAssignee() + ",");
        System.out.print("startTime:" + hai.getStartTime() + ",");
        System.out.print("endTime:" + hai.getEndTime() + ",");
        System.out.println("duration:" + hai.getDurationInMillis());
    }
}

activitiId:usertask1,name:提交申请,type:userTask,pid:2501,assignee:张三,startTime:Thu Mar 24 20:43:07 CST 2016,endTime:null,duration:null
activitiId:startevent1,name:Start,type:startEvent,pid:2501,assignee:null,startTime:Thu Mar 24 20:43:07 CST 2016,endTime:Thu Mar 24 20:43:07 CST 2016,duration:16


查看历史任务实例


/** 查看历史任务实例 */
@Test
public void queryHistoricTaskInstanceTest() throws Exception {
    HistoryService service = processEngine.getHistoryService();
    HistoricTaskInstanceQuery htiq = service.createHistoricTaskInstanceQuery();
    htiq.taskAssignee("张三");
    List<HistoricTaskInstance> tasks = htiq.list();
 
    for (HistoricTaskInstance hti : tasks) {
        System.out.print("pid:" + hti.getProcessInstanceId() + ",");
        System.out.print("assignee:" + hti.getAssignee() + ",");
        System.out.print("startTime:" + hti.getStartTime() + ",");
        System.out.print("endTime:" + hti.getEndTime() + ",");
        System.out.println("duration:" + hti.getDurationInMillis());
    }
}

pid:2501,assignee:张三,startTime:Thu Mar 24 20:43:07 CST 2016,endTime:null,duration:null

示例程序参考于网络


相关问答

更多

java从入门到精通实例版

每次看到这种java从入门到精通的书籍,我都会想,世界上真的有这种书吗?所以只要这样取名的书籍我从来不看,没有意思,另外说到书籍,国内的java入门书籍好一点的真少,我推荐java核心技术第九版,共两卷,有源码,这种书才是好书中的好书。 不好意思,这里只能上传一卷

入门的java游戏小程序

猜数字 import java.util.Scanner; public class Guess{ public static void main(String[] args){ int x = (int)(Math.random()*10);//从0~9中随机生成一个数 Scanner in = new Scanner(System.in); int input = in.nextInt();//玩家输入 if(input == x) System.out.println("correct!") ...

activiti 多实例任务流转信息为什么不显示

设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表); 任务主要有:人工任务(usertask),服务任务(servicetask)等; 候选人/候选组(candidate):可以执行任务的一类人或者多个组,候选人/候选组中都可以去签收任务,一旦某人签收,就成为受理人,其他人就不能再签收受理此任务;usertask流程图中,candidate标示候选;候选人涉及的表ACT_RU_IDENTITYLINK; 受理人(assignee):有两种情 ...

LINUX平台下,如何查看系统信息和装载驱动程序

显卡安装: 一、下载驱动程序 首先要找到显卡for Linux的驱动程序。现在绝大多数的3D显卡都已有了for Linux的驱动程序,可到各显卡厂商的主页或Linux的相关站点上去寻找。在安装显卡时,服务器根据显卡的情况来加载不同的显示模块,如果显示模块加载不正确,显卡就不能正常显示。 二、装载磁盘驱动器 Linux需要装载磁盘驱动器才能读取文件。启动Linux后,在字符界面下输入“mount -t vfat /dev/hda1 /mnt/winc”命令,将C盘装载到Linux下。需要注意的是,如 ...

具有空集合的每个循环的activiti多实例(activiti multi-instance for each loop with empty collection)

使用标准的Activiti功能无法解决此问题。 所以唯一的选择是使用网关或Java服务任务与实现ActivityBehaviour (不推荐)的类来控制序列流。 我更喜欢使用exclusiveGateway 。 查看此链接以获取更多信息: 在Activiti官方论坛上讨论 MultiInstanceActivityBehavior.java - int resolveNrOfInstances(ActivityExecution execution) ParallelMultiInstanceBe ...

有没有办法在Activiti流程定义中获取任务而无需创建流程实例?(Is there a way to get tasks in Activiti process definition without creating a process instance?)

您可以使用RepositoryService接口中提供的getBpmnModel(processDefinitionId)方法。 结果是一个Pojo,您可以使用它来反省过程。 最初的pojo代表模型,它可以有多个进程(但通常只有一个)。 从给定的Process,您可以使用findFlowElementsOfType(类类型)查找所有任务。 例如,这个代码片段应该为您提供一个进程中的UserTasks列表(未经过测试,但应该让您知道需要什么): BpmnModel model = processEn ...

startProcessInstanceByKey无法在activiti套件中工作(alfresco activiti enterprise)(startProcessInstanceByKey not working in activiti suite (alfresco activiti enterprise))

如果您非常确定您的alfresco activiti引擎指向与您的activiti explorer引擎相同的数据库,那么它可能是您部署过程中的问题。 打开文件并仔细检查您的流程定义: <process id="TTSProcess" name="TTS Process name" isExecutable="true"> ... </process> 重要的属性是id =“ TTSProcess ”,这就是activiti作为API的关键所在 runtimeService.startProce ...

Activiti REST API:完整的流程实例(Activiti REST API: complete process instance)

也许我遗漏了一些东西,但在最后一个任务完成后,该过程将正常结束,并且在/ runtime / process-instances列表中不再可见。 现在,您提到使用Terminate End Event完成实例,Terminate End事件将完成实例但不会设置“complete”标志。 终止通常用于取消正在运行的进程。 您应该使用常规结束事件而不是终止,这应该设置完整标志。 再说一次,也许我在你的描述中遗漏了一些东西。 谢谢格雷格 Perhaps I am missing something, b ...