読者です 読者をやめる 読者になる 読者になる

dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

follow us in feedly

自作したVisualforceページに入力規則エラーを表示する

Salesforce apex

自分で作成した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)));
}

まず、DmlExceptiongetNumDmlメソッドでエラー総数を取得し
エラー総数分ループでgetDmlMessageを呼び出すことで順番にメッセージをセットしています。

というわけで、(今回の目的では)特別な理由が無い限りaddMessagesを使用するのが良さそうです。

リファレンス

SFDC:入力規則とVisualforce - tyoshikawa1106のブログ

Validation Rules and Custom Controllers
↑ これは開発者ガイドに日本語もあります

Exception Class and Built-In Exceptions

addMessage(sObject)

addMessages(Exception)