2012-07-23 10 views
5

Ho aggiunto alcune convalide personalizzate utilizzando la configurazione per un oggetto. Sto inserendo il record di questo oggetto attraverso la pagina di Visualforce. Ho aggiunto <apex:pageMessages/> sulla mia pagina Visualforce. Ho anche scritto un blocco di codice per catturare l'eccezione e mostrare il messaggio di errore nella pagina VF. Si prega di trovare blocco di codice qui sotto:Come visualizzare solo il messaggio di errore estratto dalla convalida personalizzata su una pagina Visualforce?

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

Ancora non sono in grado di ottenere solo messaggio di errore dalla convalida personalizzata. Mi mostra errore come sotto:

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

C'è qualche soluzione per questo?

risposta

8

è necessario per ottenere il messaggio DML in questo modo:

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

Using Exception Messages

5

Il modo migliore è quello di utilizzare addMessages, notare il plurale. Ha il vantaggio di mostrare solo i dettagli del messaggio, e per le operazioni di massa lo stesso messaggio viene mostrato solo una volta, e il mio preferito: è solo una riga quindi se è un'eccezione non verificabile la copertura è più alta.

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

questa è un'ottima risposta! mai saputo di questo – 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

Utilizzando ancora una funzione di stringa di codice di Miguel vi darà esatta "messaggio di errore di convalida". Grazie Miguel. Il tuo codice mi ha aiutato. Spero che questo aiuti.

str = errorMessage.substringBefore(':'); 
Problemi correlati