2012-07-23 19 views
5

Tôi đã thêm vài xác nhận tùy chỉnh bằng cách sử dụng Cấu hình cho một đối tượng. Tôi đang chèn bản ghi đối tượng đó qua trang visualforce. Tôi đã thêm <apex:pageMessages/> trên trang lực lượng hình ảnh của mình. Tôi cũng đã viết mã khối để bắt ngoại lệ và hiển thị thông báo lỗi ob trang VF. Vui lòng tìm khối mã bên dưới:Làm cách nào để chỉ hiển thị thông báo lỗi được trích xuất từ ​​Xác thực tùy chỉnh trên trang Visualforce?

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

Tôi vẫn không thể nhận được thông báo lỗi từ xác thực tùy chỉnh. Nó cho tôi thấy lỗi như sau:

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

Có giải pháp nào cho điều này không?

Trả lời

8

Bạn cần phải nhận được thông báo DML như vậy:

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

Using Exception Messages

5

Cách tốt nhất là sử dụng addMessages, chú ý nhiều. Nó có lợi thế là chỉ hiển thị chi tiết tin nhắn, và đối với hoạt động hàng loạt, cùng một thông điệp được hiển thị chỉ một lần và yêu thích cá nhân của tôi: nó chỉ là một dòng vì vậy nếu đó là ngoại lệ không thể tin được thì mức độ phù hợp của bạn cao hơn.

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

đây là một câu trả lời tuyệt vời! không bao giờ biết về điều này – 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

Bằng cách sử dụng một chức năng chuỗi hơn để mã Miguel sẽ cung cấp cho bạn chính xác thông báo lỗi "xác nhận". Cảm ơn bạn Miguel. Mã của bạn đã giúp tôi. Hy vọng điều này sẽ hữu ích.

str = errorMessage.substringBefore(':');