You need to sign in to do that
Don't have an account?
abu 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;
}
}
}
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 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 Vakati
Change your code as below
abu 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.