You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动