zoukankan      html  css  js  c++  java
  • 工作流笔记第三天_流程实例

    0、流程实例的表

    -- 流程实例,执行对象,任务
    -- 1、解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。
    select * FROM act_ru_execution; -- 正在执行的执行对象表
    select * FROM act_hi_procinst; -- 流程实例的历史表
    select * FROM act_ru_task; -- 正在执行的任务表(只有节点是UserTask的时候,该表中存在数据)
    select * FROM act_hi_taskinst; -- 任务历史表(只有节点是UserTask的时候,该表中存在数据)
    select * FROM act_hi_actinst; -- 所有活动节点的历史表

    1、结论:

    (1)如果是单例流程(没有分支和聚合),那么流程实例ID和执行对象ID是相同的;

    (2)一个流程实例只有一个,执行对象可以有多个

    代码实现:

    package itheima.processDefinition;

    import java.io.InputStream;
    import java.util.List;
    import java.util.zip.ZipInputStream;

    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.history.HistoricProcessInstance;
    import org.activiti.engine.history.HistoricTaskInstance;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.task.Task;
    import org.junit.Test;

    public class ProcessInstance {
    // 获得工作流引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /* 部署流程定义(从zip中部署流程定义)

    把helloWord.bpmn和helloWord.png压缩成helloWord.zip放在src/main/resources/diagrams文件夹下

    */
    @Test
    public void deloymentProcessDefinitionFromZip() {
    // 根据反射获取zip文件转换成对应的流
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
    // 创建流对象
    ZipInputStream zipInputStream = new ZipInputStream(in);
    // 部署对象
    Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
    .createDeployment()// 创建部署对象
    .name("helloWord入门程序")// 添加部署名称
    .addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
    .deploy();// 完成部署;
    System.out.println("部署id:" + deploy.getId());
    System.out.println("部署名称:" + deploy.getName());
    }

    /* 启动流程实例 */
    @Test
    public void startProcessInstance() {
    // 流程定义的key
    String processDefinitionKey = "helloWord";
    org.activiti.engine.runtime.ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
    .startProcessInstanceByKey(processDefinitionKey);
    // 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
    System.out.println("流程实例id:" + processInstance.getId());
    System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
    }

    /* 完成我的任务 */
    @Test
    public void completeMyTask() {
    // 任务id
    String taskId = "1002";
    processEngine.getTaskService()// 获取与正在执行任务的service
    .complete(taskId);
    System.out.println("完成任务,任务编号是:" + taskId);
    }

    /* 查询当前人的个人任务 */
    @Test
    public void findMyPersonalTask() {
    String assignee = "王五";
    List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
    .createTaskQuery()// 创建任务查询对象
    .taskAssignee(assignee)// 指定个人任务查询,指定办理人
    // .taskCandidateUser(candidateUser)//组任务的办理人查询
    // .processDefinitionId("helloWord:1:704")// 按照流程定义id查询
    // .executionId("801")//按照执行对象id查询
    // .processInstanceId("801")// 流程实例id查询
    .orderByTaskCreateTime().asc()// 按照任务创建时间的升序排列
    // .singleResult()//唯一结果集
    .list(); // 返回结果集列表
    if (list != null && list.size() > 0) {
    for (Task task : list) {
    System.out.println("任务id:" + task.getId());
    System.out.println("任务名称:" + task.getName());
    System.out.println("任务的创建时间:" + task.getCreateTime());
    System.out.println("任务的办理人:" + task.getAssignee());
    System.out.println("流程实例id:" + task.getProcessInstanceId());
    System.out.println("执行对象id:" + task.getExecutionId());
    System.out.println("流程定义id:" + task.getProcessDefinitionId());
    }
    }
    }

    /* 查询流程状态(判断流程正在执行还是已经结束) */
    @Test
    public void isProcessEnd() {
    String processInstanceId = "801";
    org.activiti.engine.runtime.ProcessInstance singleResult = processEngine.getRuntimeService()
    .createProcessInstanceQuery()// 创建流程实例查询对象
    .processInstanceId(processInstanceId)// 根据流程实例id查询
    .singleResult();// 返回唯一结果集
    if (singleResult != null) {
    System.out.println("流程还没有执行结束。");
    } else {
    System.out.println("流程已经执行结束!");
    }
    }

    /* 查询历史任务 */
    @Test
    public void queryHistoryTask() {
    String taskAssignee = "张三";
    List<HistoricTaskInstance> list = processEngine.getHistoryService()// 创建于历史有关的服务对象
    .createHistoricTaskInstanceQuery()// 创建查询历史任务实例对象
    .taskAssignee(taskAssignee)// 办理任务的人
    .list();
    if (list != null && list.size() > 0) {
    for (HistoricTaskInstance his : list) {
    System.out.println(his.getProcessInstanceId() + " " + his.getAssignee() + " "
    + his.getTaskDefinitionKey() + " " + his.getName() + " " + his.getStartTime() + " "
    + his.getEndTime() + " " + his.getDurationInMillis());
    }
    }
    }

    /* 查询历史流程实例 */
    @Test
    public void queryHistoryProcessInstance() {
    String processInstanceId = "801";
    HistoricProcessInstance his = processEngine.getHistoryService()// 创建于历史相关的服务对象
    .createHistoricProcessInstanceQuery()// 创建查询流程实例对象
    .processInstanceId(processInstanceId).singleResult();
    if (his != null) {
    System.out.println(his.getId() + " " + his.getProcessDefinitionId() + " " + his.getStartTime()
    + " " + his.getEndTime() + " " + his.getDurationInMillis());
    }
    }
    }

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/smile-nn/p/7376331.html
Copyright © 2011-2022 走看看