6

オブジェクトの構成を使用して、いくつかのカスタム検証を追加しました。そのオブジェクトレコードをvisualforceページから挿入しています。<apex:pageMessages/>visualforceページに追加しました。また、例外をキャッチし、エラーメッセージobVFページを表示するためのコードブロックを作成しました。以下のコードブロックを見つけてください:

catch(DMLException excp)
{
    ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, excp.getMessage() );
    ApexPages.addMessage(msg);  
    return null;                            
} 

それでも、カスタム検証からエラーメッセージだけを取得することはできません。以下のようなエラーが表示されます:

挿入に失敗しました。行0の最初の例外。最初のエラー:FIELD_CUSTOM_VALIDATION_EXCEPTION、 error_message_from_custom_validation_comes_here

これに対する解決策はありますか?

4

4 に答える 4

9

次のようにDMLメッセージを取得する必要があります。

ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, excp.getdmlMessage(0) );
ApexPages.addMessage(msg);

例外メッセージの使用

于 2012-07-23T06:16:32.757 に答える
5

最良の方法は、addMessagesを使用することです。複数形に注意してください。メッセージの詳細のみを表示するという利点があり、一括操作の場合、同じメッセージは1回だけ表示されます。私の個人的なお気に入りは、1行だけなので、テストできない例外の場合は、カバレッジが高くなります。

try {
    //failed dml operation
} catch(DmlException excp) {
    ApexPages.addMessages(excp);
}
于 2012-07-23T21:26:08.693 に答える
2
try{
   ...
} catch (DMLException ex){
    String errorMessage = ex.getMessage();
    Integer occurence;
    if (ex.getMessage().contains('FIELD_CUSTOM_VALIDATION_EXCEPTION')){
        occurence = errorMessage.indexOf('FIELD_CUSTOM_VALIDATION_EXCEPTION,') + 34;
        errorMessage = errorMessage.mid(occurence, errorMessage.length());
        occurence = errorMessage.lastIndexOf(':');
        errorMessage = errorMessage.mid(0, occurence);
    }
    else {
        errorMessage = ex.getMessage();
    }

    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, errorMessage));
}
于 2014-04-07T15:14:57.703 に答える
0

Miguelのコードにもう1つの文字列関数を使用すると、正確な「検証エラーメッセージ」が表示されます。ミゲルありがとう。あなたのコードは私を助けてくれました。お役に立てれば。

str = errorMessage.substringBefore(':');
于 2015-07-30T18:26:53.410 に答える