节点事件
概述
节点事件是在流程节点执行过程中触发的钩子函数,允许您在特定时机插入自定义业务逻辑,实现与业务系统的深度集成。
事件类型
| 序号 | 事件类型 | 触发时机 | 常用场景 |
|---|---|---|---|
| 1 | 打开节点时执行 | 节点被打开时 | 获取或初始化数据 |
| 2 | 进入节点执行 | 节点开始执行前 | 数据校验、前置条件检查、发送通知 |
| 3 | 离开节点执行 | 节点执行完成后 | 记录执行日志、更新业务状态、触发后续业务操作 |
| 4 | 操作完成前执行 | 操作执行前 | 操作前数据验证、权限校验 |
| 5 | 操作完成后执行 | 操作执行完成后 | 记录执行日志、更新业务状态、触发后续业务操作 |
实现方式
产品提供两种实现方案:
| 方案 | 说明 | 适用场景 |
|---|---|---|
| Java 实现 | 在工作流内直接新建实现类,可获取全量流程信息 | 需要深度定制开发,获取完整流程上下文 |
| REST 实现 | 通过接口调用第三方服务 | 与外部业务系统集成,松耦合场景 |

Java 方式配置说明
实现步骤
- 在
src下新建 Java 类,继承BaseRuleImpl并实现IBaseRule接口 - 在
executeRule方法中编写自定义业务逻辑 - 将类路径(如
com.horizon.example.NodeEvent)配置到节点事件中
实现类示例
java
package com.horizon.example;
import com.horizon.common.collect.Lists;
import com.horizon.db.Access;
import com.horizon.wf.bean.WorkParaBean;
import com.horizon.wf.core.rule.BaseRuleImpl;
import com.horizon.wf.core.rule.IBaseRule;
import com.horizon.wf.core.runtime.RunningData;
import com.horizon.wf.definition.pub.IFlowNode;
import com.horizon.wf.definition.xml.IXmlNode;
import com.horizon.wf.entity.db.DBTrack;
import com.horizon.wf.entity.db.DBWork;
import com.horizon.wf.entity.run.RunUser;
import com.horizon.wf.entity.user.IRunUser;
import com.horizon.wf.global.StaticVarExtend;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 打开节点、进入节点、离开节点、操作完成前、操作完成后事件自定义
* com.horizon.example.NodeEvent
*/
public class NodeEvent extends BaseRuleImpl implements IBaseRule {
public boolean executeRule() {
// 从引擎获取核心数据对象
RunningData runningdata = getRunningdata();
// 事件处理类额外传入参数
IFlowNode eventNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_IFlowNode);
IFlowNode curNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_Current_IFlowNode);
WorkParaBean paraBean = (WorkParaBean) getParameter(StaticVarExtend.Parameter_WorkParaBean);
DBWork work = (DBWork) getParameter(StaticVarExtend.Parameter_DBWork);
IRunUser user = (IRunUser) getParameter(StaticVarExtend.Parameter_RunUser);
DBTrack track = (DBTrack) getParameter(StaticVarExtend.Parameter_DBTrack);
Map<String, List<Object>> dataMap = (Map<String, List<Object>>) getParameter(StaticVarExtend.Parameter_SaveMap);
String eventType = (String) getParameter("eventType");
// 获取流程审批页内的信息
LinkedHashMap otherMap = (LinkedHashMap) paraBean.getOtherPara();
String pageID = otherMap.get("FORMID") == null ? "" : otherMap.get("FORMID").toString();
String formID = otherMap.get(pageID + "_FORMID") != null ? otherMap.get(pageID + "_FORMID").toString() : "";
String dataId = otherMap.get(formID + "_ID") != null ? otherMap.get(formID + "_ID").toString() : "";
// 执行 SQL(推荐使用 dataMap 方式与流程事务同步)
String updateSql = "update T_ZHUBIAO set a6=123,a5=222 where id = ?";
List<Object> para = Lists.newArrayList(dataId);
dataMap.put(updateSql, para);
return true;
}
}可用参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
Parameter_IFlowNode | IFlowNode | 执行事件的节点对象 |
Parameter_Current_IFlowNode | IFlowNode | 当前节点对象 |
Parameter_WorkParaBean | WorkParaBean | 引擎调用时传入的参数对象 |
Parameter_DBWork | DBWork | 当前实例对象 |
Parameter_RunUser | IRunUser | 当前执行人对象 |
Parameter_DBTrack | DBTrack | 当前路径对象 |
Parameter_SaveMap | Map | 需要保存的 SQL 数据 |
事件配置步骤
进入流程设计器,找到需要配置事件的节点
打开节点属性,切换到「事件」配置页面

首次添加事件:点击「新增」按钮添加配置

填写事件信息:添加事件说明和实现类路径

配置事件类型:选择具体的事件触发时机

Java 方式扩展说明
获取流程发起人信息
java
String creator = getRunningdata().getWork().getCreator();
Organization organization = ThirdAdapterFactory.instanse(HorizonCore.TENANT_CODE.value()).getOrganizationInstance();
Map<String, String> user = organization.getUserById(creator, HorizonCore.TENANT_IDENTIFIER.value());
String deptName = organization.getNameByIds(user.get("dept_id"), HorizonCore.TENANT_IDENTIFIER.value());获取流程变量值
java
runningdata.getFlowVar().getAllFlowVarMap()修改流程变量值
java
getRunningdata().putValueToFlowVar("a", "2");获取节点参数
java
// 获取当前节点参数
IFlowNode curNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_Current_IFlowNode);
if (null != curNode) {
for (INodePara iNodePara : curNode.getAllNodePara()) {
System.out.println("节点参数:" + iNodePara.getParaId());
}
}
// 获取执行事件的节点参数(进入事件常用)
IFlowNode eventNode = (IFlowNode) getParameter(StaticVarExtend.Parameter_IFlowNode);
if (null != eventNode) {
for (INodePara iNodePara : eventNode.getAllNodePara()) {
System.out.println("事件节点参数:" + iNodePara.getParaId());
}
}事件下拉框存储位置
事件下拉框存储在库表 TW_HZ_CUSTOMCLS 中,可通过 SQL 查询和插入方式同步到其他环境,执行后立即生效。
REST 方式配置说明
在 8.2.3 版本中,节点事件、自动节点以及办理人设置-自定义功能均新增了 REST 方式支持。需要业务系统新增 POST 接口,流程参数通过请求体传递。
配置步骤
选择实现方式:在事件配置页面选择「REST」方式

填写接口信息:输入接口地址和请求体

保存配置:点击右上角「应用」按钮保存
接口回调说明
如需回调处理,可在工作流中新增实现类,并在接口回调位置配置类路径,例如:com.horizon.demo.event.EventDemo
参考资料
- 主题:REST 方式示例说明(含流程节点事件/办理人设置-自定义/自动节点)
- 链接:点击访问
注意事项
- 返回值:
return true表示执行成功;return false表示执行失败 - 数据保存:使用
dataMap存放 SQL 可与流程一起事务性提交
