Activity Forums Salesforce® Discussions How to show Contracts of Account according to hierarchy on VF page?

  • How to show Contracts of Account according to hierarchy on VF page?

    Posted by situ on February 12, 2020 at 5:55 am

    Account is one object and Contract is another object.

    I want to show Contracts of all Child Accounts on Ultimate Parent Account.

    Below is the code for same.

    **Controller**

    public AccountHierarchyController(ApexPages.StandardController controller) {
            this.acc = (Account)controller.getRecord();
            this.accountList = new List<Account>();
    
            Account baseAccount = [SELECT Id, 
                                   ParentId, 
                                   Name,
                                   Parent.Name,
                                   (SELECT ContractNumber,SBQQ__ActiveContract__c,StartDate,Contract_renewed__c FROM Contracts),
                                   (SELECT Id, Name FROM ChildAccounts)
                                   FROM Account 
                                   WHERE Id = :acc.id];
            accountList.add(baseAccount);
    
            // Traverse the hierarchy downwards
            Set<Id> accountsToQuery = new Map<Id, Account>(baseAccount.ChildAccounts).keySet();
            while (accountsToQuery.size() > 0) {
                List<Account> thisLevelAccounts = [SELECT Id, Name, Parent.Name,
                                                   (SELECT ContractNumber,SBQQ__ActiveContract__c,StartDate,Contract_renewed__c FROM Contracts),
                                                   (SELECT Id, Name FROM ChildAccounts)
                                                   FROM Account
                                                   WHERE Id IN :accountsToQuery];
                accountsToQuery = new Set<Id>();
    
                for (Account a : thisLevelAccounts) {
                    // Add this Account (with its Contracts) to the list.
                    accountList.add(a);
    
                    // Add this Account's children to the query for the next level.
                    for (Account child : a.ChildAccounts) {
                        accountsToQuery.add(child.Id);
                    }
                }
            }
        }
        }
    

    **Vf Page**

        <apex:page title="Contract" standardController="Account" extensions="AccountHierarchyController">
        <apex:outputPanel id="cont">
            <apex:pageBlock title="Contracts">
                <apex:repeat value="{! accountList }" var="a">
                    <apex:pageBlockSection title="{! a.Name + IF(NOT(ISBLANK(a.ParentId)), ' (child of ' + a.Parent.Name + ')', '') }">
                        <apex:pageBlockTable value="{! a.Contracts }" var="con" id="conlist" title="Contract">
                            <apex:column value="{!con.ContractNumber}"/>
                            <apex:column value="{!con.SBQQ__ActiveContract__c}" />
                            <apex:column value="{!con.StartDate}" />
    			<apex:column value="{!con.Contract_renewed__c}" />
                        </apex:pageBlockTable>
                    </apex:pageBlockSection>
                </apex:repeat>
            </apex:pageBlock>
        </apex:outputPanel>
    </apex:page>
    

     

    But when I am trying to save it's showing:

    Compile error:Unexpected token 'AccountHierarchyController'.

    Can someone can help me on this.

    situ replied 4 years, 10 months ago 1 Member · 0 Replies
  • 0 Replies

Log In to reply.

Popular Salesforce Blogs

Popular Salesforce Videos

Popular Salesforce Infographics