Skip to main content

消息通知组件

消息通知组件(Notification)用于在流程中向指定接收人发送消息通知。

概述​

消息通知组件基于预先配置好的通知消息模板发送通知。配置时先选择模板,再选择发送人与接收人,并可附加跳转链接与通知场景,便于接收人快速定位业务并归类消息。

配置项​

配置项说明
通知消息模板发送所使用的消息模板,必填,下拉可搜索
发送人通知的发送人,必填,缺省为「系统」
接收人类型接收人的确定方式,必填,缺省为「当前登陆人」
选择接收人接收人类型为「直接选人」时配置,必填
链接地址通知中附带的跳转链接
通知场景通知的场景分类,便于按场景筛选或批量关闭通知
输出到最终结果开启后该组件结果作为接口返回值

发送人取值​

界面名称值(SenderType)说明
系统System以系统身份发送,缺省值
当前登录人CurrentLoginUser以当前登录用户身份发送

接收人类型取值​

界面名称值(ReceiverType)说明
当前登陆人0发送给当前登录用户,缺省值
直接选人1手动指定接收人,支持用户、组织、身份、角色等
上下文参数获取 (NotifyUserIds)2从流程上下文的 NotifyUserIds 参数中获取接收人

直接选人​

接收人类型为「直接选人」时,可通过接收人选择器指定接收范围,支持以下选人方式:

选人方式说明
用户直接选择具体用户
组织选择组织机构,其成员作为接收人
身份按身份选择用户
角色按角色选择用户
组织负责人选择组织负责人
动态选人按动态规则选人
接口选人由指定的平台接口动态返回接收人

使用场景​

  • 审批结果通知
  • 任务分派提醒
  • 业务事件变更通知

下一步​

属性明细​

以下内容面向技术实现与 AI 检索,说明消息通知组件的节点元数据。

节点元数据​

消息通知组件由 FlowCmpType.Notification 标识:

属性名类型含义取值/存储值
typestring组件类型固定为 "Notification"
MessageTemplateIdstring(GUID)通知消息模板 id模板 id,必填
SenderTypestring发送人"System"(缺省)/ "CurrentLoginUser"
ReceiverTypestring接收人类型"0"(缺省)/ "1" / "2"
Receiversstring(JSON)接收人配置接收人类型为 "1" 时使用,选人配置 JSON
Linkstring链接地址通知附带跳转链接
Scenestring通知场景场景标识,用于消息归类
IsFinalResultstring(bool)是否输出到最终结果"true" / "false"
orderstring同级排序例:"7"

元数据存储示例​

{
"ID": "notify1",
"type": "Notification",
"MessageTemplateId": "9c1f2a34-5b6d-4e7f-8a90-1b2c3d4e5f60",
"SenderType": "System",
"ReceiverType": "1",
"Receivers": "[]",
"Link": "/detail?id=123",
"Scene": "order",
"order": "7"
}

服务端执行逻辑​

消息通知组件由 NotificationComponentManager 实现,继承 TriggerComponentManagerBase(再继承 InterfaceComponentManagerBase),组件类型为 FlowComponentTypeEnum.Notification。因继承自触发器基类,在触发器链路中还会额外执行节点级执行追踪。

节点 meta 中的所有值均以字符串存储,服务端统一通过 SafeGet("Key") 读取字符串。

执行时机与场景​

流程执行到该节点时,按接收人类型解析出接收人集合,为每位接收人构造一条通知请求并批量发送。

输入参数(meta 键)​

键读取方式含义
MessageTemplateIdmeta.SafeGet("MessageTemplateId")消息模板 Id,必填
SenderTypemeta.SafeGet("SenderType")发送人,必填
ReceiverTypemeta.SafeGet("ReceiverType")接收人类型,必填
Receiversmeta.SafeGet("Receivers")直接选人配置 JSON
Linkmeta.SafeGet("Link")跳转链接
Scenemeta.SafeGet("Scene")通知场景
IsFinalResultmeta.SafeGet("IsFinalResult")"true" 时写入成功响应
IsDisabledmeta.SafeGet("IsDisabled") == "true"为 true 时跳过本组件

上下文入参(context.DicParam):BizDataIds、MetaObjectId、MetaObjectCode、NotifyUserIds。

执行步骤​

  1. 校验期:MessageTemplateId、SenderType、ReceiverType 依次非空校验;ReceiverType == "1" 时 Receivers 必须能反序列化为非空 List<AdvancedSelectItem>。
  2. 执行期解析发送人:System → 系统默认用户,CurrentLoginUser → 当前登录用户,其它 → 系统默认用户。
  3. 解析接收人:
    • "0":当前登录人;
    • "1":IUserInformationService.GetAdvancedUserSelectorResultAsync(new AdvancedUserSelectorRequest { Config = Receivers }) 解析;
    • "2":取 DicParam["NotifyUserIds"],按英文逗号分隔;
    • 其它:抛「不支持的通知接收人类型」。
  4. 接收人为空则直接调用 ExecuteNextAsync,不发送通知。
  5. 为每位接收人构造 NotificationRequest(Sender、Receiver、TemplateId、Parameters = context.DicParam、Link、BizDataId = 首个业务数据 Id、MetaObjectId、MetaObjectCode、Scene)。
  6. 调用 INotificationService.NotifyAsync(models) 批量发送。
  7. IsFinalResult = "true" 时 context.Result = ResponseResult.Success()。
  8. 调用 ExecuteNextAsync 继续下游。

输出与上下文​

字段说明
context.ResultIsFinalResult = "true" 时为 ResponseResult.Success()
Parameters直接使用整个 context.DicParam 作为模板参数

权限、安全与限制​

  • 消息模板须预先配置,模板 Id 必填。
  • 接收人类型为 "2" 时依赖上游写入 DicParam["NotifyUserIds"](建议非空时追加而非覆盖)。
  • 继承 TriggerComponentManagerBase:触发器链路中会通过执行收集器记录本节点的成功 / 失败与耗时,接口链路不受影响。

异常与校验​

  • 模板参数错误、发送人参数错误、接收人类型参数错误、接收人参数错误、接收人类型不支持,均在相应阶段抛出对应异常。