我在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;
//}
}
}
答案 0 :(得分:1)
可以使用更多细节,但我假设您正在触发器中执行DML操作。如果使用Database.insert(sobject [],allornone)或Database.update(subject [],allornone)方法,则可以指定all或none,并相应地处理错误。直接从Database对象使用该方法将返回一个SaveResult,然后您可以循环并匹配备份与触发记录,以将错误发送回用户或数据加载器。
再次需要查看一些示例代码,以便为您提供更好的答案。