1

SalesforceのAccountオブジェクトにトリガーを作成しました。Dataloaderを使用してレコードをアップロードすると、エラーがない場合、このトリガーはすべてのレコードで実行されます。ただし、少なくとも1つのレコードの更新/挿入中にエラーが発生した場合は、バッチ全体が失われます。

誰かがこれについて何らかの方向性を与えることができますか?

トリガーの2つのバージョン(前と後)を以下に示します。

バージョン-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);
        }
    }        
}
}

バージョン-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を指定して、それに応じてエラーを処理できます。データベースオブジェクトから直接メソッドを使用すると、SaveResultが返されます。これをループしてトリガーレコードと照合し、エラーをユーザーまたはデータローダーに送り返すことができます。

もう一度、より良い答えを与えるためにいくつかのサンプルコードを見る必要があります。

于 2012-06-21T14:55:48.403 に答える