直接跳到内容

流程插件扩展

简介

AgileBPM 在 Activiti 引擎事件的基础上拓展了一套插件体系,我们可以在不修改旧代码的扩展流程功能。

请注意!

一般的业务需求,您可以通过 全局事件插件 或者 节点事件插件 中的服务接口(HTTP 调用、ServerBean、事务消息、Groovy 脚本)来扩展业务逻辑, 如果需要批量对所有流程增强一种插件能力才需要参考该文档扩展流程能力。

流程插件

流程插件一共有两种

配置式插件

配置类插件需要在设计器中配置,插件根据配置情况去执行,需实现配置式插件接口

java
	com.dstz.bpm.engine.plugin.BpmConfigPlugin

有两种配置插件

  1. 全局插件 :配置在流程全局的插件,在所有流程时机都会执行,可以选择执行时机以及执行节点
  2. 节点插件 :配置在某个节点上的插件,运行到该节点才会执行该插件

可以参考已有插件去实现,如 消息插件 NodeMessagePlugin

运行时插件

在流程运行时执行的插件,无需前端配置页面,需实现运行时插件接口

java
	com.dstz.bpm.engine.plugin.BpmRuntimePlugin

可以参考已有插件去实现,如代理插件BpmTaskAgencyPlugin

BpmPlugin 插件后台接口说明

配置类插件 BpmConfigPlugin与运行时插件 BpmRuntimePlugin 均实现了该接口,请参考说明实现插件功能

  • List<PluginEvent> getSupportEvents()

设置当前插件支持的事件,改插件只会在这些时机执行。

  • String getTitle()

返回插件标题,前端会根据 title 展示插件标题

  • String getKey()

插件的别名,也是 BeanID 前端会根据插件别名设置 JSON key(前后端 key 要保持一致)

  • T parseConfig(JsonNode config)

解析插件定义,获取插件的具体配置, 默认 JSON 解析,子类可重写解析

  • void execute(PluginEvent pluginEvent, T pluginDef, ActionModel actionModel)

插件执行方法,此处写插件的具体执行逻辑,可以使用流程环境变量actionModel,流程设计器中插件配置的信息pluginDef,以及当前是什么时机pluginEvent

在具体执行方法中 就可以实现具体插件的功能了,比如通过插件配置决定是否在当前时机执行,通过插件配置内容推送消息等

  • default boolean isGlobal()

是否流程插件节点插件需要重写下

配置类插件前端开发

  1. 首先在 \agilebpm-ui-v5\agilebpm\package\bpmn-design\package\ab-plugins\modules目录中新增配置页
  2. 然后在 ab-plugins 组件的 ts 文件中引入你的配置页面引用和初始化配置

ab-plugins 组件会通过动态组件的形式加载子组件(插件配置页)

如此我们就可以在流程设计页面看到该插件了

配置页开发可以参考 ~/agilebpm/package/bpmn-design/package/ab-plugins/modules/nodeMessage.vue

配置页 prop 入参
  • flow-setting: 流程配置属性信息
  • node-config: 节点属性配置信息
  • plugin-data: 插件配置 JSON(就是后台的 PluginDef 的配置 JSON)
  • bo-list: 业务对象信息

前端主要就是针对 plugin-data 进行配置了,配置后的内容,在插件执行时就可以通过 pluginDef 拿到了,我们可以根据具体配置执行具体逻辑。

TIP

如果需要初始化时默认配置该插件的话,可以在 defaultConfigJson.js 的 defaultFlow 中定义。

示例插件逻辑交互说明

  1. 首先我们在流程设计器配置在那些时机推送消息
  2. 消息发送插件 NodeMessagePlugin 会在流程初始化时执行 parseConfig 解析插件具体配置
  3. 然后流程启动后,当在消息插件定义的时机时,消息插件就会执行execute方法,消息插件会根据配置内容判断是否执行,以及向谁推送消息
流程插件扩展 has loaded