6

我使用对象的配置添加了一些自定义验证。我正在通过 visualforce 页面插入该对象记录。我已经<apex:pageMessages/>在我的 visualforce 页面上添加了。我还编写了用于捕获异常并在 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

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,注意复数。它的优点是只显示消息详细信息,对于批量操作,相同的消息只显示一次,我个人最喜欢的是:它只有一行,所以如果它是一个不可测试的异常,你的覆盖率会更高。

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 的代码再使用一个字符串函数,将为您提供准确的“验证错误消息”。谢谢米格尔。你的代码帮助了我。希望这可以帮助。

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