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
RajnisfRajnisf 

Save the selected account records in custom object using wrapper class

Hi All,

Please help me to save the selected account records in custom object using wrapper class..
I am not able to map the fields.

Thanks a lot...

VF page:

<apex:page controller="AccountSelectClassController" sidebar="false">
    <script type="text/javascript">
        function selectAllCheckboxes(obj,receivedInputID){
            var inputCheckBox = document.getElementsByTagName("input");
            for(var i=0; i<inputCheckBox.length; i++){
                if(inputCheckBox[i].id.indexOf(receivedInputID)!=-1){
                    inputCheckBox[i].checked = obj.checked;
                }
            }
        }
    </script>
    <apex:form >
        <apex:pageBlock >
            <apex:pageBlockButtons >
                <apex:commandButton value="Show Selected Accounts" action="{!processSelected}" rerender="table2"/>
            </apex:pageBlockButtons>
 
            <apex:pageblockSection title="All Accounts" collapsible="false" columns="2">
 
                <apex:pageBlockTable value="{!wrapAccountList}" var="accWrap" id="table" title="All Accounts">
                    <apex:column >
                        <apex:facet name="header">
                            <apex:inputCheckbox onclick="selectAllCheckboxes(this,'inputId')"/>
                        </apex:facet>
                        <apex:inputCheckbox value="{!accWrap.selected}" id="inputId"/>
                    </apex:column>
                    <apex:column value="{!accWrap.acc.Name}" />
                    <apex:column value="{!accWrap.acc.BillingState}" />
                    <apex:column value="{!accWrap.acc.Phone}" />
                </apex:pageBlockTable>
 
                <apex:pageBlockTable value="{!selectedAccounts}" var="c" id="table2" title="Selected Accounts">
                    <apex:column value="{!c.Name}" headerValue="Account Name"/>
                    <apex:column value="{!c.BillingState}" headerValue="Billing State"/>
                    <apex:column value="{!c.Phone}" headerValue="Phone"/>
                </apex:pageBlockTable>
 
            </apex:pageblockSection>
        </apex:pageBlock>
    </apex:form>
 
</apex:page>


Controller:

public class AccountSelectClassController{
 
    //Our collection of the class/wrapper objects wrapAccount
    public List<wrapAccount> wrapAccountList {get; set;}
    public List<Account> selectedAccounts{get;set;}
 
    public AccountSelectClassController(){
        if(wrapAccountList == null) {
            wrapAccountList = new List<wrapAccount>();
            for(Account a: [select Id, Name,BillingState, Website, Phone from Account limit 10]) {
                // As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
                wrapAccountList.add(new wrapAccount(a));
            }
        }
    }
 
    public void processSelected() {
    selectedAccounts = new List<Account>();
 
        for(wrapAccount wrapAccountObj : wrapAccountList) {
            if(wrapAccountObj.selected == true) {
                selectedAccounts.add(wrapAccountObj.acc);
            }
        }
    }
 
    // This is our wrapper/container class. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
    public class wrapAccount {
        public Account acc {get; set;}
        public Boolean selected {get; set;}
 
        public wrapAccount(Account a) {
            acc = a;
            selected = false;
        }
    }
}
Best Answer chosen by Rajnisf
Mani RenusMani Renus

Hi,

As i told in my last post, map all your fields (i think here you missed Tour Planner Name field)

 Custom_Object__c c=new Custom_Object__c();
        c.lastname=acc.name;
        //****map all your fields*****

Map like as below
Tour Planner Name=acc.name;

Hope it helps you! If it works you, please mark above post as best answer.

All Answers

Mani RenusMani Renus
Hi,

Replace processSelected() method with follow code and replace your custom object API name instead of Custom_Object__c

public List<Custom_Object__c> cList=new List<Custom_Object__c>();
  
 public void processSelected() {
    selectedAccounts = new List<Account>();
 
        for(wrapAccount wrapAccountObj : wrapAccountList) {
            if(wrapAccountObj.selected == true) {
                selectedAccounts.add(wrapAccountObj.acc);
            }
        }
   
     for(Account acc:selectedAccounts){
 Custom_Object__c c=new Custom_Object__c();
        c.lastname=acc.name;
        //****map all your fields*****
        cList.add(c);
     
     }   
if(cList.size()>0)
     insert cList;  
    }



Hope it helps you!
RajnisfRajnisf
Hi Mani,

Thanks a lot..
it works..

but why  i am getting the ID of the custom object's record in the detail page...


..User-added image



 
Mani RenusMani Renus

Hi,

As i told in my last post, map all your fields (i think here you missed Tour Planner Name field)

 Custom_Object__c c=new Custom_Object__c();
        c.lastname=acc.name;
        //****map all your fields*****

Map like as below
Tour Planner Name=acc.name;

Hope it helps you! If it works you, please mark above post as best answer.

This was selected as the best answer