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
Vanitha ManiVanitha Mani 

Wrapper classes question

Hi,

In my code i have the whole object SVC_Change_Request__c in wrapper class.But i need to pass only the Id of  SVC_Change_Request__c and map it with other fields of that object like
Map<ID,SVC_Change_Request__c > and getting that map populated in getchangerequests method in  controller code.and using that getting the value for the table in Visualforce page.How to achieve this.
Controller:
public with sharing class SVC_CR_CloneCRPackage_Ctl {
    private final static List<String> EXCLUDED_STATUSES = new List<String>{
            'Closed', 'Cancelled'
    };
     public string targetValue {get; set;}   
    private final static String EXCEPTION_NAME = 'Package already exists. Please delete the current package before cloning.';//TKT-1239114
public string url {get;set;}
    public Boolean isCompleted { get; set; }
    public Boolean getRelatedAccountOnly { get; set; }
    public SelectableChangeRequest[] changeRequests { get; set; }
    private SVC_CP_QueryBuilder changeRequestsQB;
    private SVC_CR_Package__c crPackage;
   
    public SVC_CR_CloneCRPackage_Ctl() {
         targetValue = '_blank';
        getRelatedAccountOnly = true;
        isCompleted = false;
        crPackage = getCrPackage();
        changeRequests = getChangeRequests();
    }

    private class CloneChangeRequestException extends Exception {}

    /**
     * Clones cr package to selected change requests
     */
    public PageReference clonePackageToChangeRequests() {
        
        Savepoint sp = Database.setSavepoint();
        try {
            Set<ID> crIds = new Set<ID>();
            for (SelectableChangeRequest record : changeRequests) {
                 
            if(record.selected && record.obj.Customer_Packages__r.size() > 0 ) { //TKT-1239114
              
                
              throw new CloneChangeRequestException(EXCEPTION_NAME);
                
               
            }else if (record.selected) {
               
                   crIds.add(record.obj.Id);
                
                    
                }
            }

            if (crIds.size() > 0) {
               
                return handleSuccess(SVC_CR_Package_Service.clonePackage(crIds, crPackage.Id));
               
            }
        } catch (Exception e) {
            Database.rollback(sp);
            ApexPages.addMessage(SVC_ErrorHandler.logAndConvertToApexMessage(e));
        }

        return null;
    }

    /**
     * Redirects to new package if there is one,
     * Displays list of new packages if there are many
     */
    private PageReference handleSuccess(SVC_CR_Package__c[] newPackages) {
        if (newPackages.size() == 1) {
           
            return redirect(newPackages[0].Id);
        }

        showSuccess(newPackages);
        return null;
    }

    /**
     * Displays success message with list of new packages
     */
    private void showSuccess(SVC_CR_Package__c[] newPackages) {
        for (SVC_CR_Package__c record : newPackages) {
            String message = Label.SVC_CR_ClonedPackages.replace('{0}', '/' + record.Id)
                    .replace('{1}', record.Name);

            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, message));
        }
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, Label.SVC_CR_ClonedPackageSuccess));
        isCompleted = true;
    }

    /**
     * Redirects back to Opportunity record
     */
    public PageReference cancel() {
        return redirect(crPackage.Id);
    }

    /**
     * Displays only change requests that has Account related to Opportunity
     */
    public void withRelatedAccount() {
        getRelatedAccountOnly = true;
        changeRequests = getChangeRequests();
    }

    /**
     * Displays all change requests
     */
    public void withAllAccounts() {
        getRelatedAccountOnly = false;
        changeRequests = getChangeRequests();
    }

    /**
     * Redirects to cr package page
     */
    private PageReference redirect(ID recordId) {
       
        PageReference retURL = new PageReference('/' + recordId);
       
        retURL.setRedirect(true);
         
        return retURL;
       
 
           }

    /**
     * Queries cr package record
     */
    private SVC_CR_Package__c getCrPackage() {
        return (SVC_CR_Package__c) SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType)
                .withAllFields()
                .withField('Change_Request__r.Opportunity__c')
                .withField('Change_Request__r.Account__r.Name')
                .withField('Change_Request__r.Account__r.Systems_Parent__c')
                .andWhereEq(SVC_CR_Package__c.Id, ApexPages.currentPage().getParameters().get('packageId'))
                .queryOne();
    }

    /**
     * Queries change requests
     */

    Private SelectableChangeRequest[] getChangeRequests() {
        SVC_CP_QueryBuilder changeRequestsQB = SVC_CP_QueryBuilder.getInstance(SVC_Change_Request__c.SObjectType)
                .withAllFields()
                .withFields(new String[]{
                        'Account__c', 'Account__r.Name', 'Account__r.Systems_Parent__c', 'Opportunity__c', 'Opportunity__r.Name', 'Change_Owner__c', 'Change_Owner__r.Name'
                })
                .withSubquery('Customer_Packages__r', SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType))//TKT-1239114
                .andWhereEq(SVC_Change_Request__c.RecordTypeId, SVC_CR_ChangeRequestService.getInstance().getProjectRecordTypeId())

//                .andWhereNotIn(
//                        SVC_Change_Request__c.Id,
//                        SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType)
//                                .withField(SVC_CR_Package__c.Change_Request__c)
//                                .andWhereNotIn('Change_Request__r.Status__c', EXCLUDED_STATUSES)
//                )
                .andWhereNotIn(SVC_Change_Request__c.Status__c, EXCLUDED_STATUSES);

        if (getRelatedAccountOnly) {
            Set<ID> relatedAccountIds = new Set<ID>{
                    crPackage.Change_Request__r.Account__c
            };
            if (crPackage.Change_Request__r.Account__r.Systems_Parent__c != null) {
                relatedAccountIds.add(crPackage.Change_Request__r.Account__r.Systems_Parent__c);
            }

            SVC_CP_ConditionBuilder conditionBuilder = SVC_CP_ConditionBuilder.getInstance();
            SVC_CP_ConditionBuilder.Condition[] conditions = new SVC_CP_ConditionBuilder.Condition[]{};
            conditions.add(conditionBuilder.includes('Account__r.Systems_Parent__c', relatedAccountIds));
            conditions.add(conditionBuilder.includes('Account__c', relatedAccountIds));
            changeRequestsQB.andWhere(conditionBuilder.dis(conditions));//TKT-1242443
        }

        SVC_Change_Request__c[] changeRequests = (SVC_Change_Request__c[]) changeRequestsQB.queryList();
        SelectableChangeRequest[] crs = new SelectableChangeRequest[]{
        };
           
        for (SVC_Change_Request__c cr : changeRequests) {
            crs.add(new SelectableChangeRequest(cr));

        }

        return crs;
    }

    public class SelectableChangeRequest {
        public Boolean selected { get; set; }
        //public ID changeRequestId { get;set; }
        public SVC_Change_Request__c obj { get; set; }
 
        
        public SelectableChangeRequest(SVC_Change_Request__c obj) {
            
        this.obj=obj;
        this.selected = false;
        }
    }
}
VF page:
<apex:page controller="SVC_CR_CloneCRPackage_Ctl">
   
    <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/CSS/jquery.dataTables.min.css')}"/>
    <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/ExternalCSS/ExternalCSS.css')}"/>
    <style>
        .message .messageText a {
            margin: 0;
            font-size: 100%;
        }
    </style>

    <script type="text/javascript" language="javascript"
            src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery-1.10.2.min.js')}"></script>
    <script type="text/javascript" language="javascript"
            src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery.dataTables.min.js')}"></script>
    <apex:includeScript value="/support/console/29.0/integration.js"/>
    <script type="text/javascript" language="javascript">
        var j$ = jQuery.noConflict();
        j$(document).ready(function() {
            initTable();
        });

        var initTable = function() {
            j$('table.dataTable').dataTable({
                "bPaginate" : true,
                "bLengthChange" : true,
                "bFilter" : true,
                "bSort" : true,
                "bInfo" : true,
                "bAutoWidth" : false,
                "scrollY": "500px",
                "columnDefs": [
                    { "orderable": false, "targets": 0 },
                ]
            });
        };
                  
                    </script>
  
    <apex:form >
        <apex:pageblock id="pbId">
            <apex:pageMessages escape="false" id="messages"/>
            <apex:pageBlockButtons id="PgButtons">
               <apex:commandButton value="Back" action="{!cancel}" immediate="true"/>
                <apex:commandLink action="{!clonePackageToChangeRequests}" target="{!targetValue}" >
       <apex:commandButton value="Clone Package To Selected CRs" />
</apex:commandLink>
    <!--  <apex:commandButton value="Clone Package To Selected CRs" action="{!clonePackageToChangeRequests}" reRender="pbId" status="fetchStatus" rendered="{!NOT(isCompleted)}"/>-->
            
            </apex:pageBlockButtons>

            <apex:outputPanel >
                <apex:actionStatus id="fetchStatus">
                    <apex:facet name="start">
                        <img src="/img/loading.gif"/>
                    </apex:facet>
                </apex:actionStatus>
            </apex:outputPanel>
             <apex:pageBlockSection id="pageSection" columns="1" rendered="{!NOT(isCompleted)}">
                <apex:outputPanel id="accountFilters">
                    <apex:commandLink action="{!withRelatedAccount}" value="Show related Account" id="relatedAccountLink" rendered="{!!getRelatedAccountOnly}"
                                      reRender="pageSection" status="fetchStatus" onComplete="initTable();"/>
                    
                   <apex:commandLink action="{!withAllAccounts}" value="Show all Accounts" id="allAccountsLink" rendered="{!getRelatedAccountOnly}"
                                      reRender="pageSection" status="fetchStatus" onComplete="initTable();"/>
                </apex:outputPanel>
                     
<apex:pageblockTable id="crTable" value="{!changeRequests}" var="item" styleClass="dataTable">
           <apex:column id="row">
                         <apex:inputCheckbox id="selectBox" value="{!item.selected}"/>
          </apex:column>
          <apex:column >
                        <apex:facet name="header">Change Request</apex:facet>
                        
                        <apex:outputLink value="/{!item.obj.Id}">{!item.obj.Name}</apex:outputLink>
          </apex:column>     
     
        <apex:repeat value="{!$ObjectType.SVC_Change_Request__c.FieldSets.PackageCloneListView}" var="f">
        <apex:column value="{!item.obj[f]}"/>
         </apex:repeat>
                   </apex:pageblockTable>           

         </apex:pageBlockSection>
        </apex:pageblock>
    </apex:form>
</apex:page>
 
ShirishaShirisha (Salesforce Developers) 
Hi Vanitha,

Greetings!

Please be informed that we can only provide you the suggestion here on the developer forum and it is difficult for us to debug the entire code that you have given here.

Please feel free to reach out to the accelerator team who can give you the idea on how you can implement according to your business requirement,if you have premier success plan.

Please find the details on how to request for an accelerator:https://help.salesforce.com/articleView?id=000337601&type=1&mode=1

Otherwise,I would request you to reach out to your account Executive If you wish to upgrade to Premier Support please contact your Account Executive.

Kindly mark it as best answer if it helps so that it can help others in the future.

Warm Regards,
Shirisha Pathuri