activiti测试文档
环境说明
- springmvc,spring,mybatis
- activiti:5.22.0
- 数据库:mysql
搭建环境
- 几个重要的配置文件
- activiti.cfg.xml(名字不能写错,放置在根目录,会根据该配置文件生成ProcessEngine流程引擎)
- applicationContext-resources.xml(用于配置mybatis)
- spring-mvc.xml:设置springmvc相关配置
- jdbc.propertis:设置数据库连接参数
activiti开发步骤
- 画流程图
- 在eclispe中安装acti插件
- 几个重要的节点
- startEvent:开始节点
- userTask:用户任务节点
- 重要参数
- general: id,name
- main config
- Assigine:设置执行人(#{user})
- Candidate users: 候选人(可设多个#{userIds})
- Candidate groups:候选组
- listeners:设置监听器:可用于设置执行人,候选人
- SequenceFlow:用于连接各个节点
- main config
- condition:用于设置条件($(money > 500 && money < 1000)
- main config
- 将生成的png图片和bpmn文件压缩为zip文件,防止在resources下
- appTest可用于生成数据库表
- 部署流程图
- 代码
/**
* 部署流程图
* @return
*/
@RequestMapping("deploy")
@ResponseBody
public Map<String,Object> deploy(){
Map<String,Object> result = new HashMap<>();
try {
processEngine.getRepositoryService().
createDeployment().
addZipInputStream(new ZipInputStream(new FileInputStream("D:\\activitiDemo\\src\\main\\resources\\deployment\\leaveflow.zip"))).deploy();
result.put("message","部署成功");
} catch (FileNotFoundException e) {
logger.error("部署失败,失败原因:" + e.getMessage());
result.put("message","部署失败");
}
return result;
}
- 流程部署操作向act_re_procdef和act_re_deployment中插入了数据(参见理解activti表结构)
- 开启流程实例
- 代码:
/**
* 开启一个流程实例
* @return
*/
@RequestMapping("startInstance")
@ResponseBody
public Map<String,Object> startInstance(@RequestParam String username) {
/**
* 开启流程实例有两种方式
* 根据key:获得最新版本的流程实例
* 根据流程定义Id:
*/
Map<String,Object> result = new HashMap<>();
try {
Map<String,Object> variables = new HashMap<>();
variables.put("username",username);
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("qingjiashenqing",variables);
String processInstanceId = processInstance.getProcessInstanceId();
result.put("processInstanceId",processInstanceId);
result.put("message","申请成功");
} catch (Exception e) {
logger.error("请假申请失败:失败原因:" + e.getMessage());
result.put("message","申请失败");
}
return result;
}
- 可在开启之前设置流程变量,设置申请人(username是流程图中定义好的变量)
- 流程实例开启操作向act_ru_task,act_hi_actinstm,act_hi_procinst,act_hi_taskinst,act_ru_execution中插入了数据
- 查询个人任务
- 代码
/**
* 查询个人任务
* @return
*/
@RequestMapping("queryMyTask")
@ResponseBody
public List<String> queryMyTask(@RequestParam String username) {
List<String> list = new ArrayList<>();
List<Task> taskList = processEngine.getTaskService().createTaskQuery().taskAssignee(username).list();
HashMap<String,Object> result = new HashMap<>();
//这里的taskList不能直接存入Map中
for (Task task : taskList) {
list.add(task.getName());
}
return list;
}
- 可根据执行人姓名,查询个人任务
- 完成任务操作
- 代码
/**
* 部门经理审批
* @return
*/
@RequestMapping("depApproval")
@ResponseBody
public Map<String,Object> depApproval(@RequestParam String processInstanceId) {
Map<String,Object> result = new HashMap<>();
//根据流程定义id获得任务对象
Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstanceId).singleResult();
//完成任务
processEngine.getTaskService().complete(task.getId());
/**
* TODO 在开发中,通过类的方式设置好下一个任务的办理人
*/
result.put("message","部门经理审批");
return result;
}
- 通过complete方法执行任务