salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗

在 Salesforce 中,标准的 Roll-Up Summary 字段仅支持在主对象和子对象之间的聚合统计,而邮件(Email Message)通常与 Case 是通过活动(Activity)或任务(Task)间接关联的,这意味着标准的 Roll-Up Summary 字段无法直接在 Case 上统计关联的邮件数量。

要解决这个问题,可以考虑以下替代方法:

方法 1:使用 Flow 或 Process Builder 自动统计

  1. 新建自定义字段:在 Case 对象上新建两个自定义数字字段,分别用于统计收到和发送的邮件数量,例如"Received Emails"和"Sent Emails"。

  2. 设置触发条件

    • 使用 FlowProcess Builder 监控 Email Message 对象,当有新的邮件创建并关联到某个 Case 时触发更新。
  3. 设置逻辑

    • 在 Flow 或 Process Builder 中,检查发件人邮箱后缀是否为 @espressif.com
    • 如果发件人邮箱符合条件,增加 "Sent Emails" 计数,否则增加 "Received Emails" 计数。
  4. 保存并激活:将流程保存并激活。这样,每当有新邮件关联到 Case 时,系统会自动更新统计字段。

方法 2:Apex Trigger

如果 Flow 或 Process Builder 无法满足需求,您也可以考虑用 Apex Trigger 编写自定义逻辑,这样可以更灵活地处理复杂的统计需求。

示例代码:

apex 复制代码
trigger EmailCountOnCase on EmailMessage (after insert, after delete) {
    Map<Id, Case> casesToUpdate = new Map<Id, Case>();
    
    if (Trigger.isInsert) {
        for (EmailMessage em : Trigger.new) {
            if (em.RelatedToId != null && em.RelatedToId.getSObjectType() == Case.SObjectType) {
                Id caseId = em.RelatedToId;
                Case caseToUpdate = casesToUpdate.get(caseId);
                if (caseToUpdate == null) {
                    caseToUpdate = new Case(Id = caseId);
                    casesToUpdate.put(caseId, caseToUpdate);
                }
                
                if (em.FromAddress.endsWith('@espressif.com')) {
                    caseToUpdate.Sent_Emails__c = (caseToUpdate.Sent_Emails__c == null ? 0 : caseToUpdate.Sent_Emails__c) + 1;
                } else {
                    caseToUpdate.Received_Emails__c = (caseToUpdate.Received_Emails__c == null ? 0 : caseToUpdate.Received_Emails__c) + 1;
                }
            }
        }
    } else if (Trigger.isDelete) {
        for (EmailMessage em : Trigger.old) {
            if (em.RelatedToId != null && em.RelatedToId.getSObjectType() == Case.SObjectType) {
                Id caseId = em.RelatedToId;
                Case caseToUpdate = casesToUpdate.get(caseId);
                if (caseToUpdate == null) {
                    caseToUpdate = new Case(Id = caseId);
                    casesToUpdate.put(caseId, caseToUpdate);
                }
                
                if (em.FromAddress.endsWith('@espressif.com')) {
                    caseToUpdate.Sent_Emails__c = (caseToUpdate.Sent_Emails__c == null ? 0 : caseToUpdate.Sent_Emails__c) - 1;
                } else {
                    caseToUpdate.Received_Emails__c = (caseToUpdate.Received_Emails__c == null ? 0 : caseToUpdate.Received_Emails__c) - 1;
                }
            }
        }
    }

    if (!casesToUpdate.isEmpty()) {
        update casesToUpdate.values();
    }
}

方法 3:使用 AppExchange 插件

如果不熟悉 Apex 编程,也可以在 AppExchange 上查找支持 Roll-Up Summary 增强功能的插件,例如 Declarative Lookup Rollup Summaries,它允许创建跨多个对象的统计字段,适用于非标准主-子关系。

以上方法能够帮助在 Case 对象中统计关联的 Email 数量,如果您有更多问题或需要进一步帮助,请告知。

相关推荐
0wioiw05 分钟前
Redis(④-消息队列削峰)
数据库·redis·缓存
Runing_WoNiu20 分钟前
Mysql与Ooracle 索引失效场景对比
数据库·mysql·oracle
beijingliushao29 分钟前
32-Hive SQL DML语法之查询数据
数据库·hive·sql
JIngJaneIL1 小时前
专利服务系统平台|个人专利服务系统|基于java和小程序的专利服务系统设计与实现(源码+数据库+文档)
java·数据库·小程序·论文·毕设·专利服务系统平台
__风__1 小时前
windows 上编译PostgreSQL
数据库·postgresql
木木子99992 小时前
数据库范式
数据库
涛思数据(TDengine)2 小时前
通过最严时序标准,再登产业图谱榜首,TDengine 时序数据库在可信数据库大会荣获双荣誉
大数据·数据库·时序数据库·tdengine·涛思数据
涛思数据(TDengine)2 小时前
新客户 | TDengine 时序数据库是怎么在钢厂“撬动”PI 的?
大数据·运维·数据库·时序数据库·tdengine
程序员柳2 小时前
基于Flask + Vue3 的新闻数据分析平台源代码+数据库+使用说明,爬取今日头条新闻数据,采集与清洗、数据分析、建立数据模型、数据可视化
数据库·数据分析·flask
哈基米喜欢哈哈哈3 小时前
Uber的MySQL实践(一)——学习笔记
数据库·笔记·后端·mysql