Getting the error when I iterate my data variable in for:each.Below is the snip of the values that is fetched in the data variable.Please help!
HTML
<table class="slds-table slds-table_cell-buffer slds-table_bordered">
<template for:each={data} for:item="con">
<tr key={con.key}>
<th style="height: 25px;">
<div>{con}</div>
</th>
</tr>
</template>
</table>
JS
@track data;
getMergeLeads({Indexing:selectedIdsArray})
.then(result => {
var selectedIdRecords = result;
this.data = selectedIdRecords;
console.log('Get Merge Leads : '+JSON.stringify(this.data));
})
.catch(error => {
this.error = error;
console.log('Get Merge Leads error ===> '+error.body.message);
});
Controller
@AuraEnabled
public static ListMapWrapper getMergeLeadRecord ( list<string> Indexing ) {
wrapmap = new Map<string, List<dataWrapperClass>>();
system.debug('Indexing : '+Indexing);
list<string> tempstringID = new list<string>();
for(integer i = 0 ;i < Indexing.size(); i++){
tempstringID.add(Indexing[i]);
}
system.debug('tempstringID : '+tempstringID);
if(tempstringID.size()<=0){
return null;
}
String objName ='Account';
if (Schema.sObjectType.Account.isAccessible()){
Map<String, Schema.SObjectField> objectFields = new Map<String, Schema.SObjectField>();
Schema.SObjectType convertType = Schema.getGlobalDescribe().get(objName);
Schema.DescribeSObjectResult r = convertType.getDescribe();
objectFields = Schema.getGlobalDescribe().get(objName).getDescribe().fields.getMap();
List<String> fieldlist = new List<String>();
Set<String> aPINamesSet = objectFields.keyset();
fieldlist.addAll(aPINamesSet);
system.debug('fieldlist : '+fieldlist);
string soqlQueryCurrent = string.join(fieldlist,',');
if(soqlQueryCurrent.endsWithIgnoreCase(',')){
soqlQueryCurrent = soqlQueryCurrent.removeEndIgnoreCase(',');
}
String queryStr ='SELECT '+soqlQueryCurrent+' FROM '+objName+' where Id =:tempstringID';
system.debug('queryStr : '+queryStr);
List <Sobject> finalLeadListRecord = Database.query(String.escapeSingleQuotes(queryStr));
system.debug('finalLeadListRecord : '+finalLeadListRecord);
Set<SObjectField> accessibleFields = new Set<SObjectField>();
SObjectType sObjectType = Schema.getGlobalDescribe().get('Account');
for (SObjectField field : sObjectType.getDescribe().fields.getMap().values()){
if (field.getDescribe().isAccessible() && field.getDescribe().isUpdateable() ){
system.debug('Object accessible ');
accessibleFields.add(field);
}
}
for(Sobject ld : finalLeadListRecord){
String jsonInput = System.Json.serialize(ld);
system.debug('jsonInput '+jsonInput);
Map<String, Object> soqlresMap = (Map<String, Object>)JSON.deserializeUntyped(jsonInput);
List<dataWrapperClass> tempStrings = new List<dataWrapperClass>();
String ssmap = 'Id';
if(ssmap == 'Id' || ssmap == 'id'){
String tempVal = null;
String tempValID = null;
ssmap = 'Id (Master Record)';
tempVal = String.valueOf(soqlresMap.get('Name'));
tempValID = String.valueOf(soqlresMap.get('Id'));
if(wrapmap.containskey(ssmap)){
tempStrings = wrapmap.get(ssmap);
dataWrapperClass dcpw = new dataWrapperClass();
dcpw.FieldValue = tempVal;
dcpw.FieldAPIName = ssmap;
dcpw.FieldAPINameOrValue = tempValID;
tempStrings.add(dcpw);
}
else{
dataWrapperClass dcpw = new dataWrapperClass();
if(ssmap == 'Id (Master Record)'){
dcpw.FieldAPIName = tempVal;
dcpw.FieldValue = tempVal;
dcpw.RadioButton = true;
dcpw.FieldAPINameOrValue = tempValID;
}
tempStrings.add(dcpw);
wrapmap.put(ssmap,tempStrings);
}
}
for(SObjectField accField : accessibleFields){
String accFields = String.valueOf(accField);
if(accFields != 'Attributes' && accFields != 'PhotoURL' && accFields != 'Lastreferencedate' && accFields != 'IsDeleted' && accFields != 'Name' && accFields != 'Address'
&& accFields != 'OwnerId' && accFields != 'CreatedDate' && accFields != 'CreatedById' && accFields != 'Lastmodifieddate' && accFields != 'LastmodifiedbyId' && accFields != 'SystemModstamp'
&& accFields != 'Lastvieweddate' && accFields != 'LastReferencedDate' && accFields != 'lastTransferDate' && accFields != 'IsConverted'){
List<dataWrapperClass> tempString = new List<dataWrapperClass>();
system.debug('Inside restricted field condition');
String tempVal = null;
String tempValID = null;
if(accFields == 'Id'){
accFields = 'Id (Master Record)';
tempVal = String.valueOf(soqlresMap.get('Id'));
tempValID = String.valueOf(soqlresMap.get('Id'));
}
else{
tempVal = String.valueOf(soqlresMap.get(accFields));
tempValID = String.valueOf(soqlresMap.get('Id'));
}
if(wrapmap.containskey(accFields)){
tempString = wrapmap.get(accFields);
dataWrapperClass dcpw = new dataWrapperClass();
dcpw.FieldValue = tempVal;
dcpw.FieldAPIName = accFields;
dcpw.FieldAPINameOrValue = tempValID;
tempString.add(dcpw);
}
else{
dataWrapperClass dcpw = new dataWrapperClass();
if(accFields == 'Id (Master Record)'){
dcpw.FieldAPIName = tempVal;
dcpw.FieldValue = tempVal;
dcpw.RadioButton = true;
dcpw.FieldAPINameOrValue = tempValID;
}
else{
dcpw.FieldAPIName = accFields;
dcpw.FieldValue = tempVal;
dcpw.RadioButton = false;
dcpw.FieldAPINameOrValue = tempValID;
}
tempString.add(dcpw);
wrapmap.put(accFields,tempString);
}
}
}
}
try{
if(wrapmap.size()>0){
wrapmap = updateMapFieldsValue(wrapmap);
}
}
catch(Exception e){
system.debug(' : '+e.getCause());
system.debug(' : '+e.getLineNumber());
system.debug(' : '+e.getMessage());
system.debug(' : '+e.getTypeName());
}
List<ParentWrapper> results = new List<ParentWrapper>();
for(String key : wrapmap.keySet()){
ParentWrapper pw = new ParentWrapper(key, wrapmap.get(key));
results.add(pw);
}
ListMapWrapper lmw = new ListMapWrapper();
lmw.tableTemp = results;
lmw.mapTemp = wrapmap;
system.debug('lmw : '+lmw);
return lmw;
}
else{
ListMapWrapper lmw = new ListMapWrapper();
return lmw;
}
}
Best Answer
The issue is you are trying to return an
Object
and you are trying to iterate over it.I was able to replicate this via this code:
If you try to iterate over object rather than a list it would give this error.
Try to change you
Apex
code to return a list instead of a wrapper, orelse onJS
side try to drill down to the list and then assign the list tothis.data
orelse an empty list tothis.data
.Here is a simple way by which you can debug these issues from chrome developer console in future.
When you get an exception like this, always remember there will always a stack trace attached to it, from that you can easily identify the triggering point.
My triggering point was
t.data
(minified), which means the data which is being feed to the attribute is not in expected format. You can keep a breakpoint and check this.