zoukankan      html  css  js  c++  java
  • 四、activiti工作流-第一个HelloWorld

    上一节已经把流程图画好,并且数据库也已经创建好了25张表,这节讲如何启动一个流程

      先新建一个包,并新建一个类。

      

    /**然后定义一个成员属性,主要是因为每个方法都要用到这个引擎
    * 获取默认流程引擎实例,会自动读取avtiviti.cfg.xml文件
    * */

    public class HelloWorldProcess {
    private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();     //获取流程引擎

     

    下一步开始部署流程定义,我们这里通过classpath加载方式来部署流程定义

    //部署流程定义,把数据写到数据库中去,这种是通过classpath加载方式部署流程定义
    @Test
    public void deploy() {
      Deployment deployment = processEngine.getRepositoryService() //获取部署相关的service;
      .createDeployment() //创建部署
      .addClasspathResource("diagrams/HelloWord.bpmn") //加载资源文件
      .addClasspathResource("diagrams/HelloWord.png") //加载资源文件
      .name("HelloWorld流程") //流程名字
      .deploy(); //部署

      System.out.println("流程部署id:"+deployment.getId());
      System.out.println("流程部署Name:"+deployment.getName());
    }


     //和上面的进行比较,这种是通过zip加载方式部署流程定义,2种方式选择一种即可

    @Test
    public void deployWithZip() {
      InputStream inputStream = this.getClass() //取的当前class对象
      .getClassLoader() //获取类加载器
      .getResourceAsStream("diagrams/helloWorld.zip"); //指定文件资源流

      ZipInputStream zipInputStream=new ZipInputStream(inputStream); //实例化zip输入流
      Deployment deployment = processEngine.getRepositoryService() //获取部署相关的接口
      .createDeployment() //创建部署
      .addZipInputStream(zipInputStream)
      .name("HelloWorld流程") //流名称
      .deploy(); // 添加zip输入流
    }

    上面这个就相当于java中的一个类,通过这个请假模板,可以创建出无数个对象实例,意思是可以有无数个人请假

     

    启动流程实例

    /**
    * 启动流程实例
    * */
    @Test
    public void start() {
      ProcessInstance pi = processEngine.getRuntimeService() //运行service
      .startProcessInstanceByKey("myFirstProcess"); //流程定义表里面的key
      System.out.println("流程实例id:"+pi.getId());
      System.out.println("流程定义id:"+pi.getProcessDefinitionId());
    }

    查看节点任务

    /**
    * 查看任务,查看某个人的任务
    * */
    @Test
    public void findTask() {
      List<Task> taskList = processEngine.getTaskService() //任务相关的service
        .createTaskQuery() //创建任务查询S
        .taskAssignee("登风") //指定某个人有没有任务
        .list();
      for (Task task : taskList) {
        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());
       }
     }

    执行任务,当执行完任务后,所有运行时的表数据将全部被清空,但历史表数据还保留

    /**
    * 执行任务,执行的id是任务的id*/
    @Test
    public void complete() {
      processEngine.getTaskService() //任务相关
      .complete("35008"); //结束任务表id
    }

    }

  • 相关阅读:
    SCRAM
    package-info.java https://www.intertech.com/Blog/whats-package-info-java-for/
    mybatis-3 cache 源码赏析
    Cache replacement policies 缓存实现算法
    MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参
    Taking a peek inside with the Actuator
    表优化 altering table OPTIMIZE TABLE `sta_addr_copy`
    Why is long2ip conversion important?
    遇到的1/3,在十进位制中是一个无限小数,但在这种进位制中就是一个有限小数。
    并发编程:Actors 模型和 CSP 模型
  • 原文地址:https://www.cnblogs.com/binghuaZhang/p/10777312.html
Copyright © 2011-2022 走看看