2012-07-23 41 views
5

オブジェクトのConfigurationを使用してカスタム検証をいくつか追加しました。私はそのオブジェクトレコードをVisualforceページに挿入しています。私は<apex:pageMessages/>を私のVisualforceページに追加しました。私はまた、例外をキャッチし、エラーメッセージob VFページを表示するためのコードブロックを書いています。以下のコードブロックを見つけてください:Visualforceページのカスタム検証から抽出されたエラーメッセージのみを表示するにはどうすればよいですか?

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

まだカスタム検証からエラーメッセージが表示されません。以下のようなエラーが表示されます:

Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, error_message_from_custom_validation_comes_here

この問題を解決する方法はありますか?

答えて

8

あなたはそのようなDMLメッセージを取得する必要があります:

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

Using Exception Messages

5

最良の方法は、複数のに気づく、addMessagesを使用することです。メッセージの詳細のみを表示する利点があり、一括操作の場合は同じメッセージが1回だけ表示され、個人的には1行しか表示されないため、許容範囲外の例外ではカバレッジが高くなります。ミゲルのコードに1つの以上の文字列関数を使用することにより

try { 
    //failed dml operation 
} catch(DmlException excp) { 
    ApexPages.addMessages(excp); 
} 
+0

これはすばらしい答えです。これについては決して知らなかった – turbo2oh

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

正確な「検証エラーメッセージ」をお渡しします。 Miguelに感謝します。あなたのコードは私を助けました。 これが役立つことを願っています。

str = errorMessage.substringBefore(':'); 
関連する問題