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
Evan C. DeckerEvan C. Decker 

VisualForce page functioning differently in production vs. full sandbox

Hello - we have a VisualForce page and controller that are identical in our production org and full sandbox, but are functioning differently. The page displays a list of records and has a few picklists at the top that allow you to filter and sort the records. In the sandbox the sort is working, but in production it's not. Is there a setting somewhere that may be different between the two environments and causing this issue? Thank you in advance.

User-added image
karthikeyan perumalkarthikeyan perumal
Hello,

Check the any object ID or record ID hardcoded in apex class else
Could please post your code for Apex class and VF page to validate.

Thanks
karthik
 
Gordon EngelGordon Engel
Also, be aware that Sandboxes are on Winter '17 release, while most production instances are still on Summer '16.
Evan C. DeckerEvan C. Decker
Thank you both. Both our sandbox and production orgs are still on Summer '16. There aren't any IDs hardcoded in the the code. Here's the apex class if that's helpful:
public class ICPRequestMassApprovalController {
    public String team {get; set;}
    public List<SelectOption> teams {get; set;}
    public Group grp {Get; set;}
    public String comments {get; set;}
    public String sortcolumn {get; set;}
    public String sortorder {get; set;}
    public List<SelectOption> columns {get; set;}
    public List<Request> requests {get; set;}
    public List<SelectOption> sortorders {get; set;}
    
    public ICPRequestMassApprovalController()
    {
        grp = new Group();
        Id cssprofileId = [SELECT Id FROM Profile WHERE Name = 'Platform User - CSS'].Id;
        
        teams = new List<SelectOption>{
            new SelectOption('', 'Select One'),
            new SelectOption('Release Team', 'Release Team'),
            new SelectOption('Trust','Trust')
        };
        
        if (UserInfo.getProfileId() == cssprofileId) {
            teams.add(new SelectOption('Client Service', 'Client Service'));
        }

        columns = new List<SelectOption>{
            new SelectOption('Date__c', 'Date'),
            new SelectOption('Name', 'ICP Request Name'),
            new SelectOption('Status__c', 'Status'),
            new SelectOption('From_Entity_Number__c', 'From Client Number'),
            new SelectOption('From_Entity__r.Name', 'From Client'),
            new SelectOption('From_Account_Number__c', 'From Account Number'),
            new SelectOption('From_Account__r.Name', 'From Account'),
            new SelectOption('Amount__c', 'Amount'),
            new SelectOption('To_Account_Number__c', 'To Account Number'),
            new SelectOption('To_Account__r.Name', 'To Account'),
            new SelectOption('External_Account_Number__c', 'External Account Number'),
            new SelectOption('External_Bank_Name__c', 'External Bank Name'),
            new SelectOption('External_Routing_Number__c', 'External Routing Number'),
            new SelectOption('Reason_for_Wire__c', 'Reason for Wire')
        };
        sortorders = new List<SelectOption>{
            new SelectOption('ASC', 'ASC'),
            new SelectOption('DESC', 'DESC')
        };
    }
    
    public pagereference GetRequests()
    {
        if (String.isNotBlank(team))
        {   
            if (team == 'Client Service') {
                PopulateData();
            } else {
                grp = new Group(); 
                
                for (Group g : [SELECT Id, (Select UserOrGroupId From GroupMembers) FROM Group WHERE Name = :team AND Type = 'Queue'])
                {
                    for (GroupMember gm : g.GroupMembers)
                    {
                        if (String.valueOf(gm.UserOrGroupId).contains(UserInfo.getUserId()))
                        {
                            grp = g;
                        }
                    }
                }
                
                if (String.isNotBlank(grp.Id))
                {
                    PopulateData();
                }               
            }
        }
        return null;
    }
    
    public void PopulateData()
    {
        requests = new List<Request>();
        comments = '';
        List<String> statuses;
        Map<Id, ICP_Requests__c> requestMap = new Map<Id, ICP_Requests__c>();
        if (team == 'Release Team')
        {
            statuses = new List<String>{
                Constants.ICP_REQUEST_STATUS_ENTERED_TO_BE_RELEASED
            };
        } else if (team == 'Client Service') {
            statuses = new List<String>{
                Constants.ICP_REQUEST_STATUS_TO_BE_ENTERED
            };          
        } else {
            statuses = new List<String>{
                Constants.ICP_REQUEST_STATUS_SUBMITTED_FOR_TRUST_APPROVAL,
                Constants.ICP_REQUEST_STATUS_FC_APPROVED_SUBMITTED_FOR_TRUST_APPROVAL
            };          
        }
        
        String querystr = 'SELECT Id, Name, RecordType.Name, Amount__c, Date__c, From_Entity__c, FC__c, Status__c, From_Account_Type__c, From_Account__r.Name, ' +
                                    'External_Account_Number__c, External_Bank_Name__c, External_Routing_Number__c, Reason_for_Wire__c, From_Account_Number__c, ' +
                                    'From_Account__c, From_Entity_Number__c, To_Account_Number__c, To_Account__c, From_Entity__r.Name, To_Account__r.Name ' +
                                  'FROM ICP_Requests__c '+
                                  'WHERE Status__c IN :statuses '+
                                  'ORDER BY '+ sortcolumn + ' ' + sortorder;
        for (ICP_Requests__c i : database.query(String.escapeSingleQuotes(querystr)))
        {
            requestMap.put(i.Id, i);
        }
            
        Map<Id, Request> reqMap = new Map<Id, Request>();
        for (ProcessInstance pi : [SELECT Id, TargetObjectId, Status, (SELECT StepStatus, ActorId, Actor.Name, OriginalActorId, OriginalActor.Name 
                                        FROM StepsAndWorkitems
                                        ORDER BY CreatedDate DESC), (SELECT Id FROM Workitems ORDER BY CreatedDate DESC)
                                   FROM ProcessInstance
                                   WHERE TargetObjectId IN :requestMap.keySet()
                                   AND Status = 'Pending'
                                   ORDER BY CreatedDate])
        {
            for (ProcessInstanceHistory step : pi.StepsAndWorkitems)
            {
                if (step.StepStatus == 'Pending' && step.OriginalActorId == grp.Id)
                {
                    Request r = new Request();
                    r.icp = requestMap.get(pi.TargetObjectId);
                    r.workitem = pi.WorkItems[0];
                    r.selected = false;
                    reqMap.put(pi.TargetObjectId, r);
                }
            }
        }
        
        if (!reqMap.isEmpty()) {
            requests.addAll(reqMap.values());
        } else {
            for(Id id : requestMap.keySet())
            {
                Request r = new Request();
                r.icp = requestMap.get(id);
                requests.add(r);
            }           
        }                       
    }
    
    public pagereference ApproveRequests()
    {
        for (Request r : requests)
        {
            if (r.selected != null && r.selected)
            {
                Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();
                req.setWorkitemId(r.workitem.Id);
                req.setAction('Approve');
                req.setComments(comments);
                Approval.ProcessResult result = Approval.process(req);
            }
        }
        PopulateData();
        return null;
    }
    
    public pagereference RejectRequests()
    {
        if (string.isBlank(comments)) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Comments are required for rejection.');
            ApexPages.addMessage(myMsg);
        } else {
            for (Request r : requests)
            {
                if (r.selected)
                {
                    Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();
                    req.setWorkitemId(r.workitem.Id);
                    req.setAction('Reject');
                    req.setComments(comments);
                    Approval.ProcessResult result = Approval.process(req);
                }
            }
            PopulateData();         
        }   
        return null;        
    }
    
    public pagereference SubmitForApproval()
    {
        try {
            for (Request r : requests)
            {
                if (r.selected)
                {
                    Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
                    req.setObjectId(r.icp.Id);
                    Approval.ProcessResult result = Approval.process(req);
                }
            }
            PopulateData();             
        } catch(Exception e) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'No Approval Processes were found to meet the criteria for one, many or all of the selected requests');
            ApexPages.addMessage(myMsg);
        }
        return null;
    }
    
    public pagereference Refresh()
    {
        GetRequests();
        return null;
    }
    
    public class Request {
        public Boolean selected {get; set;}
        public ICP_Requests__c icp {get; set;}
        public ProcessInstanceWorkitem workitem {get; set;}
    }
}
Thank you!