Activiti7 + SpringBoot 2.0 - 新特性 的 基本使用 (整合开发)

0. 官网activiti7 新特性文档

因为activiti7 中文文档现在比较少,所以可以考虑去看英文文档。里面也有实例,比较详细。

GitHub文档 点击进入

本次文章分享 全程使用activiti7 新api 进行基本操作


1. 测试工程搭建

1.1 pom文件

这里是只作测试使用的坐标

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.1.0.RELEASEversion>
    <relativePath/>
parent>

<properties>
    <java.version>1.8java.version>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-jdbcartifactId>
    dependency>

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    dependency>

    
    <dependency>
        <groupId>org.activitigroupId>
        <artifactId>activiti-spring-boot-starterartifactId>
        <version>7.0.0.Beta2version>
    dependency>

    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
    dependency>

dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
    plugins>
build>

1.2 application.yml文件

部分配置文件的解释来源于互联网。并非本人书写。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  activiti:
    database-schema-update: true
    #表示使用历史表,如果不配置,则工程启动后可以检查数据库,只建立了17张表,历史表没有建立
    db-history-used: true
    #记录历史等级 可配置的历史级别有none, activity, audit, full
    history-level: full
    #校验流程文件,默认校验resources下的processes文件夹里的流程文件
    #如果设置false, 则resources/processes下面的bpmn文件不会自动部署
    check-process-definitions: true

1.3 初始化文件的准备

Activiti7 + SpringBoot 2.0 - 新特性 的 基本使用 (整合开发)_第1张图片

  • 这三个文件来源于如下文件(可在GitHub下载):
    在这里插入图片描述
    Activiti7 + SpringBoot 2.0 - 新特性 的 基本使用 (整合开发)_第2张图片
  • GitHub例子网址 点击跳转

1.4 bpmn文件

Activiti7 + SpringBoot 2.0 - 新特性 的 基本使用 (整合开发)_第3张图片

1.5 特别注意

  • 放在此目录下会自动部署流程。官方文档说明如第二张图
    Activiti7 + SpringBoot 2.0 - 新特性 的 基本使用 (整合开发)_第4张图片
    在这里插入图片描述

2. 测试代码

  • 点击进入 官方实例代码
  • 空的测试代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class TextActiviti {

    @Autowired
    private SecurityUtil securityUtil;

    @Autowired
    private ProcessRuntime processRuntime;

    @Autowired
    private TaskRuntime taskRuntime;
}

2.2 查询流程定义信息

/**
* 查询流程定义
*/
@Test
public void testQueryProcessDefinition() {

   //1. 模拟登陆,因为activiti7与springSecurity有强耦合
   securityUtil.logInAs("system");

   //2. 查询
   Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
   for (ProcessDefinition processDefinition : processDefinitionPage.getContent()) {

       System.out.println(processDefinition.getName());
       System.out.println(processDefinition.getKey());
   }
}

2.3 开始一个流程

代码,本人参考的官方文档

/**
 * 启动一个流程实例
 */
@Test
public void testStartProcess() {

    //1. 模拟登陆,因为activiti7与springSecurity有强耦合
    //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
    securityUtil.logInAs("erdemedeiros");

    ProcessInstance processInstance = processRuntime
            .start(ProcessPayloadBuilder
                    .start()
                    .withProcessDefinitionKey("testProcess")
                    // .withVariable("content", content) 可以设置流程变量
                    .build());

    //输出基本信息
    System.out.println(processInstance.getId());
    System.out.println(processInstance.getName());
}

2.4 查询并拾取任务

代码,本人参考的官方文档

/**
* 测试查询并拾取任务
*/
@Test
public void testQueryAndClaimTask() {

   //1. 模拟登陆,因为activiti7与springSecurity有强耦合
   //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
   securityUtil.logInAs("salaboy");

   Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
   List<Task> tasksContent = tasks.getContent();

   for (Task task : tasksContent) {

       // 打印任务基本信息
       System.out.println(task.getName());
       System.out.println(task.getAssignee());
       //拾取任务。
       taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
       System.out.println("拾取成功!");
   }

}
  • 此时可以观看数据库表act_ru_task中的assignee字段已经更新, 那么此用户组中的其他用户在进行查询的时候,此任务已经不会被其他人查询到。这里就不作测试了。
    在这里插入图片描述

2.5 归还任务

/**
*测试归还任务
*/
@Test
public void testReleaseTask() {

   //1. 模拟登陆,因为activiti7与springSecurity有强耦合
   //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
   securityUtil.logInAs("salaboy");

   Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
   List<Task> tasksContent = tasks.getContent();

   for (Task task : tasksContent) {

       // 被"salaboy"拾取的
       if ("salaboy".equals(task.getAssignee())) {
           // 打印任务基本信息
           System.out.println(task.getName());
           System.out.println(task.getAssignee());
           //归还任务
           taskRuntime.release(TaskPayloadBuilder.release().withTaskId(task.getId()).build());
       }
   }
}
  • 此时可以观看数据库表act_ru_task中的assignee字段已经为null, 那么此用户组中的其他用户在进行查询的时候,此任务可以被用户组中的其他用户查询到,这里就不测试了。
    在这里插入图片描述

2.6 通过任务Id设置 全局/局部 流程变量

/**
* 通过taskId 设置流程变量
*  注意事项与 不与springboot整合时 是一样的
*/
@Test
public void testSetVar() {

   //1. 模拟登陆,因为activiti7与springSecurity有强耦合
   //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
   securityUtil.logInAs("erdemedeiros");

   String taskId = "78d0ee10-47f1-11ea-b90b-005056c00008";

   Map<String, Object> varMap = new HashMap<>();
   varMap.put("name", "immort");
   varMap.put("age", 18);
   // 如果设置局部变量则:加上.localOnly()即可
   taskRuntime.setVariables(TaskPayloadBuilder.setVariables().withTaskId(taskId).withVariables(varMap).build());
}
  • 数据库表中可以看到已经设置了。
    在这里插入图片描述

2.7 通过任务id获取流程变量

/**
* 测试获取流程变量
*  注意事项与 不与springBoot整合时时一样的
*/
@Test
public void testGetVar() {
   //1. 模拟登陆,因为activiti7与springSecurity有强耦合
   //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
   securityUtil.logInAs("erdemedeiros");

   String taskId = "78d0ee10-47f1-11ea-b90b-005056c00008";
   
   //如果想获取局部变量 后面加.localOnly()即可
   List<VariableInstance> variables = taskRuntime.variables(TaskPayloadBuilder.variables().withTaskId(taskId).build());
   for (VariableInstance variable : variables) {
       System.out.println(variable.getName() + " : " + variable.getValue());
   }
}

2.8 完成任务

/**
 *测试完成任务
 */
@Test
public void testCompleteTask() {
    //1. 模拟登陆,因为activiti7与springSecurity有强耦合
    //  参数可以在DemoApplicationConfiguration.java 文件中获得。因为这里是测试。并没有实际结合springSecurity
    securityUtil.logInAs("erdemedeiros");

    Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
    List<Task> tasksContent = tasks.getContent();

    for (Task task : tasksContent) {
        // 打印任务基本信息
        System.out.println(task.getName());
        System.out.println(task.getAssignee());
        //拾取任务。
        taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
        System.out.println("拾取成功!");
        //完成任务
        taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());
        System.out.println("完成任务!");
    }
}

3. 总结

上面只是我看文档得到的一些基本操作。因为暂时activiti7的中文文档比较少。所以还是只能去看英文的。如有不对的地方请指出。共同学习,谢谢。

你可能感兴趣的:(activiti7,java,spring,boot)