You need to sign in to do that
Don't have an account?
Ruby Kandah
Invalid field for SObject Account Error
Hi --
I am receiving this error: Invalid field Restaurant__ID__c for SObject Account
Here is a partial copy of the critical lines of code in my controller:
public ObjectStructureMap[] formatObjectStructure( String currentId ){
List<ObjectStructureMap> asm = new List<ObjectStructureMap>{};
masm.clear();
//Change below
List<Account> al = new List<Account>{};
List<ID> currentParent = new List<ID>{};
Map<ID, String> nodeList = new Map<ID, String>{};
List<String> nodeSortList = new List<String>{};
List<Boolean> levelFlag = new List<Boolean>{};
List<Boolean> closeFlag = new List<Boolean>{};
String nodeId = '0';
String nodeType = 'child';
Integer count = 0;
Integer level = 0;
Boolean endOfStructure = false;
//Find highest level obejct in the structure
currentParent.add( GetTopElement( currentId ) );
//Loop though all children
while ( !endOfStructure ){
if( level == 0 ){
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId,a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.id IN : CurrentParent ORDER BY a.Name ];
}
else {
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId, a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.ParentID IN : CurrentParent ORDER BY a.Name ];
}
if( al.size() == 0 ){
endOfStructure = true;
}
else{
currentParent.clear();
for ( Integer i = 0 ; i < al.size(); i++ ){
//Change below
Account a = al[i];
nodeId = ( level > 0 ) ? NodeList.get( a.ParentId )+'.'+String.valueOf( i ) : String.valueOf( i );
masm.put( NodeID, new ObjectStructureMap( nodeID, levelFlag, closeFlag, nodeType, false, false, a ) );
currentParent.add( a.id );
nodeList.put( a.id,nodeId );
nodeSortList.add( nodeId );
}
maxLevel.add( level );
level++;
}
}
//Account structure must now be formatted
NodeSortList.sort();
for( Integer i = 0; i < NodeSortList.size(); i++ ){
List<String> pnl = new List<String> {};
List<String> cnl = new List<String> {};
List<String> nnl = new List<String> {};
if ( i > 0 ){
String pn = NodeSortList[i-1];
pnl = pn.split( '\\.', -1 );
}
String cn = NodeSortList[i];
cnl = cn.split( '\\.', -1 );
if( i < NodeSortList.size()-1 ){
String nn = NodeSortList[i+1];
nnl = nn.split( '\\.', -1 );
}
ObjectStructureMap tasm = masm.get( cn );
if ( cnl.size() < nnl.size() ){
//Parent
tasm.nodeType = ( isLastNode( cnl ) ) ? 'parent_end' : 'parent';
}
else if( cnl.size() > nnl.size() ){
tasm.nodeType = 'child_end';
tasm.closeFlag = setcloseFlag( cnl, nnl, tasm.nodeType );
}
else{
tasm.nodeType = 'child';
}
tasm.levelFlag = setlevelFlag( cnl, tasm.nodeType );
//Change below
if ( tasm.account.id == currentId ) {
tasm.currentNode = true;
}
asm.add( tasm );
}
asm[0].nodeType = 'start';
asm[asm.size()-1].nodeType = 'end';
return asm;
}
and here is the relevant chunk of my visualforce page:
<apex:outputLink value="/{!pos.account.id}" style="{!IF(pos.currentNode,'font-weight: bold;','')}" styleClass="columnHeadActiveBlack" target="_top">{!pos.account.name}</apex:outputLink>
<!-- Include the following if you uses sites with accounts -->
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Restaurant__ID__c}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Deck_Rank__c}"rendered="{!IF(pos.account.Deck_Rank__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Lead_List__c}" rendered="{!IF(pos.Lead_List__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Phone}" rendered="{!IF(pos.Phone!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.GPV_30_days__c}" rendered="{!IF(pos.GPV_30_days__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.LastActivityDate}" rendered="{!IF(pos.LastActivityDate!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Account_Type__c}" rendered="{!IF(pos.Account_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Lead_Type__c}" rendered="{!IF(pos.Lead_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Owner.Alias}" rendered="{!IF(pos.Owner.Alias!= '', true, false)}"/>
<!-- Stop -->
</span>
<div> </div>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),false,true)}">
<div id='{!pos.nodeId}'>
</apex:outputText>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),true,false)}">
<div id='{!pos.nodeId}'><apex:image url="/s.gif" alt="" width="1" height="1"/></div>
</apex:outputText>
<apex:repeat value="{!pos.closeFlag}" var="close">
</div>
</apex:repeat>
Can someone help me here?
I am receiving this error: Invalid field Restaurant__ID__c for SObject Account
Here is a partial copy of the critical lines of code in my controller:
public ObjectStructureMap[] formatObjectStructure( String currentId ){
List<ObjectStructureMap> asm = new List<ObjectStructureMap>{};
masm.clear();
//Change below
List<Account> al = new List<Account>{};
List<ID> currentParent = new List<ID>{};
Map<ID, String> nodeList = new Map<ID, String>{};
List<String> nodeSortList = new List<String>{};
List<Boolean> levelFlag = new List<Boolean>{};
List<Boolean> closeFlag = new List<Boolean>{};
String nodeId = '0';
String nodeType = 'child';
Integer count = 0;
Integer level = 0;
Boolean endOfStructure = false;
//Find highest level obejct in the structure
currentParent.add( GetTopElement( currentId ) );
//Loop though all children
while ( !endOfStructure ){
if( level == 0 ){
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId,a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.id IN : CurrentParent ORDER BY a.Name ];
}
else {
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId, a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.ParentID IN : CurrentParent ORDER BY a.Name ];
}
if( al.size() == 0 ){
endOfStructure = true;
}
else{
currentParent.clear();
for ( Integer i = 0 ; i < al.size(); i++ ){
//Change below
Account a = al[i];
nodeId = ( level > 0 ) ? NodeList.get( a.ParentId )+'.'+String.valueOf( i ) : String.valueOf( i );
masm.put( NodeID, new ObjectStructureMap( nodeID, levelFlag, closeFlag, nodeType, false, false, a ) );
currentParent.add( a.id );
nodeList.put( a.id,nodeId );
nodeSortList.add( nodeId );
}
maxLevel.add( level );
level++;
}
}
//Account structure must now be formatted
NodeSortList.sort();
for( Integer i = 0; i < NodeSortList.size(); i++ ){
List<String> pnl = new List<String> {};
List<String> cnl = new List<String> {};
List<String> nnl = new List<String> {};
if ( i > 0 ){
String pn = NodeSortList[i-1];
pnl = pn.split( '\\.', -1 );
}
String cn = NodeSortList[i];
cnl = cn.split( '\\.', -1 );
if( i < NodeSortList.size()-1 ){
String nn = NodeSortList[i+1];
nnl = nn.split( '\\.', -1 );
}
ObjectStructureMap tasm = masm.get( cn );
if ( cnl.size() < nnl.size() ){
//Parent
tasm.nodeType = ( isLastNode( cnl ) ) ? 'parent_end' : 'parent';
}
else if( cnl.size() > nnl.size() ){
tasm.nodeType = 'child_end';
tasm.closeFlag = setcloseFlag( cnl, nnl, tasm.nodeType );
}
else{
tasm.nodeType = 'child';
}
tasm.levelFlag = setlevelFlag( cnl, tasm.nodeType );
//Change below
if ( tasm.account.id == currentId ) {
tasm.currentNode = true;
}
asm.add( tasm );
}
asm[0].nodeType = 'start';
asm[asm.size()-1].nodeType = 'end';
return asm;
}
and here is the relevant chunk of my visualforce page:
<apex:outputLink value="/{!pos.account.id}" style="{!IF(pos.currentNode,'font-weight: bold;','')}" styleClass="columnHeadActiveBlack" target="_top">{!pos.account.name}</apex:outputLink>
<!-- Include the following if you uses sites with accounts -->
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Restaurant__ID__c}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Deck_Rank__c}"rendered="{!IF(pos.account.Deck_Rank__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Lead_List__c}" rendered="{!IF(pos.Lead_List__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Phone}" rendered="{!IF(pos.Phone!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.GPV_30_days__c}" rendered="{!IF(pos.GPV_30_days__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.LastActivityDate}" rendered="{!IF(pos.LastActivityDate!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Account_Type__c}" rendered="{!IF(pos.Account_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Lead_Type__c}" rendered="{!IF(pos.Lead_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Owner.Alias}" rendered="{!IF(pos.Owner.Alias!= '', true, false)}"/>
<!-- Stop -->
</span>
<div> </div>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),false,true)}">
<div id='{!pos.nodeId}'>
</apex:outputText>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),true,false)}">
<div id='{!pos.nodeId}'><apex:image url="/s.gif" alt="" width="1" height="1"/></div>
</apex:outputText>
<apex:repeat value="{!pos.closeFlag}" var="close">
</div>
</apex:repeat>
Can someone help me here?
It seems like, you've used an extra '_' in your field name. The field you've queried in your controller is 'Restaurant_ID__c' and on your VF page you are referring it as 'Restaurant__ID__c' (here's am extra '_' between Restaurant and Id).
Hope this helps!
Please mark this question as Solved if this answers your question.
Thanks,
Apoorv
Thanks for your reply! That was exactly what was wrong with the Restaurant_ID__c field...once I corrected it, I am now receiving this error: Unknown property 'AccountStructure.ObjectStructureMap.Lead_List__c'
When I remove the Lead List line, it then has this error: Unknown property 'AccountStructure.ObjectStructureMap.Phone'
Any idea about what is going on here?
Ruby
I can't see you full code, but by what i.m seeing, i guess here something which you can try:
Try changing your outputText lines for Lead_List__c and Phone to following
Hope this helps.
Line 77 in my code is bolded and underlined below:
<!-- Include the following if you uses sites with accounts -->
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Restaurant__ID__c}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Deck_Rank__c}"rendered="{!IF(pos.account.Deck_Rank__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Lead_List__c}" rendered="{!IF(pos.Lead_List__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Phone}" rendered="{!IF(pos.Phone!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.GPV_30_days__c}" rendered="{!IF(pos.GPV_30_days__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.LastActivityDate}" rendered="{!IF(pos.LastActivityDate!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Account_Type__c}" rendered="{!IF(pos.Account_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Lead_Type__c}" rendered="{!IF(pos.Lead_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Owner.Alias}" rendered="{!IF(pos.Owner.Alias!= '', true, false)}"/>
<!-- Stop -->
</span>
<div> </div>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),false,true)}">
<div id='{!pos.nodeId}'>
</apex:outputText>
<!--
Note on Changing: Scroll down or search for "Change"
Ignore warnings
-->
<apex:component Controller="AccountStructure">
<apex:attribute name="currentId" description="This is the Account Id for displaying Acccount Hierarchy" type="String" required="true" assignTo="{!currentId}"/>
<div class="treeNode">
<apex:repeat value="{!ObjectStructure}" var="pos" >
<apex:repeat value="{!pos.levelFlag}" var="flag" first="0">
<apex:image url="/img/tree/empty.gif" height="16" width="20" rendered="{!IF(flag,false,true)}"/>
<apex:image url="/s.gif" alt="" width="3" height="16" rendered="{!IF(flag,true,false)}"/>
<apex:image url="/img/tree/chain.gif" height="16" width="20" rendered="{!IF(flag,true,false)}"/>
</apex:repeat>
<span height="16" v="top">
<apex:outputText rendered="{!IF(pos.nodeType=='start',true,false)}">
<apex:image id="tree_start" url="/img/tree/minusStart.gif" height="16" width="20" title="Click to expand/collapse nested items." onClick="TreeNodeElement.prototype.toggle(this,'{!pos.nodeId}')"/>
<apex:image id="Icon_start" url="/img/icon/custom51_100/globe16.png" width="16" height="16" rendered="{!IF(pos.currentNode,false,true)}"/>
<apex:image id="Icon_start_current" url="/img/icon/star16.png" width="16" height="16" rendered="{!IF(pos.currentNode,true,false)}"/>
</apex:outputText>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='parent',pos.nodeType=='parent_end'),true,false)}">
<apex:image id="Tree_parent" url="/img/tree/minus.gif" rendered="{!IF(pos.nodeType=='parent',true,false)}" height="16" width="20" title="Click to expand/collapse nested items." onClick="TreeNodeElement.prototype.toggle(this,'{!pos.nodeId}')"/>
<apex:image id="Tree_parent_end" url="/img/tree/minusEnd.gif" rendered="{!IF(pos.nodeType=='parent_end',true,false)}" height="16" width="20" title="Click to expand/collapse nested items." onClick="TreeNodeElement.prototype.toggle(this,'{!pos.nodeId}')"/>
<apex:image id="Icon_parent" url="/img/icon/factory16.png" width="16" height="16" rendered="{!IF(pos.currentNode,false,true)}"/>
<apex:image id="Icon_parent_current" url="/img/icon/star16.png" width="16" height="16" rendered="{!IF(pos.currentNode,true,false)}"/>
</apex:outputText>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child',pos.nodeType=='child_end'),true,false)}">
<apex:image id="Tree_child" url="/img/tree/node.gif" rendered="{!IF(pos.nodeType=='child',true,false)}" height="16" width="20" title="Click to expand/collapse nested items." onClick="TreeNodeElement.prototype.toggle(this,'{!pos.nodeId}')"/>
<apex:image id="Tree_child_current" url="/img/tree/nodeEnd.gif" rendered="{!IF(pos.nodeType=='child_end',true,false)}" height="16" width="20" title="Click to expand/collapse nested items." onClick="TreeNodeElement.prototype.toggle(this,'{!pos.nodeId}')"/>
<apex:image id="Icon_child" url="/img/icon/desk16.png" width="16" height="16" rendered="{!IF(pos.currentNode,false,true)}"/>
<apex:image id="Icon_child_current" url="/img/icon/star16.png" width="16" height="16" rendered="{!IF(pos.currentNode,true,false)}"/>
</apex:outputText>
<apex:outputText rendered="{!IF(pos.nodeType=='end',true,false)}">
<apex:image id="Tree_end" url="/img/tree/nodeEnd.gif" height="16" width="20"/>
<apex:image id="Icon_end" url="/img/icon/desk16.png" width="16" height="16" rendered="{!IF(pos.currentNode,false,true)}"/>
<apex:image id="Icon_end_current" url="/img/icon/star16.png" width="16" height="16" rendered="{!IF(pos.currentNode,true,false)}"/>
</apex:outputText>
<!-- Change Below -->
<apex:outputLink value="/{!pos.account.id}" style="{!IF(pos.currentNode,'font-weight: bold;','')}" styleClass="columnHeadActiveBlack" target="_top">{!pos.account.name}</apex:outputLink>
<!-- Include the following if you uses sites with accounts -->
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Restaurant_ID__c}"rendered="{!IF(pos.account.Restaurant_ID__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Deck_Rank__c}"rendered="{!IF(pos.account.Deck_Rank__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.account.Lead_List__c}" rendered="{!IF(pos.account.Lead_List__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Phone}" rendered="{!IF(pos.Phone!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.GPV_30_days__c}" rendered="{!IF(pos.GPV_30_days__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.LastActivityDate}" rendered="{!IF(pos.LastActivityDate!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Account_Type__c}" rendered="{!IF(pos.Account_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Lead_Type__c}" rendered="{!IF(pos.Lead_Type__c!= '', true, false)}"/>
<apex:outputText style="{!IF(pos.currentNode,'font-weight: bold;','')}" value=", {!pos.Owner.Alias}" rendered="{!IF(pos.Owner.Alias!= '', true, false)}"/>
<!-- Stop -->
</span>
<div> </div>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),false,true)}">
<div id='{!pos.nodeId}'>
</apex:outputText>
<apex:outputText rendered="{!IF(OR(pos.nodeType=='child_end',pos.nodeType=='child'),true,false)}">
<div id='{!pos.nodeId}'><apex:image url="/s.gif" alt="" width="1" height="1"/></div>
</apex:outputText>
<apex:repeat value="{!pos.closeFlag}" var="close">
</div>
</apex:repeat>
</apex:repeat>
<br/><br/><br/>
</div>
</apex:component>
Controller:
/**
* To adapt this to anouther Object simply search for "Change" to go to the places
* where the sObject and query must be changed
*/
public with sharing class AccountStructure{
//Declare variables
public String currentId;
public List<ObjectStructureMap> asm ;
public Map<String, ObjectStructureMap> masm;
public List<Integer> maxLevel;
/**
* Contructor
*/
public AccountStructure() {
this.asm = new List<ObjectStructureMap>{};
this.masm = new Map<String, ObjectStructureMap>{};
this.maxLevel = new List<Integer>{};
}
/**
* Allow page to set the current ID
*/
public void setcurrentId( String cid ){
currentId = cid;
}
/**
* Return ObjectStructureMap to page
* @return asm
*/
public List<ObjectStructureMap> getObjectStructure(){
asm.clear();
if ( currentId == null ) {
currentId = System.currentPageReference().getParameters().get( 'id' );
}
System.assertNotEquals( currentId, null, 'sObject ID must be provided' );
asm = formatObjectStructure( CurrentId );
return asm;
}
/**
* Query Account from top down to build the ObjectStructureMap
* @param currentId
* @return asm
*/
public ObjectStructureMap[] formatObjectStructure( String currentId ){
List<ObjectStructureMap> asm = new List<ObjectStructureMap>{};
masm.clear();
//Change below
List<Account> al = new List<Account>{};
List<ID> currentParent = new List<ID>{};
Map<ID, String> nodeList = new Map<ID, String>{};
List<String> nodeSortList = new List<String>{};
List<Boolean> levelFlag = new List<Boolean>{};
List<Boolean> closeFlag = new List<Boolean>{};
String nodeId = '0';
String nodeType = 'child';
Integer count = 0;
Integer level = 0;
Boolean endOfStructure = false;
//Find highest level obejct in the structure
currentParent.add( GetTopElement( currentId ) );
//Loop though all children
while ( !endOfStructure ){
if( level == 0 ){
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId,a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.id IN : CurrentParent ORDER BY a.Name ];
}
else {
//Change below
al = [ SELECT a.Type, a.Site, a.ParentId, a.OwnerId, a.Restaurant_ID__c,a.Name,a.Deck_Rank__c, a.Market_Area__c,a.Lead_List__c,a.Phone,a.GPV_30_days__c,a.LastActivityDate,a.Account_Type__c,a.Lead_Type__c,a.Owner.Alias, a.Id FROM Account a WHERE a.ParentID IN : CurrentParent ORDER BY a.Name ];
}
if( al.size() == 0 ){
endOfStructure = true;
}
else{
currentParent.clear();
for ( Integer i = 0 ; i < al.size(); i++ ){
//Change below
Account a = al[i];
nodeId = ( level > 0 ) ? NodeList.get( a.ParentId )+'.'+String.valueOf( i ) : String.valueOf( i );
masm.put( NodeID, new ObjectStructureMap( nodeID, levelFlag, closeFlag, nodeType, false, false, a ) );
currentParent.add( a.id );
nodeList.put( a.id,nodeId );
nodeSortList.add( nodeId );
}
maxLevel.add( level );
level++;
}
}
//Account structure must now be formatted
NodeSortList.sort();
for( Integer i = 0; i < NodeSortList.size(); i++ ){
List<String> pnl = new List<String> {};
List<String> cnl = new List<String> {};
List<String> nnl = new List<String> {};
if ( i > 0 ){
String pn = NodeSortList[i-1];
pnl = pn.split( '\\.', -1 );
}
String cn = NodeSortList[i];
cnl = cn.split( '\\.', -1 );
if( i < NodeSortList.size()-1 ){
String nn = NodeSortList[i+1];
nnl = nn.split( '\\.', -1 );
}
ObjectStructureMap tasm = masm.get( cn );
if ( cnl.size() < nnl.size() ){
//Parent
tasm.nodeType = ( isLastNode( cnl ) ) ? 'parent_end' : 'parent';
}
else if( cnl.size() > nnl.size() ){
tasm.nodeType = 'child_end';
tasm.closeFlag = setcloseFlag( cnl, nnl, tasm.nodeType );
}
else{
tasm.nodeType = 'child';
}
tasm.levelFlag = setlevelFlag( cnl, tasm.nodeType );
//Change below
if ( tasm.account.id == currentId ) {
tasm.currentNode = true;
}
asm.add( tasm );
}
asm[0].nodeType = 'start';
asm[asm.size()-1].nodeType = 'end';
return asm;
}
/**
* Determin parent elements relationship to current element
* @return flagList
*/
public List<Boolean> setlevelFlag( List<String> nodeElements, String nodeType ){
List<Boolean> flagList = new List<Boolean>{};
String searchNode = '';
String workNode = '';
Integer cn = 0;
for( Integer i = 0; i < nodeElements.size() - 1; i++ ){
cn = Integer.valueOf( nodeElements[i] );
cn++;
searchNode = workNode + String.valueOf( cn );
workNode = workNode + nodeElements[i] + '.';
if ( masm.containsKey( searchNode ) ){
flagList.add( true );
}
else {
flagList.add( false );
}
}
return flagList;
}
/**
* Determin if the element is a closing element
* @return flagList
*/
public List<Boolean> setcloseFlag( List<String> cnl, List<String> nnl, String nodeType ){
List<Boolean> flagList = new List<Boolean>{};
String searchNode = '';
String workNode = '';
Integer cn = 0;
for( Integer i = nnl.size(); i < cnl.size(); i++ ){
flagList.add( true );
}
return flagList;
}
/**
* Determin if Element is the bottom node
* @return Boolean
*/
public Boolean isLastNode( List<String> nodeElements ){
String searchNode = '';
Integer cn = 0;
for( Integer i = 0; i < nodeElements.size(); i++ ){
if ( i == nodeElements.size()-1 ){
cn = Integer.valueOf( nodeElements[i] );
cn++;
searchNode = searchNode + String.valueOf( cn );
}
else {
searchNode = searchNode + nodeElements[i] + '.';
}
}
if ( masm.containsKey( searchNode ) ){
return false;
}
else{
return true;
}
}
/**
* Find the tom most element in Heirarchy
* @return objId
*/
public String GetTopElement( String objId ){
Boolean top = false;
while ( !top ) {
//Change below
Account a = [ Select a.Id, a.ParentId From Account a where a.Id =: objId limit 1 ];
if ( a.ParentID != null ) {
objId = a.ParentID;
}
else {
top = true;
}
}
return objId ;
}
/**
* Wrapper class
*/
public with sharing class ObjectStructureMap{
public String nodeId;
public Boolean[] levelFlag = new Boolean[]{};
public Boolean[] closeFlag = new Boolean[]{};
public String nodeType;
public Boolean currentNode;
/**
* @Change this to your sObject
*/
public Account account;
public String getnodeId() { return nodeId; }
public Boolean[] getlevelFlag() { return levelFlag; }
public Boolean[] getcloseFlag() { return closeFlag; }
public String getnodeType() { return nodeType; }
public Boolean getcurrentNode() { return currentNode; }
/**
* @Change this to your sObject
*/
public Account getaccount() { return account; }
public void setnodeId( String n ) { this.nodeId = n; }
public void setlevelFlag( Boolean l ) { this.levelFlag.add(l); }
public void setlcloseFlag( Boolean l ) { this.closeFlag.add(l); }
public void setnodeType( String nt ) { this.nodeType = nt; }
public void setcurrentNode( Boolean cn ) { this.currentNode = cn; }
/**
* @Change this to your sObject
*/
public void setaccount( Account a ) { this.account = a; }
/**
* @Change the parameters to your sObject
*/
public ObjectStructureMap( String nodeId, Boolean[] levelFlag,Boolean[] closeFlag , String nodeType, Boolean lastNode, Boolean currentNode, Account a ){
this.nodeId = nodeId;
this.levelFlag = levelFlag;
this.closeFlag = closeFlag;
this.nodeType = nodeType;
this.currentNode = currentNode;
//Change this to your sObject
this.account = a;
}
}
}
Try modifying your VF page with following code:
Hope this helps.
There's something that you are missing. Please double check