Triggers 如果使用Dataloader更新至少一条记录时出错,Salesforce触发器将跳过整个批处理

Triggers 如果使用Dataloader更新至少一条记录时出错,Salesforce触发器将跳过整个批处理,triggers,salesforce,apex-code,Triggers,Salesforce,Apex Code,我在Salesforce中的Account对象上编写了一个触发器。当我使用Dataloader上传记录时,如果没有错误,这个触发器将在所有记录上执行。但是,如果在更新/插入至少一条记录时出错,它将错过整个批处理 有人能给我一些指导吗 请在下面找到触发器的两个版本(之前和之后): 第1版 trigger accountScorerTrigger on Account (after insert, after update) { if(Trigger.isUpdate || Trigger.isI

我在Salesforce中的Account对象上编写了一个触发器。当我使用Dataloader上传记录时,如果没有错误,这个触发器将在所有记录上执行。但是,如果在更新/插入至少一条记录时出错,它将错过整个批处理

有人能给我一些指导吗

请在下面找到触发器的两个版本(之前和之后):

第1版

trigger accountScorerTrigger on Account (after insert, after update) {

if(Trigger.isUpdate || Trigger.isInsert) {               
    if(Utility.isFutureUpdate){
        List<Account> accList = new List<Account>();
        // Iterate through all records 
        for (Account newAccount:Trigger.new) {
            Account tempAcc = new Account(id = newAccount.id);
            tempAcc.Account_Score_History__c = 'TESTING RECORDS 3';
            accList.add(tempAcc);
        } 
        Utility.isFutureUpdate = false;
        if(accList.size()>0){ 
            //update accList; 
            Database.DMLOptions dml = new Database.DMLOptions();
            dml.optAllOrNone = false; // tried true also                
            database.update(accList,dml);
        }
    }        
}
}

可以使用更多细节,但我假设您正在触发器中执行DML操作。如果使用Database.insert(sobject[],allornone)或Database.update(subject[],allornone)方法,则可以指定all或none,并相应地处理错误。直接从数据库对象使用该方法将返回一个SaveResult,然后您可以循环并与触发器记录匹配备份,以将错误发送回用户或数据加载器


我还需要查看一些示例代码,以便为您提供更好的答案。

可以使用更多详细信息,但我假设您正在触发器中执行DML操作。如果使用Database.insert(sobject[],allornone)或Database.update(subject[],allornone)方法,则可以指定all或none,并相应地处理错误。直接从数据库对象使用该方法将返回一个SaveResult,然后您可以循环并与触发器记录匹配备份,以将错误发送回用户或数据加载器


再次需要查看一些示例代码,以便为您提供更好的答案。

嗨,John,谢谢您的回复。请在下面找到两个版本的触发器(如果至少一条记录中有任何错误,则这两个触发器都会跳过整个批次),您能否澄清您是否同时使用这两个触发器,或者这只是您尝试解决问题的两种不同方法?嗨,John,谢谢您的回答。请在下面找到两个版本的触发器(如果至少一条记录中存在任何错误,则两个触发器都会跳过整个批次),您能否澄清您是否同时使用这两个触发器,或者这只是您尝试解决问题的两种不同方法?
trigger accountScorerTrigger on Account (before insert, before update) {    
if(Trigger.isUpdate || Trigger.isInsert) {               
    //if(Utility.isFutureUpdate){
        // Iterate through all records 
        for (Account newAccount:Trigger.new) {
            newAccount.Account_Score_History__c = 'TESTING RECORDS 5';
        } 
        //Utility.isFutureUpdate = false;
    //}        
}
}