因为activiti7 中文文档现在比较少,所以可以考虑去看英文文档。里面也有实例,比较详细。
GitHub文档 点击进入
本次文章分享 全程使用activiti7 新api 进行基本操作
这里是只作测试使用的坐标
<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>
部分配置文件的解释来源于互联网。并非本人书写。
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
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class TextActiviti {
@Autowired
private SecurityUtil securityUtil;
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private TaskRuntime taskRuntime;
}
/**
* 查询流程定义
*/
@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());
}
}
代码,本人参考的官方文档
/**
* 启动一个流程实例
*/
@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());
}
代码,本人参考的官方文档
/**
* 测试查询并拾取任务
*/
@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("拾取成功!");
}
}
/**
*测试归还任务
*/
@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, 那么此用户组中的其他用户在进行查询的时候,此任务可以被用户组中的其他用户查询到,这里就不测试了。/**
* 通过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());
}
/**
* 测试获取流程变量
* 注意事项与 不与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());
}
}
/**
*测试完成任务
*/
@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("完成任务!");
}
}
上面只是我看文档得到的一些基本操作。因为暂时activiti7的中文文档比较少。所以还是只能去看英文的。如有不对的地方请指出。共同学习,谢谢。