function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Shweta RaiShweta Rai 

Validatino Error Message on VF Page

Hi,

I want to dislay the Validation error message on the VF Page code. How do i o that?

 validation rule:

Case.ownerID=RecordApproverMapping.ID

Error Message: Not Allowed



And this VF page

<apex:page standardController="Case" extensions="CaseSelectController" id="pageId" title="Case Approver">
    <apex:form id="formId">
        <apex:pageMessages id="pageMessagesId"/>
        <apex:inputHidden value="{!Case.LOB__c}"/>
        <apex:inputHidden value="{!Case.Sub_LOB_Asset_Class__c}"/>
        
        <apex:pageblock title="Case: {!Case.CaseNumber}" id="pageBlockSearchId">
            <apex:pageBlockButtons location="top" id="pageBlockButtonsId">
                <apex:commandButton action="{!SearchApprover}" value="Search" id="commandButtonSearchId" reRender="pageMessagesId,outputPanelId"/>
                <apex:commandButton action="{!Cancel}" value="Cancel" id="commandButtonCancelId"/>
            </apex:pageBlockButtons>
            <apex:pageBlockSection >
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Search Approver"/>
                    <apex:inputText value="{!searchNameString}"/>
                </apex:pageBlockSectionItem>
                
            </apex:pageBlockSection>
        </apex:pageblock>
        
             
        
        
        <apex:outputPanel id="outputPanelId">
            <apex:pageBlock title="List pre-filtered by DOA" id="pageBlockRecordId" rendered="{!if(RecordApproverMappingList != null && RecordApproverMappingList.size>0,true,false)}">
                <apex:pageblockTable value="{!RecordApproverMappingList}" var="cAML" id="pageblockTableId">
                    <apex:column headerValue="Record Approver Name">
                        <apex:commandLink value="{!cAML.Name}" action="{!selectApproverRecord}">
                            <apex:param name="selectedApproverId" value="{!cAML.Id}" assignTo="{!selectedApproverId}"/>
                        </apex:commandLink>
                    </apex:column>
                    <apex:repeat value="{!FieldSetMemberList}" var="f">
                        <apex:column value="{!cAML[f.fieldPath]}"/>
                    </apex:repeat>
                </apex:pageblockTable>
                <apex:panelGrid columns="4" id="panelGrid">
                    <apex:commandLink action="{!first}" rendered="{!hasPrevious}" rerender="outputPanelId,panelGrid">First</apex:commandlink>
                    <apex:commandLink action="{!previous}" rendered="{!hasPrevious}" rerender="outputPanelId,panelGrid">Previous</apex:commandlink>
                    <apex:commandLink action="{!next}" rendered="{!hasNext}" rerender="outputPanelId,panelGrid">Next</apex:commandlink>
                    <apex:commandLink action="{!last}" rendered="{!hasNext}" rerender="outputPanelId,panelGrid">Last</apex:commandlink>
                </apex:panelGrid>
            </apex:pageBlock>
        </apex:outputPanel>
    </apex:form>
</apex:page>


Please let me know how can I inlcude the error message on VF Page?

thanks,
Shweta
Best Answer chosen by Shweta Rai
Pankaj_GanwaniPankaj_Ganwani
Hi,

Can you please write return; statement after this line:

*Else if(selectedApproverId.User_c== CaseObj.OwnerID) {
      ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Not Allowed');
ApexPages.addMessage(myMsg);*

All Answers

Pankaj_GanwaniPankaj_Ganwani
Hi Shweta,

Please use rerender = "pageMessagesId" on either button or commandlink, on which you want to show the error message. In Apex controller, you can wrap your code in try catch and in catch block You can use apexpages.addMessage() function to display the error message.

Please let me know if this makes sense to you.

Thanks,
Pankaj
Shweta RaiShweta Rai
this is my controller and below BOLD code that i added (please scroll)...This is not working.

I want Case owner should not be equal to Record_Approver_Mapping__c.User__c.   Can you please help here?

public class CaseSelectApproverController {
    //case object to get data from page
    public Case caseObj {get;set;}
    
    //id of Record Approver selected by user
    public string selectedApproverId {get;set;}
    
    //string for searching Record Approver based on name
    public string searchNameString {get;set;}
    
    //Record approver record based on selectedApproverId
    private Record_Approver_Mapping__c selectedApproverRecord;
    
      
    //set controller instance
    public ApexPages.StandardSetController setRecordApproverMappingObj {get;set;}
    
    //map of id, Record_Approver_Mapping__c
    private map<Id, Record_Approver_Mapping__c> RecordApproverMappingMap;
    
    //field set list for Record Approver
    public List<Schema.FieldSetMember> FieldSetMemberList {get;set;}
    
    //list displayed on the page
    public List<Record_Approver_Mapping__c> RecordApproverMappingList
    {  
        get  
        {  
            if(setRecordApproverMappingObj != null)  
                return (List<Record_Approver_Mapping__c>)setRecordApproverMappingObj.getRecords();
            else  
                return new List<Record_Approver_Mapping__c>();
        }  
        set;
    } 
    
    // indicates whether there are more records after the current page set.
    public Boolean hasNext {
        get {
            return setRecordApproverMappingObj.getHasNext();
        }
        set;
    }
 
    // indicates whether there are more records before the current page set.
    public Boolean hasPrevious {
        get {
            return setRecordApproverMappingObj.getHasPrevious();
        }
        set;
    }
 
    // returns the page number of the current page set
    public Integer pageNumber {
        get {
            return setRecordApproverMappingObj.getPageNumber();
        }
        set;
    }
    
    //constructor
    public CaseSelectApproverController(ApexPages.StandardController controller) {
        //initialize case object
        if(caseObj == null) {
            caseObj = new Case();
        }
        
        //get data for Case from page
        caseObj = (Case)controller.getRecord();
        
        //call search approver to display records
        SearchApprover();
    }
    
    //method executed by constructor or when user clicks search button
    public void SearchApprover() {
        //initialize Record_Approver_Mapping__c list
        RecordApproverMappingList = new list<Record_Approver_Mapping__c>();
        
        //query string
        string queryString = 'Select ';
        
        //initialize fieldSetMemberList
        fieldSetMemberList = new List<Schema.FieldSetMember>();
        
        //fields not to be displayed on page but used in assigning values to Case.
        set<String> fieldNotOnPage = new set<String>{'ID','NAME','EMAIL__C', 'RM_MAILBOX_COPIED_ON_APPROVAL__C', 'NON_RM_MAILBOX__C'};
        
        //loop through field set
        for(Schema.FieldSetMember f : SObjectType.Record_Approver_Mapping__c.FieldSets.Select_Approver_Field_Set.getFields()) {
            //add field in query if it doesn't contain in set
            if(!fieldNotOnPage.contains(f.getFieldPath().toupperCase())) {
                //create query string
                queryString += f.getFieldPath() + ', ';
                
                //add field in list to display as column
                fieldSetMemberList.add(f);
            }
        }
        
           
       
        
        //initialize list
        list<Record_Approver_Mapping__c> Record_Approver_MappingList = new list<Record_Approver_Mapping__c>();
        
        //query data
        Record_Approver_MappingList = Database.Query(queryString);
        //assign list of records to set controller
        setRecordApproverMappingObj = new ApexPages.StandardSetController(Record_Approver_MappingList);

        //check if list is not blank
        if(Record_Approver_MappingList != null && Record_Approver_MappingList.size() > 0) {
           
            
            //add list in map
            RecordApproverMappingMap = new map<Id, Record_Approver_Mapping__c>();
            RecordApproverMappingMap.putAll(Record_Approver_MappingList);
            
            //set page size to 10 if the Test doesn't contain an integer value
            setRecordApproverMappingObj.setPageSize(10);
            
            //set page size based on value in Test
            try {
                setRecordApproverMappingObj.setPageSize(integer.valueof(Test.Select_Approver_Page_Size));
            }
            catch(Exception e) {
            }
        }
        else {
            //through error on page if no approver record exists.
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.INFO, Test.Select_Approver_No_Record_Found);
            ApexPages.addMessage(myMsg);
        }
    }
    
    //method called when user selects approver
    public PageReference selectApproverRecord() {
        //check selectedApproverId is not null
        if(selectedApproverId == null) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, Test.Test_Select_Approver_Error);
            ApexPages.addMessage(myMsg);
            return null;
        }
        
                Else if(selectedApproverId.User_c== CaseObj.OwnerID) {
      ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Not Allowed');
ApexPages.addMessage(myMsg); 
        }

        //update case record
        try {
            //get data from RecordApproverMappingMap map for selectedApproverId
            selectedApproverRecord = RecordApproverMappingMap.get(selectedApproverId);
             
            //assign values to Case record
            caseObj.Record_Approver__c = selectedApproverRecord.Id;
            caseObj.Record_Approver_Email__c = selectedApproverRecord.Email__c;
            caseObj.Notify_IR__c = selectedApproverRecord.RM_Mailbox_Copied_on_Approval__c;
            caseObj.Notify_Non_IR__c = selectedApproverRecord.Non_RM_Mailbox__c;
        
            update caseObj;
        }
        //in case of exception, throw an error
        catch(Exception exc) {
            //ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, Test.Test_Select_Approver_Error +': '+exc);
            //ApexPages.addMessage(myMsg);
            return null;
        }
        
        //for successful transaction, navigate to case record
        return new pagereference('/' + caseObj.Id);
    }
    
    // returns the first page of records
    public void first() {
        setRecordApproverMappingObj.first();
    }
 
    // returns the last page of records
    public void last() {
        setRecordApproverMappingObj.last();
    }
 
    // returns the previous page of records
    public void previous() {
        setRecordApproverMappingObj.previous();
    }
 
    // returns the next page of records
    public void next() {
        setRecordApproverMappingObj.next();
    }
    
   
}
Pankaj_GanwaniPankaj_Ganwani
Hi,

Can you please write return; statement after this line:

*Else if(selectedApproverId.User_c== CaseObj.OwnerID) {
      ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Not Allowed');
ApexPages.addMessage(myMsg);*
This was selected as the best answer
Pankaj_GanwaniPankaj_Ganwani
I mean return null;
Shweta RaiShweta Rai
I got thie error:

[Error] Error: Compile Error: Initial term of field expression must be a concrete SObject: String at line 193 column 25


Line 193:   Else if(selectedApproverId.User_c== CaseObj.OwnerId) {
      ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Not Allowed');
ApexPages.addMessage(myMsg); 
        }

I have a object Record_Approver_Mapping__c where i am saving the approver. On case onject we custom utton to slect approver. this table has a field user (lookup to User table)
Shweta RaiShweta Rai
Thanks it resolved my issue/