自分で作成したVisualforceページについては、コントローラ側でDmlException
を明示的にcatchしてあげないとシステムエラー画面が表示されてしまい、
開発組織にメールがとんでしまったりして何かと面倒なことになります。
で、そのための書き方。
下のように、addMessages
メソッドにcatchしたDmlException
をそのまま渡してあげるだけで、
入力規則エラー発生時に画面に適切に表示されるようになります。
public PageReference save() { try { // 入力規則を設定したオブジェクトを更新する update sObj; } catch (DmlException e) { ApexPages.addMessages(e); } return null; }
似たようなメソッドにaddMessage(sObject)
(単数形)というのがありますが、
こちらはException
を直接渡すことができないため次のような書き方になると思います。
for (Integer i = 0; i < e.getNumDml(); i++) { ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,e.getDmlMessage(i))); }
まず、DmlException
のgetNumDml
メソッドでエラー総数を取得し
エラー総数分ループでgetDmlMessage
を呼び出すことで順番にメッセージをセットしています。
というわけで、(今回の目的では)特別な理由が無い限りaddMessages
を使用するのが良さそうです。
リファレンス
SFDC:入力規則とVisualforce - tyoshikawa1106のブログ
Salesforce Developers
↑ これは開発者ガイドに日本語もあります