(11) 入力規則により複数項目に対してエラー発生時の画面表示

取引先オブジェクトレコード保存時に、入力規則により「取引先名」、「取引先番号」の2項目同時にエラーが発生し、且つ 項目にエラーメッセージを表示する設定している場合に、エラーメッセージを取得して各項目にエラーメッセージを設定して表示をします。入力規則で設定して いるメッセージではないことにご注意ください。

     拡張対象ページのApexクラス : DisplayMultipleError

global with sharing class DisplayMultipleErrorExtender extends SkyEditor2.Extender{

    public DisplayMultipleErrorExtender(DisplayMultipleError extension){
        // Database Query 実行を有効化
        this.useDatabaseQuery = true;
    }

    /*
     * 複数件発生したエラーを各項目にエラーメッセージ表示
     */
    public override void additionalExceptionHandler(SkyEditor2.Errors.SveDmlException ex , SObject[] records){
        // Database.SaveResult( or Database.UpsertResult) をラッピングしたオブジェクト取得
        List<SkyEditor2.Util.SveSaveResult> results = ex.results;

        // 保存対象レコード数分 SveSaveResult が渡される
        for(SkyEditor2.Util.SveSaveResult result : results){
            // 発生したエラーの個数分だけ Database.Error が生成される
            for(Database.Error err : result.getErrors()) {
                // エラー情報から対象項目名を取得
                for(String f : err.getFields()){
                    // 対象項目名がNameの場合
                    if(f == 'Name'){
                        // 項目の下部にエラーメッセージを設定
                        ((Account)records[0]).Name.addError('カスタムエラーメッセージ:名前項目でエラー発生');
                    // 対象項目名がNameの場合
                    } else if(f == 'AccountNumber'){
                        ((Account)records[0]).AccountNumber.addError('カスタムエラーメッセージ:取引先番号でエラー発生');
                    }
                }
            }
        }
    }
}

 

※主オブジェクトが「Account」の場合のテストクラスサンプル
※入力規則エラーのテストのため、利用組織設定によってコードの内容は大きく変更する必要あり

@isTest
private class DisplayMultipleErrorExtenderTest{
    private static testMethod void DisplayMultipleErrorExtenderTest() {
        Account obj = new Account(Name='error', AccountNumber='error');
        DisplayMultipleError extension = new DisplayMultipleError(new ApexPages.StandardController(obj));
        PageReference page = extension.doSave();
        System.assert(true);
    }
}