背景
- POJO, 这个概念其实来自Spring中,叫做增强型Java对象。因为Spring是非侵入式编程模式,我们开发者自定义的实体,既可以变成POJO类型的实体服务于Spring框架,这个变成的POJO类型的实体,在其他地方使用也没有任何影响。
- 其实就是这样的形式${holiday.num}, 表达式会调用一个getNum()方法。其实我们的JSP中也有这样的EL表达式知识。Mybatis的中占位符的表达式写法,其实也是Java代码调用getNum()方法。
- 要测试一个小知识,会稍微有些繁琐。因此,通过反复练习,达到熟练。
- 画流程定义图 -> 部署流程定义图 -> 实例化流程定义(初始化一个流程实例)-> 负责人处理任务。
- 在上面的一个过程中,assignee的赋值,我们需要考量赋值的方式是什么?赋值的时机又是什么?
过程
-
流程定义图(${holiday.applyName} ${holiday.managerName})
-
静态资源文件(png,bpmn)
-
POJO(需要实现序列化接口,Serializable)
public class Holiday implements Serializable {
private String applyName;
private String managerName;
public String getApplyName() {
return applyName;
}
public void setApplyName(String applyName) {
this.applyName = applyName;
}
public String getManagerName() {
return managerName;
}
public void setManagerName(String managerName) {
this.managerName = managerName;
}
}
- 部署
@Test
public void deploy() {
//1. 通过工具类(ProcessEngines)获取引擎实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
//3. 得到部署实例
Deployment deployment = repositoryService.createDeployment()
.name("测试pojo分配值")
.addClasspathResource("bpmn/holiday09.bpmn")
.addClasspathResource("bpmn/holiday09.png")
.deploy();
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名称:" + deployment.getName());
}
- 实例化
@Test
public void startProcessAndAssigneeValue() {
//1. 通过工具类(ProcessEngines)获取流程引擎实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 得到RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//3. 设置assignee的取值,用户在界面上设置流程的执行人
Map<String, Object> map = new HashMap<>();
Holiday holiday = new Holiday();
holiday.setApplyName("Ted");
holiday.setManagerName("Karen");
map.put("holiday", holiday);
//4. 启动流程实例,同时还要设置流程定义的assignee的值
runtimeService.startProcessInstanceByKey("myProcess_1", map);
}
- 数据库结果展示
act_ru_identitylink
act_ru_task
- 当Ted处理完成任务后,会发生什么?(Ted完成请假表单的填写)
@Test
public void dealWithTaskByTed() {
//1. 通过工具类(ProcessEngines)获取流程引擎实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 得到TaskService实例
TaskService taskService = processEngine.getTaskService();
//3. 根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionKey("myProcess_1")
.taskAssignee("Ted")
.list();
//4. 任务处理
for (Task task: taskList) {
taskService.complete(task.getId());
}
}
-
结果
-
任务处理
小结
- 记录操作步骤。assignee的值用UEL的POJO实现。