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

Salesforce批量设置密码遇DML错误:超150用户失败求解决方案

批量设置用户密码的解决方案

问题根源:System.setPassword()属于单条DML操作,Salesforce单事务内允许的DML语句调用上限是150次。你循环遍历用户列表逐个调用该方法,当用户数超过150时,必然触发DML次数超限错误。

解决方式:使用批处理(Batch Apex),将用户列表拆分为多个批次(每个批次最多150条),每个批次单独执行事务,规避单事务的DML次数限制。

以下是可直接使用的批处理代码:

public class SetUserPasswordBatch implements Database.Batchable<SObject> {
    private String targetPassword;
    
    // 构造方法传入要设置的密码
    public SetUserPasswordBatch(String password) {
        targetPassword = password;
    }

    // 查询需要处理的用户
    public Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator([SELECT Id FROM User WHERE IsActive = true]);
    }

    // 批量处理每个批次的用户
    public void execute(Database.BatchableContext bc, List<User> scope) {
        for(User usr : scope) {
            System.setPassword(usr.Id, targetPassword);
            System.debug('已设置密码: ' + usr.Id);
        }
    }

    // 批处理完成后的收尾操作(可选)
    public void finish(Database.BatchableContext bc) {
        System.debug('所有用户密码设置完成');
    }
}

执行批处理的方式:在开发者控制台的匿名窗口中运行以下代码:

SetUserPasswordBatch batchJob = new SetUserPasswordBatch('xxxxxxxx');
Database.executeBatch(batchJob, 150); // 第二个参数指定每个批次的大小,设为150刚好符合限制

注意事项:

  • 批处理会自动拆分用户列表为多个批次,每个批次单独执行,不会触发单事务DML次数限制
  • 确保密码符合Salesforce的密码复杂度要求,否则会触发密码验证错误
  • 执行批处理需要对应的权限(如“修改用户”权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:10:54