ProcessEngine pe = null;
@Before
public void init() {
pe = ProcessEngines.getDefaultProcessEngine();
}
一、流程变量操作
流程变量指的是使用流程变量进行业务数据的传递,比如请假的原因、天数等
①在启动流程实例时设置
在启动流程实例时,可以添加流程变量。这是添加流程变量的一种时机。
/**
* 设置流程变量方式一:在启动流程实例时设置
*/
@Test
public void test1() {
String processDefinitionKey = "HelloWorldKey";
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("key1", "value1");
variables.put("key2", 200);
ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
System.out.println(pi.getId());
}
说明:
- 在启动流程实例时,通过重载startProcessInstanceByKey的方法可以加载流程变量。
- 第二个参数要求是Map<String ,Object>类型,意味着可以添加多个流程变量。
- 当这段代码执行完以后,会在数据库表act_ru_variable中添加两行记录。
②在办理任务时设置
在办理任务时,有时候任务办理完成以后,要传递一些信息到系统中。这个时候可以利用TaskService这个类来添加流程实例。
/**
* 设置流程变量方式二:在办理任务时设置
*/
@Test
public void test3() {
String taskId = "50006";
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("user", new User(1,"小王"));
pe.getTaskService().complete(taskId, variables);
}
③流程变量支持的类型
Jdk中提供的数据类型(String、Integer、List 、Map…),自定义的实体类(要求实现序列化接口 Serializable)
如图是从官网列出来的流程变量的类型:
④使用RuntimeService方法获取流程变量
可以通过runTimeService的方法来获取流程变量。说明:这些流程变量是从act_ru_variable这个表中读出来的。
/**
* 获取流程变量方式:使用RuntimeService的方法获取
*/
@Test
public void test6() {
String executionId = "2501";
Map<String, Object> variables = pe.getRuntimeService().getVariables(executionId);
// System.out.println(variables);
Set<String> set = variables.keySet();// key2 key1 user
for (String key : set) {
Object value = variables.get(key);
System.out.println(key + " = " + value);
}
Object value = pe.getRuntimeService().getVariable(executionId, "user");
System.out.println(value);
}
二、任务的类型
①个人任务
由某一个负责办理,在任务表中通过assignee字段记录
②公共任务(组任务)
当前的任务可以由多个人办理, 可以在设计流程图时指定多个办理人
/*
* 公共任务测试
*/
public class PublicTask {
ProcessEngine pe=null;
@Before
public void init(){
pe = ProcessEngines.getDefaultProcessEngine();
}
/**
* 01-部署流程定义
*/
@Test
public void test1(){
DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("Demo.bpmn");
deploymentBuilder.addClasspathResource("Demo.png");
Deployment deployment = deploymentBuilder.deploy();
System.out.println("流程定义部署成功...");
}
/**
* 02-查询流程定义列表
*/
@Test
public void test2() {
// 流程定义查询对象,用于查询表act_re_procdef
ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
// 添加分页查询
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
}
}
/**
* 03-启动流程实例
*/
@Test
public void test3(){
String processDefinitionId="myProcess:1:60004";
pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println("流程实例定义成功.....");
}
/**
* 04-办理个人任务
*/
@Test
public void test4(){
String taskId="62504";
pe.getTaskService().complete(taskId);
System.out.println("任务办理成功....");
}
/**
* 05-查询公共任务列表
*/
@Test
public void test5(){
TaskQuery query = pe.getTaskService().createTaskQuery();
//根据候选人过滤
String candidateUser="小黑";
query.taskCandidateUser(candidateUser);
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getName()+"----"+task.getId());
}
}
/**
* 06-拾取任务(将公共任务变为个人任务)
*/
@Test
public void test6(){
String userId="小黑";
String taskId="65002";
pe.getTaskService().claim(taskId, userId);
System.out.println("任务拾取成功..");
}
/**
* 07-查询个人任务列表
*/
@Test
public void test7() {
TaskQuery query = pe.getTaskService().createTaskQuery();
String assignee = "小黑";
query.taskAssignee(assignee);
List<Task> list = query.list();
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());
}
}
/**
* 08-办理任务
*/
@Test
public void test9(){
String taskId= "65002";
pe.getTaskService().complete(taskId);
System.out.println("办理完成,任务ID是:"+taskId);
}
}
③接收任务
接收任务不是由某个人负责办理,而是通过signal方法让流程执行的
/**
* 接受任务测试
*/
public class ReceiveTaskTest {
ProcessEngine pe=null;
@Before
public void init(){
pe = ProcessEngines.getDefaultProcessEngine();
}
/**
* 01-部署流程定义
*/
@Test
public void test1(){
DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("Demo1.bpmn");
deploymentBuilder.addClasspathResource("Demo1.png");
Deployment deployment = deploymentBuilder.deploy();
System.out.println("流程定义部署成功...");
}
/**
* 02-查询流程定义列表
*/
@Test
public void test2() {
// 流程定义查询对象,用于查询表act_re_procdef
ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
// 添加分页查询
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
}
}
/**
* 03-启动流程实例
*/
@Test
public void test3(){
String processDefinitionId="myProcess:2:75004";
pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println("流程实例定义成功.....");
}
/**
* 04-办理任务
*/
@Test
public void test4(){
String taskId = "77504";
pe.getTaskService().complete(taskId );
}
/**
* 05-查询流程实例列表,查询act_ru_execution表
*/
@Test
public void test9() {
// 流程实例查询对象,查询act_ru_execution表
ProcessInstanceQuery query = pe.getRuntimeService().createProcessInstanceQuery();
query.processDefinitionKey("myProcess");
query.orderByProcessInstanceId().desc();
query.listPage(0, 2);
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
System.out.println(pi.getId() + " " + pi.getActivityId());
}
}
/**
* 06-处理接收任务
*/
@Test
public void test5(){
String executionId = "77501";
pe.getRuntimeService().signal(executionId);
}
}