跳到主要内容

审批事件

审批事件是极态平台中专门处理审批流程状态变更和节点操作的事件处理器,基于事件驱动机制实现审批流程的自动化响应。它负责监听审批状态变更、节点变更和节点处理等关键时机,并自动执行预定义的业务逻辑,支持复杂的审批流程自动化场景。

审批事件元素分层结构为Meta(events.Meta) → Type(events.WorkflowType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建审批事件实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的events.WorkflowType元素,以实现自己的封装。

快速开始

创建实例元素

目录结构

审批事件实例元素目录结构
events/
└── myApprovalEvent/ # 事件元素名称,路径可自定义
├── e.json # 元素配置文件
└── inner.py # 事件处理逻辑(可选)

e.json文件

基础配置示例
{
"title": "订单审批事件",
"type": "events.WorkflowType",
"backendBundleEntry": ".",
"model": "models.OrderModel",
"operate": "Process",
"func": "inner.handleOrderApproval",
"funcType": "inner"
}

业务逻辑代码

inner.py事件处理逻辑
from jit.commons.utils.logger import log

def handleOrderApproval(eventOutData):
"""
处理订单审批事件

参数:
eventOutData: 事件输出数据,包含row(审批行数据)和status(审批状态)
"""
try:
row = eventOutData.row
status = eventOutData.status.value

log.info(f"订单{row.orderNo.value}审批状态变更为: {status}")

# 根据审批状态执行不同逻辑
if status == "approved":
# 审批通过后的业务逻辑
processApprovedOrder(row)
elif status == "rejected":
# 审批拒绝后的业务逻辑
processRejectedOrder(row)

except Exception as e:
log.exception(f"处理订单审批事件异常: {e}")
raise

def processApprovedOrder(row):
"""处理审批通过的订单"""
# 更新订单状态
row.status.value = "processing"
row.save()

def processRejectedOrder(row):
"""处理审批拒绝的订单"""
# 更新订单状态
row.status.value = "cancelled"
row.save()

调用示例

事件自动触发示例
# 审批事件通过审批流程自动触发,无需手动调用
# 当审批状态发生变更时,系统会自动执行配置的事件处理逻辑

# 获取事件元素(用于配置管理)
approvalEvent = app.getElement("events.myApprovalEvent")

元素配置

e.json配置

参数类型必需默认值说明
titleString-事件标题
typeString-固定值: events.WorkflowType
backendBundleEntryString-后端入口路径,通常为"."
modelString-关联的模型fullName
operateString-操作类型: Process/NodeChange/NodeHandled
funcString-事件处理函数
funcTypeString-函数类型: inner/global
triggerNodeList[]触发节点列表(NodeChange时使用)
handleTypeString/List-处理类型(NodeHandled时使用)
handleNodeString-处理节点(NodeHandled时使用)

操作类型详解

审批状态变更事件配置
{
"title": "审批状态变更事件",
"type": "events.WorkflowType",
"model": "models.OrderModel",
"operate": "Process",
"func": "inner.handleStatusChange",
"funcType": "inner"
}
节点变更事件配置
{
"title": "节点变更事件",
"type": "events.WorkflowType",
"model": "models.OrderModel",
"operate": "NodeChange",
"triggerNode": ["node1", "node2"],
"func": "inner.handleNodeChange",
"funcType": "inner"
}
节点处理事件配置
{
"title": "节点处理事件",
"type": "events.WorkflowType",
"model": "models.OrderModel",
"operate": "NodeHandled",
"handleType": ["agree", "reject"],
"handleNode": "approvalNode",
"func": "inner.handleNodeProcessed",
"funcType": "inner"
}

方法

getSender

获取事件发送者信息。

返回值

类型说明
Any事件发送者对象

使用示例

获取事件发送者
def handleApprovalEvent(eventOutData):
event = app.getElement("events.myApprovalEvent")
sender = event.getSender()
log.info(f"事件发送者: {sender}")

isValid

验证事件是否符合触发条件。

参数详解

参数名类型必需说明
*argsTuple事件参数元组
**kwargsDict事件关键字参数

返回值

类型说明
BooleanTrue表示事件有效,False表示无效

使用示例

验证事件有效性
def customEventHandler(eventOutData, *args):
event = app.getElement("events.myApprovalEvent")
if event.isValid(eventOutData, *args):
# 执行事件处理逻辑
processEvent(eventOutData)

handleNode

处理事件节点,设置节点信息和调整参数。

参数详解

参数名类型必需说明
nodeObject事件节点对象
*argsTuple事件参数
**kwargsDict关键字参数

返回值

类型说明
Tuple返回(node, args, kwargs)元组

buildTaskParams

构建任务参数,用于异步任务处理。

参数详解

参数名类型必需说明
*argsTuple事件参数
**kwargsDict关键字参数

返回值

类型说明
Dict任务参数字典,包含row、status、modelFullName

recoverTaskParams

从任务参数恢复事件参数。

参数详解

参数名类型必需说明
taskParamsDict任务参数字典

返回值

类型说明
Tuple返回(args, kwargs)元组

属性

operate

事件操作类型,定义事件的触发条件和处理方式。

说明
Process审批状态变更时触发
NodeChange审批节点变更时触发
NodeHandled审批节点处理完成时触发

config

事件配置信息,包含e.json中定义的所有配置参数。

高级特性

多节点触发配置

配置多个触发节点
{
"title": "多节点触发事件",
"type": "events.WorkflowType",
"model": "models.ContractModel",
"operate": "NodeChange",
"triggerNode": ["deptApproval", "managerApproval", "directorApproval"],
"func": "inner.handleMultiNodeChange",
"funcType": "inner"
}
多节点事件处理
def handleMultiNodeChange(eventOutData, triggerNode):
"""
处理多节点变更事件

参数:
eventOutData: 事件数据
triggerNode: 触发的节点ID
"""
if triggerNode == "deptApproval":
# 部门审批节点逻辑
handleDeptApproval(eventOutData)
elif triggerNode == "managerApproval":
# 经理审批节点逻辑
handleManagerApproval(eventOutData)
elif triggerNode == "directorApproval":
# 总监审批节点逻辑
handleDirectorApproval(eventOutData)

多处理类型配置

配置多种处理类型
{
"title": "多处理类型事件",
"type": "events.WorkflowType",
"model": "models.LeaveModel",
"operate": "NodeHandled",
"handleType": ["agree", "reject", "transfer"],
"handleNode": "hrApproval",
"func": "inner.handleMultipleActions",
"funcType": "inner"
}
多处理类型事件处理
def handleMultipleActions(eventOutData, handleType, nodeId, nodeTitle):
"""
处理多种处理类型事件

参数:
eventOutData: 事件数据
handleType: 处理类型
nodeId: 节点ID
nodeTitle: 节点标题
"""
row = eventOutData.row

if handleType == HandleTypeEnum.agree:
# 同意处理逻辑
processApproval(row, "approved")
elif handleType == HandleTypeEnum.reject:
# 拒绝处理逻辑
processApproval(row, "rejected")
elif handleType == HandleTypeEnum.transfer:
# 转办处理逻辑
processTransfer(row, nodeTitle)

全局函数调用配置

调用全局服务函数
{
"title": "全局函数事件",
"type": "events.WorkflowType",
"model": "models.InvoiceModel",
"operate": "Process",
"func": "services.NotificationSvc.sendApprovalNotification",
"funcType": "global"
}