1. URL表达式
Activiti 使用UEL 表达式,UEL 是java EE6 规范的一部分,UEL(Unified Expression Language)即
统一表达式语言,activiti 支持两个UEL 表达式:UEL-value 和UEL-method
1.1 URL-value定义如下
1.1.1 创建bpmn文件
1.1.2 生成流程图
1.1.3 部署流程
//流程部署 @Test public void deployment(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RepositoryService对象进行流程部署 RepositoryService repositoryService = processEngine.getRepositoryService(); //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("holiday/holiday.bpmn") //加载流程文件 .addClasspathResource("holiday/holiday.png") .name("请假流程") //设置流程名称 .key("holidayKey") .deploy(); //部署 //输出部署信息 System.out.println("流程名称:"+deployment.getName()); System.out.println("流程ID:"+deployment.getId()); System.out.println("流程Key:"+deployment.getKey()); }
1.1.4 查看数据库
1.1.5 启动一个流程实例
//启动一个流程实例 @Test public void getInstance(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取Runtime RuntimeService runtimeService = processEngine.getRuntimeService(); //定义一个map集合存放assignee值 Map<String ,Object> map=new HashMap<>(); map.put("assignee01","zhangsan"); map.put("assignee02","lisi"); map.put("assignee03","wangwu"); map.put("assignee04","zhaoliu"); //启动一个流程实例 ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday", map); System.out.println("流程实例name:"+holiday.getName()); }
1.1.6 将zhangsan代办任务处理掉
//处理代办任务 @Test public void completeTask(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取一个TaskService对象 TaskService taskService=processEngine.getTaskService(); //任务处理 taskService.complete("2509"); }
1.1.7 查看数据库
1.1.8 所有任务 都执行完毕后查看数据库代办任务表是已经空的
1.1.9 所有执行过的任务会 列在历史任务表中
2. 流程变量
2.1 什么是流程变量
流程变量在activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti
结合时少不了流程变量,流程变量就是activiti 在管理工作流时根据管理需要而设置的变量。
比如在请假流程流转时如果请假天数大于 3 天则由总经理审核,否则由人事直接审核,请假天数就可以设置为流程变量,在流程流转时使用。
2.2 流程变量的数据类型:
string,duble,boolean,short,long,Integer,binary,date日期
serializable,如果流程变量需要用到pojo当中的属性字段,则该pojo需要实现序列化接口
2.3 流程变量的作用域
1.默认情况下,流程变量存在整个流程实例当中,每一个环节都可以获取到该变量,称之为global,类似于Java全局变量
2.任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大,称为local 变量。类似于Java局部变量
2.4 流程变量案例
2.4.1 创建bpmn文件并填写两个判断条件
如果请假天数>3天需要总经理审批
如果请假天数 <=3天直接交给人事存档
2.4.2 将bpmn文件生成 流程图
2.4.3 部署一个流程
//流程部署 @Test public void deployment(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RepositoryService对象进行流程部署 RepositoryService repositoryService = processEngine.getRepositoryService(); //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("holiday/holiday2.bpmn") //加载流程文件 .addClasspathResource("holiday/holiday2.png") .name("请假流程-流程变量") //设置流程名称 .deploy(); //部署 //输出部署信息 System.out.println("流程名称:"+deployment.getName()); System.out.println("流程ID:"+deployment.getId()); System.out.println("流程Key:"+deployment.getKey()); }
2.4.4 启动一个流程实例 流程变量>5
/** * 启动流程实例 */ @Test public void startInstance() { //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //设置流程变量 Holiday holiday = new Holiday(); holiday.setNum(5); //定义一个Map集合,存放流程变量的值 Map<String, Object> assMap = new HashMap<>(); assMap.put("holiday", holiday); //启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayvar",assMap); System.out.println("流程实例启动成功~"); }
2.4.5 查看数据库
2.4.6 处理zhangsan的代办任务后查看数据库任务表
2.4.7 处理lisi的代办任务后查看数据库任务表
2.4.8 处理wangwu的代办任务后 查看数据库任务表
2.4.9 处理完 zhaoliu的任务后数据库任务表为空
2.4.10 启动一个流程实例 将流程变量设置为3天
/** * 启动流程实例 */ @Test public void startInstance() { //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //设置流程变量 Holiday holiday = new Holiday(); holiday.setNum(3); //定义一个Map集合,存放流程变量的值 Map<String, Object> assMap = new HashMap<>(); assMap.put("holiday", holiday); //启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayvar",assMap); System.out.println("流程实例启动成功~"); }
2.4.11 处理 zhangsan的任务后查看数据库任务表
2.4.12 处理lisi的任务后因为请假天数为3天 所以直接就到了人事存档
2.4.13 处理完 zhaoliu的任务后数据库任务表为空