如果在使用Dataloader更新至少一条记录时出现错误,Salesforce Trigger会跳过整个批处理

时间:2012-06-21 09:55:36

标签: triggers salesforce apex-code

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

有人可以给出一些指示吗?

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

VERSION-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);
        }
    }        
}
}

VERSION-2

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;
    //}        
}
}

1 个答案:

答案 0 :(得分:1)

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

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