如何在Salesforce中创建自定义应用内通知?自定义对象值变更能否触发通知?
Salesforce应用内通知相关问题解答
嘿,我来帮你搞定这两个关于Salesforce应用内通知的问题:
问题1:如何在Salesforce中创建自定义应用内通知?
创建自定义应用内通知分两大步:先定义通知类型,再通过代码或自动化工具发送通知,具体操作如下:
1. 创建通知类型(Notification Type)
这是通知的"模板",决定了通知的样式和基础内容:
- 进入Salesforce Setup,搜索「Notification Types」
- 点击「New」,填写名称、API名称(后续会用到),选择通知渠道为「In-App」
- 填写默认的标题和消息模板(可以用合并字段动态填充内容),还可以关联特定对象(方便后续跳转到记录)
- 保存后,记下这个通知类型的ID,后面发送通知时要用到
2. 发送自定义通知的两种方式
方式一:用Apex代码发送
适合需要复杂逻辑的场景,示例代码如下:
// 构建通知对象 Messaging.InAppNotification customNotification = new Messaging.InAppNotification(); // 替换成你创建的通知类型ID customNotification.notificationTypeId = '0MLXXXXXXXXXXXX'; // 接收通知的用户ID列表(可以是单个或多个用户) customNotification.recipientIds = new List<String>{'005XXXXXXXXXXXX'}; // 自定义通知标题和内容 customNotification.title = '新的自定义通知'; customNotification.body = '这是通过Apex发送的应用内通知'; // 可选:设置点击通知跳转的记录ID customNotification.targetId = 'a00XXXXXXXXXXXX'; // 发送通知并检查结果 List<Messaging.SendNotificationResult> sendResults = Messaging.sendInAppNotification(new List<Messaging.InAppNotification>{customNotification}); for(Messaging.SendNotificationResult result : sendResults) { if(!result.isSuccess()) { for(Messaging.Error err : result.getErrors()) { System.debug('通知发送失败:' + err.getMessage()); } } }
方式二:用Flow(推荐无代码场景)
适合不需要写代码的自动化场景:
- 新建一个「Auto-launched Flow」或「Record-Triggered Flow」
- 添加「发送自定义通知」元素,选择你创建的通知类型
- 设置接收用户(比如特定角色、记录所有者)、动态标题/内容(用合并字段),关联目标记录
- 保存并激活Flow即可
问题2:自定义对象记录变更时,能否触发应用内通知?
当然可以!你可以通过自动化工具或Apex触发器,在自定义对象记录字段变更时自动发送通知,具体实现方式:
前置准备
先按照问题1的步骤,创建一个对应场景的通知类型(比如命名为「自定义对象记录变更通知」)
实现方式
方式一:用Record-Triggered Flow(无代码,推荐)
- 新建「Record-Triggered Flow」,选择你的自定义对象,触发条件设置为「记录被创建或更新」,还可以添加过滤条件(比如仅当特定字段变更时触发)
- 添加「发送自定义通知」元素,选择刚才创建的通知类型:
- 接收用户:可以选择记录所有者、相关联系人或特定用户
- 标题/内容:用合并字段动态生成,比如
"记录 {!$Record.Name} 已更新",消息里可以说明变更的字段和新旧值
- 保存并激活Flow,之后只要符合触发条件,就会自动发送通知
方式二:用Apex触发器(适合复杂逻辑)
如果需要更灵活的判断逻辑,可以写一个After Update触发器:
trigger CustomObjectUpdateTrigger on Custom_Object__c (after update) { List<Messaging.InAppNotification> notificationsToSend = new List<Messaging.InAppNotification>(); for(Custom_Object__c newRec : Trigger.new) { Custom_Object__c oldRec = Trigger.oldMap.get(newRec.Id); // 判断特定字段是否变更(比如Status__c字段) if(newRec.Status__c != oldRec.Status__c) { Messaging.InAppNotification notification = new Messaging.InAppNotification(); notification.notificationTypeId = '0MLXXXXXXXXXXXX'; // 替换成你的通知类型ID // 发送给记录所有者 notification.recipientIds = new List<String>{newRec.OwnerId}; notification.title = '记录 ' + newRec.Name + ' 状态更新'; notification.body = '状态从「' + oldRec.Status__c + '」变更为「' + newRec.Status__c + '」'; notification.targetId = newRec.Id; // 点击跳转至该记录 notificationsToSend.add(notification); } } // 批量发送通知 if(!notificationsToSend.isEmpty()) { Messaging.sendInAppNotification(notificationsToSend); } }
内容的提问来源于stack exchange,提问作者Anto Joy




