1

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

有人可以对此给出一些指导吗?

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

版本一

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

版本-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;
    //}        
}
}
4

1 回答 1

1

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

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

于 2012-06-21T14:55:48.403 回答