Actitivi 与业务系统整合开发
原理:
业务系统中的Id 与Activiti 的表中 Bussinesskey经i选哪个关联 。
这样可知道是哪个角色进行操作
这里的Key 就是你存入的主键
Activiti 实现业务系统businesskey整合
/**
启动流程实例, 并添加进businesskeyAdd
*/
public class BusinessKeyAdd {
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//2. 得到RuntIMEService 对象
RuntimeService runtimeService=processEngine.getRuntimeService();
//3.启动流程实例,同时还要指定业务标识 businesskey
//第一个参数:是 指定流程定义 key
//第二个参数:业务标识 businesskey
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday_111", "1001");
//4.输出相关属性
System.out.println(processInstance.getBusinessKey());
}
}
Activiti 全部流程的挂起与激活的全部过程
业务流程发生变化 就需要将起流程 挂起 或者激活
/**
* 全部流程挂起与激活
*/
public class SuspendprocessInstance {
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到RepsitoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//3.查询流程定义的对象
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("holiday_111").singleResult();
//4.得到当前流程定义的实例是否为暂停状态
boolean suspended = processDefinition.isSuspended();
String processDefinitionId=processDefinition.getId();
//5。判断
if(suspended){
repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);
System.out.println(processDefinitionId+"激活");
}else{
repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
System.out.println(processDefinitionId+"挂起");
}
}
}
Activiti 对单个流程实例进行挂起
/**
* 单个流程挂起与激活
*/
public class SuspendprocessInstance2 {
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//3.查询流程定义的对象
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId("2501").singleResult();
//4.得到当前流程定义的实例是否为暂停状态
boolean suspended = processInstance.isSuspended();
String processInstanceId=processInstance.getId();
//5。判断
if(suspended){
runtimeService.activateProcessInstanceById(processInstanceId);
System.out.println(processInstanceId+"激活");
}else{
runtimeService.suspendProcessInstanceById(processInstanceId);
System.out.println(processInstanceId+"挂起");
}
}
}
与全部挂起的区别 也就是引用的不同 单个的按照id 来进行
Activiti 的任务分配的一些方式
固定方式 与 UEL 方式
固定方式:
在properties视图中,填写Assignee项为任务负责人。
UEL 表达式
user也是activiti的一个流程变量,user: assignee表示通过调用user的getter方法获取值。
例子:
将之前的流程重新建立 bpmn 文件 png 文件
Assignee 设置成${assignee0} ${assignee1} ${assignee2}
然后进行 部署
部署完成之后
进行启动
public class ActivitiUEL {
public static void main(String[] args) {
//1.得到ProcessEngine 对象
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//2. 得到RunService 对象
RuntimeService runtimeService=processEngine.getRuntimeService();
//3.设置assignee的取值 用户可以在界面设置流程的执行人
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("assignee0","pig");
map.put("assignee1","dog");
map.put("assignee2","cat");
//4.启动流程实例,同时还要设置流程的定义的assignee的值
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday000", map);
//5.输出
System.out.println(processEngine.getName());
}
}
然后看表中数据
数据已存入
但设置 任务代理人的时候 为表达式 设置的形态 所以成功
监听器 方式
任务监听器式发生对应的任务相关 事件时 执行自定义java 逻辑 或表达式
任务相当事件 包括
:
Create: 任务创建后触发
Assignment:任务分配后触发
Delete: 任务完成后触发
All: 所有事件发生后触发
java 逻辑 或表达式:
表达式参考 上边的 UEL
实现简单操作::
例:
监听 选择事件
选取完成之后
type 填写Class
然后定义监听类,且类必须实现org.activiti,engine,delegate.TaskLister 接口
public class MyTaskListener implements TaskListener {
public void notify(DelegateTask delegateTask){
//这里指定任务负责人
delegateTask.setAssignee("张三");
}
有监听类后
Class 选择 式包名 点 类名
注意事项
使用监听器分配方式 ,按照监听器事件去执行监听类的notify 方法 ,方法如果不能正常执行也会影响任务的执行。