一 ProcessRuntime
这个是和SpringSecurity结合使用,如果项目中没有SpringSecurity那就使用原来的方法即可。该接口是用于对流程定义和定义流程实例的接口。
package com.activitiweb;
import org.activiti.api.model.shared.model.VariableInstance;
import org.activiti.api.process.model.ProcessInstance;
import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
import org.activiti.api.process.runtime.ProcessRuntime;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class Part8_ProcessRuntime {
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private SecurityUtil securityUtil;
//获取流程实例
@Test
public void getProcessInstance() {
//先登录
securityUtil.logInAs("bajie");
//这个实例引用是 org.activiti.api.process.model包下的 切记
Page<ProcessInstance> processInstancePage = processRuntime
.processInstances(Pageable.of(0,100));
System.out.println("流程实例数量:"+processInstancePage.getTotalItems());
List<ProcessInstance> list = processInstancePage.getContent();
for(ProcessInstance pi : list){
System.out.println("-----------------------");
System.out.println("getId:" + pi.getId());
System.out.println("getName:" + pi.getName());
System.out.println("getStartDate:" + pi.getStartDate());
System.out.println("getStatus:" + pi.getStatus());
System.out.println("getProcessDefinitionId:" + pi.getProcessDefinitionId());
System.out.println("getProcessDefinitionKey:" + pi.getProcessDefinitionKey());
}
}
//启动流程实例
@Test
public void startProcessInstance() {
securityUtil.logInAs("bajie");
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey("myProcess_ProcessRuntime")
.withName("第一个流程实例名称")
//.withVariable("","")
.withBusinessKey("自定义bKey")
.build()
);
}
//删除流程实例
@Test
public void delProcessInstance() {
securityUtil.logInAs("bajie");
ProcessInstance processInstance = processRuntime.delete(ProcessPayloadBuilder
.delete()
.withProcessInstanceId("6fcecbdb-d3e0-11ea-a6c9-dcfb4875e032")
.build()
);
}
//挂起流程实例
@Test
public void suspendProcessInstance() {
securityUtil.logInAs("bajie");
ProcessInstance processInstance = processRuntime.suspend(ProcessPayloadBuilder
.suspend()
.withProcessInstanceId("1f2314cb-cefa-11ea-84aa-dcfb4875e032")
.build()
);
}
//激活流程实例
@Test
public void resumeProcessInstance() {
securityUtil.logInAs("bajie");
ProcessInstance processInstance = processRuntime.resume(ProcessPayloadBuilder
.resume()
.withProcessInstanceId("1f2314cb-cefa-11ea-84aa-dcfb4875e032")
.build()
);
}
//流程实例参数
@Test
public void getVariables() {
securityUtil.logInAs("bajie");
List<VariableInstance> list = processRuntime.variables(ProcessPayloadBuilder
.variables()
.withProcessInstanceId("2b2d3990-d3ca-11ea-ae96-dcfb4875e032")
.build()
);
for(VariableInstance vi : list){
System.out.println("-------------------");
System.out.println("getName:" + vi.getName());
System.out.println("getValue:" + vi.getValue());
System.out.println("getTaskId:" + vi.getTaskId());
System.out.println("getProcessInstanceId:" + vi.getProcessInstanceId());
}
}
}
二 TaskRuntime
这个接口优化了任务方法,之前查询待办任务是一个方法,查询候选人任务又是另外一个方法。
package com.activitiweb;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.Task;
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
import org.activiti.api.task.runtime.TaskRuntime;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class Part9_TaskRuntime {
@Autowired
private SecurityUtil securityUtil;
@Autowired
private TaskRuntime taskRuntime;
//获取当前登录用户任务
@Test
public void getTasks() {
securityUtil.logInAs("wukong");
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0,100));
List<Task> list=tasks.getContent();
for(Task tk : list){
System.out.println("-------------------");
System.out.println("getId:"+ tk.getId());
System.out.println("getName:"+ tk.getName());
System.out.println("getStatus:"+ tk.getStatus());
System.out.println("getCreatedDate:"+ tk.getCreatedDate());
if(tk.getAssignee() == null){
//候选人为当前登录用户,null的时候需要前端拾取
System.out.println("Assignee:待拾取任务");
}else{
System.out.println("Assignee:"+ tk.getAssignee());
}
}
}
//完成任务
@Test
public void completeTask() {
securityUtil.logInAs("wukong");
Task task = taskRuntime.task("db9c5f80-d3ae-11ea-99e8-dcfb4875e032");
if(task.getAssignee() == null){
taskRuntime.claim(TaskPayloadBuilder.claim()
.withTaskId(task.getId())
.build());
}
taskRuntime.complete(TaskPayloadBuilder
.complete()
.withTaskId(task.getId())
.build());
System.out.println("任务执行完成");
}
}