activiti中的事件处理器(EventHandler)
来源:互联网 发布:期货从业软件 编辑:程序博客网 时间:2024/05/02 02:16
- 全局事件处理器
预先定义处理器分为两种:在引擎文件中定义和在流程文件中定义,都继承了org.activiti.engine.delegate.event.ActivitiEventListener
1.在引擎文件中引用
Spring-activiti.xml文件中的配置
<bean id = "processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="eventListeners">//eventListeners事件覆盖了全部事件 <list> <bean class="im.java.workflow.activiti.listener.GlobalEventListener" /><!--继承了ActivitiEventListener--> </list> </property></bean>
im.java.workflow.activiti.listener.GlobalEventListener.java中
public class GlobalEventListener implements ActivitiEventListener { private static Logger log = LoggerFactory.getLogger(im.java.workflow.activiti.support.WfLogger.NAMW); @Override public void onEvent(ActivitiEvent event) { log.info("流程事件信息【流程定义:{},流程实例:{},执行id:{},操作:{}】", event.getProcessDefinitionId(), event.getProcessInstanceId(), event.getExecutionId(), event.getType()); System.out.println("捕获事件类型:"+event.getType().name()+"type="+ToStringBuilder.reflectionToString(event); } @Override public boolean isFailOnException() { return LocalStorgeUtil.get().PROCESS_GLOBE_EVENT_LISTENER_FAILED; }}
- 处理捕获事件
在im.java.workflow.activiti.listener.GlobalEventListener.java中
public class GlobalEventListener implements ActivitiEventListener { private static Logger log = LoggerFactory.getLogger(im.java.workflow.activiti.support.WfLogger.NAMW); @Override public void onEvent(ActivitiEvent event) { log.info("流程事件信息【流程定义:{},流程实例:{},执行id:{},操作:{}】", event.getProcessDefinitionId(), event.getProcessInstanceId(), event.getExecutionId(), event.getType()); System.out.println("捕获事件类型:"+event.getType().name()+"type="+ToStringBuilder.reflectionToString(event); ActivitiEventType eventType = event.getType(); switch(eventType){ case:ENGINE_CREATE: System.out.println("流程初始化"); break; case:ENGINE_CLOSE: System.out.println("流程关闭"); break; } } @Override public boolean isFailOnException() { return LocalStorgeUtil.get().PROCESS_GLOBE_EVENT_LISTENER_FAILED; }
动态注册事件处理
动态的维护事件处理池引擎开发的接口,在RuntimeService接口中使用以下几个方法:
void addEventListener(ActivitiEventListener listenerToAdd)
void addEventListener(ActivitiEventListener listenerToAdd ,ActivitiEventType type)
void removeEventListener(ActivitiEventListener listenerToAdd);
任务自动转办
1.使用任务的监听器来实现
在节点中添加任务的监听器组件
<userTask id="reportTask" name="出差" activiti:assignee="${applyUserId}"> <extensionElements> <activiti:taskListener event="create" class="im.java.workflow.TaskAutoRedirectListener"/> </extensionElements></userTask>
java代码
public class TaskAutoRedirectListener implements TaskListener{ private Static Map<String,String> userMap = new HashMap<String,String>(); static{userMap.put("kankang","mingming")}; @Override public void notify(DelegateTask delegateTask){ String originAssginee = delegateTask.getAssignee(); String newUser = userMap.get(originAssginee); if(StringUtil.isNotBlank(newUser)){ delegateTask.setAssignee(newUser); EngineServices engineServices = delegateTask.getExecution().getEngineServices(); TaskService taskService = engineServices.getTaskService(); String message =getClass().getName()+"->任务【"delegateTask.getName()+"】办理人【"+originAssginee+"】自动转给【"+newUser+"】"; taskService.saveCommand(delegateTask.getId(),delegateTask.getProcessInstanceId(),"redirect",message); }else{ } } }}
在全局监听器execute()方法中配置,更改销假任务中办理人的断言
String currentUserId = "kangkang";Task reportbaskTask = taskService.createTaskQuery().singleResult();List<Commant> taskComents = taskService.getTaskComments(reportbaskTask.getId(),"delegate");for(Comment comment in taskComments){ System.out.println(comment.getFullMessage());}assertEquals(currentUserId,reportbaskTask.getAssignee());
2.使用全局事件处理器
<property name = "typedEventListeners"> <map> <entry key="TASK_CREATED"> <list> <bean class="im.java.workflow.TaskAutoRedirectListener"/> </list> </entry> </map></property>
im.java.workflow.TaskAutoRedirectListener.java中的代码
public class TaskAutoRedirectListerner implements ActivitEventListener{ private static Map<String,String> userMap = new HashMap<String,String>(); static{"kangkang","mingming"}; @Override public void onEvent(ActivitiEvent event){ ActivitiEntityEvent entityEvent = (ActivitiEntityEvent)event; Object entity = entiryEvent.getEntity(); if(entity instanceof TaskEntity){ TaskEntity task = (TaskEntity) entity; String originUserId = task.getAssignee(); String newUserId = userMap.get(originUserId); if(StringUtil.isNotBlank(newUserId)){ task.setAssignee(newUserId); } } }}
0 0
- activiti中的事件处理器(EventHandler)
- EventHandler(事件处理器)学习
- EventHandler 事件 (Adding)
- Hbase 执行事件(EventHandler 、 ExcutorService 、Excutor)
- 事件三(使用EventHandler)
- 事件委托 EventHandler
- c# 事件 EventHandler
- 事件委托 EventHandler 。
- Activiti 中的 Start event(启动事件元素)介绍
- C# 中的EventHandler
- C# 中的EventHandler
- C# 中的EventHandler
- C#控制台基础 helloworld之 用类中的EventHandler委托的事件输出
- JavaScript中事件处理器中的event参数
- Spark中的事件循环处理器EventLoop
- EventHandler
- 微信公众号开发(十二):推送消息处理器之订阅事件处理器、菜单点击处理器、二维码扫描事件处理器、位置事件处理器、取消订阅事件处理器
- 事件(触发器)、事件处理器(行为)
- java入门(向上转型和向下转型)
- Android Activity 设置 窗口大小
- .net Enumerable类型的方法的一些理解
- ssm
- Servlet监听器(附带spring中监听器使用分析)
- activiti中的事件处理器(EventHandler)
- 通信系统建模与仿真 笔记1
- python 中关于dict的总结
- 高颜值的大数据报告 触手可得!
- ElasticSearch插件手动安装
- 位置无关码、位置有关码、链接地址、加载地址
- Juint测试类、测试集、测试运行器
- ide调用batch时启动以及传递参数
- KVO——使用过程中的陷阱