2012-07-23 24 views
5

He agregado algunas validaciones personalizadas usando Configuración para un objeto. Estoy insertando ese registro de objeto a través de la página de Visualforce. He agregado <apex:pageMessages/> en mi página de Visualforce. También escribí el bloque de código para capturar la excepción y para mostrar el mensaje de error ob página VF. A continuación bloque de código:¿Cómo mostrar solo el mensaje de error extraído de Validación personalizada en una página de Visualforce?

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

Aún no soy capaz de obtener sólo el mensaje de error de la validación personalizada. Me muestra el error como a continuación:

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

¿Hay alguna solución para esto?

Respuesta

8

que necesita para obtener el mensaje LMD, así:

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

Using Exception Messages

5

La mejor manera es utilizar addMessages, observe el plural. Tiene la ventaja de mostrar solo los detalles del mensaje, y para las operaciones masivas el mismo mensaje se muestra solo una vez, y mi favorito personal: es solo una línea, por lo que si se trata de una excepción no comprobable, su cobertura es más alta.

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

esto es una gran respuesta! nunca supe de esto – 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

Mediante el uso de una función de cadena más al código de Miguel le dará exacta "mensaje de error de validación". Gracias Miguel. Tu código me ayudó. Espero que esto ayude.

str = errorMessage.substringBefore(':'); 
Cuestiones relacionadas