# 流程全局触发事件扩展

流程平台在流程设计时可以通过流程设计器为流程、活动分别配置触发事件拦截扩展。然而在某些特殊场景下,需要对整个平台或应用的所有流程进行统一拦截处理,如果通过在线分别配置的方式效率比较低。因此流程平台提供了全局触发事件扩展点,可以采用二次扩展开发的方式,支持全局或应用内部流程、活动的统一触发事件拦截。扩展方式说明如下:

# 接口列表

接口描述 接口全名
流程触发事件监听 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>

# 开发说明

  1. 选择触发事件类型,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 工作项完成前
  2. 实现com.primeton.workflow.engine.scheduler.spi.TriggerEventListener、com.primeton.workflow.engine.scheduler.spi.Global两个接口

  3. onTriggerEvent方法中实现事件操作

  4. 在项目resource/META-INF目录下创建 com.primeton.workflow.engine.scheduler.spi.TriggerEventListener文件,文件中按行填写触发器全路径,例如:com.primeton.workflow.engine.scheduler.spi.event.message.MessageCenterWorkItemAfterCreateEventListener;isGlobal=true;

  5. 触发事件中如何获取流程相关信息方法

    1. 获取当前工作项:在onTriggerEvent中使用事件参数,通过event.getContext().getCurrentWorkItem();获取当前工作项
    2. 获取当前活动的所有工作项:WFServiceFactory.getService(IWFInstancePool.class).findActivityInstanceByID(actInstId).getActivityInstContext().findAllWorkItems();actInstId可以从当前工作项获取
    3. 获取相关数据:WFServiceFactory.getService(IWFInstancePool.class).findProcessInstanceByID(processInstId).getProcessInstContext().getRelativeDataContextEntity().get(xpath);其中processInstId可从当前工作项获取。还可以通过事件参数 event.getContext().getRelativeData(xpath),xpath为相关数据的xpath路径
    4. 获取活动实例:在onTriggerEvent中使用事件参数,通过event.getContext().getCurrentActivityInst();获取活动实例
    5. 获取参与者:获取当前工作项后,通过工作项的getParticipants()方法获取参与者

# 开发例子

  1. 创建普通的Java、maven项目(不是springboot项目),项目结构如下

    └─src
        └─main
            ├─java
            │  └─com
            │      └─bps
            │          └─trigger
            │                  TestTrigger.java
            │
            └─resources
                └─META-INF
                        com.primeton.workflow.engine.scheduler.spi.TriggerEventListener
    
  2. pom中增加依赖(bps.version具体值取决于依赖bps的版本)

    <dependency>
        <groupId>com.primeton.bps</groupId>
        <artifactId>bps-server-engine-scheduler</artifactId>
        <version>${bps.version}</version>
    </dependency>
    
  3. 创建触发器类,例如

    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
            
            //当事件触发时,在这里做触发逻辑
        }
    }
    
  4. 修改src\main\resources\META-INF\com.primeton.workflow.engine.scheduler.spi.TriggerEventListener文件

  5. 完成后使用mvn install命令打成jar包,然后放到bps的lib目录下,重启bps即可

上次更新: 2023/7/20下午12:25:28