[SalesForce] Want to overwrite the text content of standard error message displayed on custom page

I am using validation with help of standard error messages on a field. Is there a workaround to manipulate the standard text displayed on error message. ???

Best Answer

Removing the duplicates - I built a bit of infrastructure to do this. There may be simpler solutions

In a class called Util, three methods:

  public static void addVFPageMessage(ApexPages.Severity sev, String msg, Exception e) {  
if (!Util.isExceptionAlreadyInVFMsgContext(e))
    ApexPages.addMessage(new ApexPages.Message(sev,msg, 
                            (e != null && 
                             (e.getTypeName() == 'System.DmlException' ||
                              e.getTypeName() == 'MyException'
                             )
                                 ? Util.friendlifyException(e.getMessage()) 
                                 : Util.showException(e)) 
                      ));

}

//  ---------------------------------------
//  friendlifyException
//  ---------------------------------------
public static String friendlifyException(String errMsg) {

  String     res         = errMsg;
  String     sysErrPrefix  = 'FIELD_CUSTOM_VALIDATION_EXCEPTION,';
  Integer sysErrPrefixIndex  = errMsg.lastIndexOf(sysErrPrefix);
  if (sysErrPrefixIndex != -1)  // Strip out user unfriendly message prefix
      res = errMsg.subString(sysErrPrefixIndex + sysErrPrefix.length());
    String     myErrPrefix  = 'MyException';
  Integer myErrPrefixIndex  = errMsg.lastIndexOf(myErrPrefix);
  if (myErrPrefixIndex != -1)  // Strip out user unfriendly message prefix
      res = errMsg.subString(myErrPrefixIndex + myErrPrefix.length());  
  Integer stackTraceIndex    = res.indexOf('Class.');
  if (stackTraceIndex != -1)   // Strip out the stack trace at end of some messages
    res = res.subString(0,stackTraceIndex);
  return res;
}

  //  ------------------------------------------
  //  showException
  //  ------------------------------------------
public static String showException(Exception e) {
 return e != null ? e.getTypeName() + ' ' + e.getMessage() + ' line:' + e.getLineNumber() + '\n' + e.getStackTraceString() : '';  

}

and in a controller, I do the following:

   // ----------------------------------------------------------------------------------------
// EXTENDED METHOD  - save          : Save as VF page 
// ----------------------------------------------------------------------------------------
public PageReference  save() {

 PageReference resPg;
 try{
    update this.oppo;        
}
    catch(DmlException e){
      Util.addVFPageMessage(ApexPages.Severity.ERROR,'[OCE-03] Save failed, reason: ',e);
    }

 return resPg;

}