You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Salesforce与表格集成:无法获取编辑者邮箱,Session.getActiveUser().getEmail()返回空

问题解答

1. 如何获取修改记录的用户邮箱?

分两种场景处理:

  • Salesforce内记录被修改:每条Salesforce记录自带LastModifiedById字段,存储最后修改该记录的用户ID。通过这个ID关联查询User对象的Email字段即可,示例代码:
    Id modifiedById = targetRecord.LastModifiedById;
    User modifiedUser = [SELECT Email FROM User WHERE Id = :modifiedById LIMIT 1];
    String editorEmail = modifiedUser?.Email;
    
  • 电子表格端修改同步到Salesforce:先从电子表格平台(如Google Sheets、Excel)的API捕获编辑者邮箱,再将该信息同步到Salesforce记录的自定义字段(比如Editor_Email__c),之后直接从这个自定义字段取值。

2. 为何Session.getActiveUser().getEmail()会返回空字符串?

常见原因包括:

  • 当前执行上下文的用户未配置邮箱:比如集成专用用户(Connected App授权用户、自动化流程用户),可能未在Salesforce中设置邮箱字段。
  • 字段级权限限制:当前用户的Profile或Permission Set未被授予查看User.Email字段的权限,即使邮箱存在也无法读取。
  • 无用户上下文的执行环境:定时批处理、队列Apex、部分异步触发器场景下,Session.getActiveUser()返回系统用户,这类用户通常无邮箱配置。
  • 用户个人信息中邮箱字段为空:检查该用户的Salesforce个人设置,确认邮箱是否已填写。

3. Session.getActiveUser().getEmail()如何返回有权访问该电子表格的其他用户的邮箱?

Session.getActiveUser()仅能获取当前执行代码的上下文用户的邮箱,无法直接返回其他有权限用户的信息。要获取这类用户的邮箱,需按以下方式处理:

  • Salesforce记录权限场景:根据对象共享模型,查询对应共享表(如AccountShare、ContactShare),或通过User对象结合权限筛选,示例思路:
    // 查询有权访问指定Account的用户邮箱
    List<User> authorizedUsers = [
        SELECT Email 
        FROM User 
        WHERE Id IN (
            SELECT UserOrGroupId 
            FROM AccountShare 
            WHERE AccountId = :targetAccountId AND RowCause != 'Manual'
        )
    ];
    
  • 电子表格平台权限场景:调用电子表格平台的API(如Google Sheets的Drive API)获取共享用户列表,再匹配Salesforce中的用户邮箱。

内容的提问来源于stack exchange,提问作者Prem Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:52:37