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
abu saleh khan 8abu saleh khan 8 

list has more than 1 more row for the assignment to sobject

I am getting this Exception When I am trying to push values into a Map.Kindly help me out.


Vf:
<apex:page Controller="OM_OrderManagementEncap">
  <apex:form >
    <apex:pageBlock Title="Account Details">
      <apex:pageBlockSection title="Account Details">
        <apex:outputLabel value="Account Name: "/>
          <apex:selectList value="{!selectedObject}" size="1">
            <apex:actionSupport action="{!selectAccount}" event="onchange" reRender="rfrsh"/>
            <apex:selectOptions value="{!objectNames}"/>
          </apex:selectList>
      </apex:pageBlockSection>
    </apex:pageBlock>
    <apex:pageBlock mode="inlineEdit" id="rfrsh" >
      <apex:pageBlockSection title="Related Records">
        <apex:pageblockTable value="{!objFields}" var="c">
            <apex:column value="{!objFields[c].act.Name}"/>
            <apex:column value="{!objFields[c].od.OrderNumber}"/>
            <apex:column value="{!objFields[c].od.Status}"/>
            <apex:column value="{!objFields[c].od.EffectiveDate}"/>
            <apex:column value="{!objFields[c].ct.ContractNumber}"/>
            <apex:column value="{!objFields[c].ct.Status}"/>
            <apex:column value="{!objFields[c].ct.ContractTerm}"/>
        </apex:pageblockTable>
      </apex:pageBlockSection>
    </apex:pageBlock>
  </apex:form>
</apex:page>

Controller:

public with sharing class OM_OrderManagementEncap {

    public List<SelectOption> objectNames { get; set; }
    
    public Map<id,Wrapperr> objFields { get; set; }
    
    public String selectedObject { get; set; }

    
    public OM_OrderManagementEncap(){
        objFields = new Map<id,Wrapperr>();
        objectNames = new List<SelectOption>();
        objectNames.add(new SelectOption('none','<choose one>')); 
        List<Account> aclst = [SELECT id,name FROM Account Order By CreatedDate desc LIMIT 2];
        for(Account acc : aclst){
        objectNames.add(new SelectOption(acc.id,acc.name));
        }
    }
    public PageReference selectAccount() {
        List<Account> actlst = [SELECT Id,Name,(SELECT id,OrderNumber,Status,EffectiveDate FROM ORDERS),(SELECT id,ContractNumber,Status,ContractTerm FROM Contracts) FROM Account WHERE Id = :selectedObject];
        System.debug(''+actlst);
        for(Account att : actlst){
        System.debug('Selected account is: '+att);
            try{
        objFields.put(att.id,new Wrapperr(att,att.Contracts,att.Orders));
                }
            catch(Exception e){
                System.debug(''+e);
            }
        
    }
    return null;
}

    Public Class Wrapperr{
        public Account act { get; set; }
        Public Contract ct { get; set; }
        Public Order od { get; set; }
        
        public Wrapperr(Account act,Contract ct,Order od){
            this.act = act;
            this.ct = ct;
            this.od = od;
            
    
    }
    
    
}
}
Lokesh KumarLokesh Kumar
The error is because of the more orders or contracts for one account. You need to update the VF code to iterate through the orders and contract too.
Raj VakatiRaj Vakati
Change your code as below
 
public with sharing class OM_OrderManagementEncap {

    public List<SelectOption> objectNames { get; set; }
    
    public Map<id,Wrapperr> objFields { get; set; }
    
    public String selectedObject { get; set; }

    
    public OM_OrderManagementEncap(){
        objFields = new Map<id,Wrapperr>();
        objectNames = new List<SelectOption>();
        objectNames.add(new SelectOption('none','<choose one>')); 
        List<Account> aclst = [SELECT id,name FROM Account Order By CreatedDate desc LIMIT 2];
        for(Account acc : aclst){
        objectNames.add(new SelectOption(acc.id,acc.name));
        }
    }
    public PageReference selectAccount() {
        List<Account> actlst = [SELECT Id,Name,(SELECT id,OrderNumber,Status,EffectiveDate FROM ORDERS),
		(SELECT id,ContractNumber,Status,ContractTerm FROM Contracts) FROM Account WHERE Id = :selectedObject];
        System.debug(''+actlst);
        for(Account att : actlst){
        System.debug('Selected account is: '+att);
            try{
        objFields.put(att.id,new Wrapperr(att,att.Contracts,att.Orders));
                }
            catch(Exception e){
                System.debug(''+e);
            }
        
    }
    return null;
}

    Public Class Wrapperr{
        public Account act { get; set; }
        Public List<Contract> ct { get; set; }
        Public List<Order> od { get; set; }
        
        public Wrapperr(Account act,List<Contract> ct,List<Order> od){
            this.act = act;
            this.ct = ct;
            this.od = od;
            
    
    }
    
    
}
}

 
abu saleh khan 8abu saleh khan 8
No still same error.If there are more than 1 related records then it is throwing error.if there is one related record,then m getting display.