iBizModel 实体通知(PSDENOTIFY)模型详解
iBizModel实体通知(PSDENOTIFY)模型详解
1. 实体通知模型概述
实体通知模型(PSDENOTIFY)是iBizModel模型体系中连接业务实体与消息系统的桥梁,它定义了当特定业务实体发生状态变化或满足特定条件时,系统如何触发通知机制。作为iBizModel消息系统的重要组成部分,PSDENOTIFY实现了业务逻辑与消息通信的解耦,使系统能够灵活地配置各种场景下的通知策略。
实体通知模型的核心价值在于:
- 业务事件驱动:将业务实体的状态变化转化为可配置的通知事件
- 多通道支持:通过消息类型枚举支持多种通知渠道
- 定时触发能力:支持基于时间条件的自动通知
- 任务集成:可与待办任务系统无缝集成
- 灵活配置:通过模板和目标配置实现通知内容和接收者的动态化
在iBizModel架构中,PSDENOTIFY作为PSDATAENTITY(数据实体)的扩展模型,与PSSYSMSGQUEUE(消息队列)、PSSYSMSGTEMPL(消息模板)和PSSYSMSGTARGET(消息目标)等模型紧密协作,共同构建了企业级应用的消息通知基础设施。
2. 关键属性详细说明
2.1 PSDENOTIFY核心属性
2.1.1 基础标识属性
- codename:代码名称,必填,作为模型的唯一代码标识
- name:实体通知名称,必填,用于业务识别,需在模型域内唯一
- psdeid:引用PSDATAENTITY,必填,指定该通知关联的业务实体
2.1.2 消息配置属性
- pssysmsgqueueid:引用PSSYSMSGQUEUE,必填,指定消息发送的队列
- pssysmsgtemplid:引用PSSYSMSGTEMPL,必填,指定消息内容模板
- msgtype:通知消息类型,必填,枚举值(见下文详细说明)
2.1.3 时间相关属性
- timermode:是否定时发送模式,必填,1表示是,0表示否
- checktimer:定时通知的检查间隔,以分钟为单位
- beginpsdefid:引用PSDEFIELD,指定当前实体的开始时间属性
- endpsdefid:引用PSDEFIELD,指定当前实体的结束时间属性
- notifystart:实体通知的起始通知时间间隔,以分钟为单位(相对于开始时间)
- notifyend:实体通知的结束通知时间间隔,以分钟为单位
2.1.4 扩展配置属性
- psdedsid:引用PSDEDATASET,指定定时发送的检查数据集
- taskmode:实体通知任务模式,枚举值(见下文详细说明)
- notifytag/notifytag2:通知标记,用于分类和过滤
- pssyssfpluginid:引用PSSYSSFPLUGIN,后端扩展插件
2.2 关键枚举值详解
2.2.1 通知消息类型(msgtype)
该枚举定义了通知消息的发送渠道,支持位运算组合(如3=1+2表示同时发送系统消息和电子邮件):
值 | 名称 | 说明 |
---|---|---|
1 | 系统消息 | 通过系统内部消息中心发送 |
2 | 电子邮件 | 通过邮件系统发送 |
4 | 手机短信 | 通过短信网关发送 |
8 | MSN消息 | 通过MSN即时通讯发送(历史遗留) |
16 | 内部IM消息 | 通过企业内部即时通讯系统发送 |
32 | 微信 | 通过微信公众号/小程序发送 |
64 | 钉钉 | 通过钉钉机器人/应用发送 |
128 | 企业微信 | 通过企业微信应用发送 |
256 | 用户自定义 | 自定义消息通道 |
512 | 用户自定义2 | 第二种自定义消息通道 |
使用示例:
msgtype: 1
:仅发送系统内部消息msgtype: 3
:同时发送系统消息和电子邮件(1+2)msgtype: 97
:发送系统消息、钉钉和企业微信(1+64+128)
2.2.2 实体通知任务模式(taskmode)
该枚举定义了通知与任务系统的集成方式:
值 | 名称 | 说明 |
---|---|---|
0 | 无任务 | 仅发送通知,不创建任务 |
1 | 待办任务 | 同时建立通知用户的待办事项 |
应用场景:
- 审批流程:使用
taskmode: 1
创建待办任务,确保用户必须处理 - 系统告警:使用
taskmode: 0
仅发送通知,无需用户确认
2.3 PSDENOTIFYTARGET关键属性
PSDENOTIFYTARGET是PSDENOTIFY的嵌套成员模型,定义了通知的接收目标:
- name:通知目标名称,必填
- targettype:实体通知目标类型,必填,枚举值(见下文)
- pssysmsgtargetid:引用PSSYSMSGTARGET,系统消息目标
- targetpsdefid:引用PSDEFIELD,目标标识属性
- targettypepsdefid:引用PSDEFIELD,目标类型属性
2.3.1 实体通知目标类型(targettype)
该枚举定义了通知接收目标的获取方式:
值 | 名称 | 说明 |
---|---|---|
DEFIELD | 当前实体属性 | 从当前业务实体的属性中获取目标 |
SYSMSGTARGET | 系统消息目标 | 引用预定义的系统消息目标配置 |
USER | 用户自定义 | 通过自定义逻辑确定目标 |
使用场景:
DEFIELD
:适用于通知发起人、负责人等固定角色SYSMSGTARGET
:适用于需要动态计算的目标,如角色成员、用户组USER
:适用于需要复杂逻辑确定目标的场景
3. 模型关系图例
4. DSL建模示例
4.1 基础实体通知配置
//iBizModelDSL建模指令,目标:配置项目任务完成通知// 定义实体标识
def de_project_task = "ProjMgmt.PROJECT_TASK"
def mod_projmgmt = "ProjMgmt"
def mod_base = "Base"
def mod_wiki = "Wiki"// 项目任务完成通知
psdenotify(codename: "task_complete_notify",name: "任务完成通知",psdeid: de_project_task,pssysmsgqueueid: mod_base + ".Default",pssysmsgtemplid: mod_wiki + ".task_complete_template",msgtype: 3, // 系统消息 + 电子邮件timermode: 0,validflag: 1,notifystart: 0,notifytag: "task",notifytag2: "completion"
) {// 通知目标:任务负责人psdenotifytarget(name: "任务负责人",targettype: "DEFIELD",targetpsdefid: de_project_task + ".ASSIGNEE_ID")// 通知目标:任务关注人psdenotifytarget(name: "任务关注人",targettype: "SYSMSGTARGET",pssysmsgtargetid: "ProjMgmt.task_followers")
}
4.2 定时提醒场景配置
//iBizModelDSL建模指令,目标:配置会议开始前提醒def de_meeting = "Calendar.MEETING"
def mod_calendar = "Calendar"
def mod_base = "Base"
def mod_wiki = "Wiki"// 会议开始前15分钟提醒
psdenotify(codename: "meeting_reminder_15min",name: "会议开始前15分钟提醒",psdeid: de_meeting,pssysmsgqueueid: mod_base + ".Default",pssysmsgtemplid: mod_wiki + ".meeting_reminder_template",msgtype: 97, // 系统消息 + 钉钉 + 企业微信timermode: 1, // 定时模式checktimer: 5, // 每5分钟检查一次beginpsdefid: de_meeting + ".START_TIME",notifystart: 15, // 提前15分钟validflag: 1,notifytag: "meeting",notifytag2: "reminder"
) {// 通知目标:参会人员psdenotifytarget(name: "参会人员",targettype: "SYSMSGTARGET",pssysmsgtargetid: "Calendar.meeting_participants")
}// 会议开始前1小时提醒
psdenotify(codename: "meeting_reminder_1hour",name: "会议开始前1小时提醒",psdeid: de_meeting,pssysmsgqueueid: mod_base + ".Default",pssysmsgtemplid: mod_wiki + ".meeting_reminder_template",msgtype: 3, // 系统消息 + 电子邮件timermode: 1,checktimer: 10,beginpsdefid: de_meeting + ".START_TIME",notifystart: 60,validflag: 1
) {psdenotifytarget(name: "参会人员",targettype: "SYSMSGTARGET",pssysmsgtargetid: "Calendar.meeting_participants")
}
4.3 任务集成场景配置
//iBizModelDSL建模指令,目标:配置审批任务通知def de_approval = "Workflow.APPROVAL"
def mod_workflow = "Workflow"
def mod_base = "Base"
def mod_wiki = "Wiki"// 审批任务创建通知
psdenotify(codename: "approval_task_created",name: "审批任务创建通知",psdeid: de_approval,pssysmsgqueueid: mod_base + ".Default",pssysmsgtemplid: mod_wiki + ".approval_task_template",msgtype: 1, // 仅系统消息timermode: 0,taskmode: 1, // 创建待办任务validflag: 1,notifytag: "approval",notifytag2: "task"
) {// 通知目标:审批人psdenotifytarget(name: "审批人",targettype: "DEFIELD",targetpsdefid: de_approval + ".APPROVER_ID")
}
4.4 多通道通知配置
//iBizModelDSL建模指令,目标:配置系统告警多通道通知def de_system_alert = "Monitor.SYSTEM_ALERT"
def mod_monitor = "Monitor"
def mod_base = "Base"
def mod_wiki = "Wiki"// 高危系统告警通知
psdenotify(codename: "system_alert_high",name: "高危系统告警通知",psdeid: de_system_alert,pssysmsgqueueid: mod_base + ".AlertQueue",pssysmsgtemplid: mod_wiki + ".system_alert_high_template",msgtype: 103, // 系统消息 + 短信 + 钉钉 + 企业微信 (1+4+64+128=197)timermode: 0,validflag: 1,notifytag: "alert",notifytag2: "high"
) {// 通知目标:运维团队psdenotifytarget(name: "运维团队",targettype: "SYSMSGTARGET",pssysmsgtargetid: "Monitor.ops_team")// 通知目标:值班经理psdenotifytarget(name: "值班经理",targettype: "SYSMSGTARGET",pssysmsgtargetid: "Monitor.duty_manager")
}// 一般系统告警通知
psdenotify(codename: "system_alert_normal",name: "一般系统告警通知",psdeid: de_system_alert,pssysmsgqueueid: mod_base + ".Default",pssysmsgtemplid: mod_wiki + ".system_alert_normal_template",msgtype: 3, // 系统消息 + 电子邮件timermode: 0,validflag: 1
) {psdenotifytarget(name: "运维团队",targettype: "SYSMSGTARGET",pssysmsgtargetid: "Monitor.ops_team")
}
5. 总结
iBizModel实体通知模型(PSDENOTIFY)作为连接业务实体与消息系统的桥梁,为企业应用提供了灵活、可配置的通知机制。通过深入理解其关键属性和枚举值,结合实际业务场景进行合理配置,可以实现以下价值:
业务价值:
- 提升用户体验:及时准确的通知增强用户参与度
- 提高工作效率:关键业务事件的自动提醒减少人工跟踪
- 加强流程管控:与任务系统的集成确保业务流程的顺利推进
- 降低运营风险:重要事件的多通道通知确保信息不遗漏
技术优势:
- 模型驱动:基于iBizModelDSL的声明式配置,降低开发复杂度
- 灵活扩展:支持多种消息渠道和自定义扩展
- 与业务解耦:通知逻辑与核心业务逻辑分离,提高系统可维护性
- 丰富的集成点:通过PSDEACTIONLOGIC和PSDELOGICNODE无缝集成业务流程
最佳实践:
- 分层设计:根据业务重要性设计不同级别的通知策略
- 合理使用定时:避免过于频繁的定时检查影响系统性能
- 多通道组合:根据场景重要性选择适当的消息渠道组合
- 标记分类:善用notifytag和notifytag2进行通知分类管理
- 模板复用:设计通用模板并通过参数实现内容定制