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