# 流程全局触发事件扩展
流程平台在流程设计时可以通过流程设计器为流程、活动分别配置触发事件拦截扩展。然而在某些特殊场景下,需要对整个平台或应用的所有流程进行统一拦截处理,如果通过在线分别配置的方式效率比较低。因此流程平台提供了全局触发事件扩展点,可以采用二次扩展开发的方式,支持全局或应用内部流程、活动的统一触发事件拦截。扩展方式说明如下:
# 接口列表
接口描述 | 接口全名 |
---|---|
流程触发事件监听 | com.primeton.workflow.engine.scheduler.spi.TriggerEventListener |
全局触发事件标记 | com.primeton.workflow.engine.scheduler.spi.Global |
# 开发依赖包
<dependency>
<groupId>com.primeton.bps</groupId>
<artifactId>bps-server-engine-scheduler</artifactId>
<version>${bps.version}</version>
</dependency>
# 开发说明
选择触发事件类型,bps种的全局触发事件类型如下所示,选择需要的类型后再开发触发器
触发事件类型 触发事件描述 活动触发事件 ActivityAfterFinishTriggerEvent 活动完成后 ActivityAfterResumeTriggerEvent 活动恢复后 ActivityAfterStartTriggerEvent 活动重启后 ActivityAfterSuspendTriggerEvent 活动挂起后 ActivityBeforeFinishTriggerEvent 活动完成前 ActivityBeforeStartTriggerEvent 活动启动前 流程触发事件 ProcessAfterFinishTriggerEvent 流程完成后 ProcessAfterRemindTriggerEvent 流程提醒后 ProcessAfterResumeTriggerEvent 流程恢复后 ProcessAfterStartTriggerEvent 流程启动后 ProcessAfterSuspendTriggerEvent 流程挂起后 ProcessAfterTimeoutTriggerEvent 流程超时后 ProcessBeforeFinishTriggerEvent 流程完成前 ProcessBeforeStartTriggerEvent 流程启动前 工作项触发事件 WorkItemAfterAssistTriggerEvent 工作项协办后 WorkItemAfterCancelTriggerEvent 工作项取消领取后 WorkItemAfterCreateTriggerEvent 工作项创建后 WorkItemAfterFinishedTriggerEvent 工作项完成后 WorkItemAfterGetTriggerEvent 工作项领取后 WorkItemAfterHandOverTriggerEvent 工作项代办后 WorkItemAfterPressTriggerEvent 工作项催办后 WorkItemAfterRemindTriggerEvent 工作项提醒后 WorkItemAfterRestartTriggerEvent 工作项重启后 WorkItemAfterResumeTriggerEvent 工作项恢复后 WorkItemAfterSignatureTriggerEvent 工作项加签后 WorkItemAfterSuspendTriggerEvent 工作项挂起后 WorkItemAfterTerminateTriggerEvent 工作项终止后 WorkItemAfterTimeoutTriggerEvent 工作项超时后 WorkItemBeforeFinishTriggerEvent 工作项完成前 实现com.primeton.workflow.engine.scheduler.spi.TriggerEventListener、com.primeton.workflow.engine.scheduler.spi.Global两个接口
onTriggerEvent方法中实现事件操作
在项目resource/META-INF目录下创建 com.primeton.workflow.engine.scheduler.spi.TriggerEventListener文件,文件中按行填写触发器全路径,例如:com.primeton.workflow.engine.scheduler.spi.event.message.MessageCenterWorkItemAfterCreateEventListener;isGlobal=true;
触发事件中如何获取流程相关信息方法
- 获取当前工作项:在onTriggerEvent中使用事件参数,通过event.getContext().getCurrentWorkItem();获取当前工作项
- 获取当前活动的所有工作项:WFServiceFactory.getService(IWFInstancePool.class).findActivityInstanceByID(actInstId).getActivityInstContext().findAllWorkItems();actInstId可以从当前工作项获取
- 获取相关数据:WFServiceFactory.getService(IWFInstancePool.class).findProcessInstanceByID(processInstId).getProcessInstContext().getRelativeDataContextEntity().get(xpath);其中processInstId可从当前工作项获取。还可以通过事件参数 event.getContext().getRelativeData(xpath),xpath为相关数据的xpath路径
- 获取活动实例:在onTriggerEvent中使用事件参数,通过event.getContext().getCurrentActivityInst();获取活动实例
- 获取参与者:获取当前工作项后,通过工作项的getParticipants()方法获取参与者
# 开发例子
创建普通的Java、maven项目(不是springboot项目),项目结构如下
└─src └─main ├─java │ └─com │ └─bps │ └─trigger │ TestTrigger.java │ └─resources └─META-INF com.primeton.workflow.engine.scheduler.spi.TriggerEventListener
pom中增加依赖(bps.version具体值取决于依赖bps的版本)
<dependency> <groupId>com.primeton.bps</groupId> <artifactId>bps-server-engine-scheduler</artifactId> <version>${bps.version}</version> </dependency>
创建触发器类,例如
package com.bps.trigger; import com.primeton.workflow.engine.scheduler.spi.Global; import com.primeton.workflow.engine.scheduler.spi.TriggerEventListener; import com.primeton.workflow.engine.scheduler.spi.event.WorkItemAfterFinishedTriggerEvent; /** * 这里创建了一个在工作项完成后的全局触发事件 */ public class TestTrigger implements TriggerEventListener<WorkItemAfterFinishedTriggerEvent>, Global { @Override public void onTriggerEvent(WorkItemAfterFinishedTriggerEvent workItemAfterFinishedTriggerEvent) { //todo do something //当事件触发时,在这里做触发逻辑 } }
修改src\main\resources\META-INF\com.primeton.workflow.engine.scheduler.spi.TriggerEventListener文件
完成后使用mvn install命令打成jar包,然后放到bps的lib目录下,重启bps即可