如何在Visualforce页面上仅显示自定义验证中提取的错误消息?

时间:2012-07-23 05:41:57

标签: salesforce apex-code visualforce

我使用Configuration为对象添加了一些自定义验证。我通过visualforce页面插入该对象记录。我在visualforce页面上添加了<apex:pageMessages/>。我还编写了代码块来捕获异常并显示错误消息ob VF页面。请在下面找到代码块:

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 个答案:

答案 0 :(得分:9)

你需要像这样得到DML消息:

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

Using Exception Messages

答案 1 :(得分:5)

最好的方法是使用addMessages,注意复数。它的优点是只显示消息详细信息,而对于批量操作,同一消息只显示一次,而且我个人最喜欢:它只有一行,所以如果它是一个不可测试的异常,你的覆盖范围就会更高。

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

答案 2 :(得分: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));
}

答案 3 :(得分:0)

通过对Miguel的代码再使用一个字符串函数,将为您提供准确的“验证错误消息”。 谢谢Miguel。你的代码帮助了我。 希望这会有所帮助。

str = errorMessage.substringBefore(':');