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

如何以自动化账号身份从Apex调度作业,变更Contact修改人

解决方案

要让调度作业以自动化账号身份修改Contact记录,核心是在执行修改逻辑时切换用户上下文,具体步骤如下:

1. 确保自动化账号具备必要权限

  • 给自动化账号分配Contact对象的Read、Edit权限,以及需要修改字段的编辑权限
  • 确保调度作业的发起用户(也就是你)能访问该自动化账号(比如通过用户列表可见性设置),若发起用户是普通用户,还需要具备Manage Users权限(系统管理员默认拥有该权限)

2. 修改Scheduled Apex类的执行逻辑

在SendTwilioSMSNewContacts类的execute方法中,使用System.runAs()方法切换到自动化账号上下文执行修改操作。示例代码如下:

global class SendTwilioSMSNewContacts implements Schedulable {
    private List<Id> contactIds;

    // 构造方法
    global SendTwilioSMSNewContacts(List<Id> contactIds) {
        this.contactIds = contactIds;
    }

    global void execute(SchedulableContext sc) {
        // 获取自动化账号(替换为你的自动化账号用户名/唯一标识)
        User automationUser = [SELECT Id FROM User WHERE Username = 'automation@yourorg.com' LIMIT 1];

        // 切换到自动化账号上下文执行修改操作
        System.runAs(automationUser) {
            // 查询需要修改的Contact记录
            List<Contact> targetContacts = [SELECT Id, ... FROM Contact WHERE Id IN :contactIds];
            
            // 执行你的修改逻辑
            for(Contact c : targetContacts) {
                c.Last_Name__c = 'UpdatedByAutomation'; // 示例修改字段
            }
            
            // 更新记录
            update targetContacts;
        }

        // 可选:删除已完成的调度作业
        System.abortJob(sc.getTriggerId());
    }
}

关键说明

  • 原代码中调度作业默认以**发起调度的用户(你)**身份运行,所以修改记录的最后修改人显示为你
  • System.runAs()会临时切换用户上下文,所有在代码块内的DML操作都会以指定的自动化账号身份执行,因此最后修改人会变为该自动化账号
  • 注意:System.runAs()不会改变权限层级,若自动化账号没有对应权限,操作会失败,所以务必提前配置好权限

内容的提问来源于stack exchange,提问作者L P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:34:58