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
相关产品推荐
相关产品推荐

