0

I have a SOQL in a controller

 List<Application__C> response = [SELECT Contract_Number__c,
                       Name,
                       Applicant_Name__c,
                       Broker_Account__r.Name,
                       State__c,
                       Status__c, (SELECT Envelope_Status__c FROM Docusign_Histories__r ) 
                       FROM application__c WHERE CreatedDate >= :fromDate AND CreatedDate <= :toDate];

I want to loop through in this list and print in a visualforce page. My Approach is

                    <apex:repeat value="{!response}" var="record" id="theRepeat">
                        <tbody>
                            <tr>
                                <td class="rowData">{!record.Name}</td>
                                <td class="rowData">{!record.Applicant_Name__c}</td>
                                <td class="rowData">{!record.Contract_Number__c}</td>
                                <td class="rowData">{!record.Broker_Account__r.Name}</td>
                                <td class="rowData">{!record.State__c}</td>
                                <td class="rowData">{!record.Status__c}</td>
                                <td class="rowData">{!record.Docusign_Histories__r.Envelope_Status__c}</td>
                            </tr>
                        </tbody>
                    </apex:repeat>

But it is throwing the following error in VF page

Unknown property 'VisualforceArrayList.Envelope_Status__c'

How to get the field value of parent to child relationship ?

1 Answer 1

1

Your query will return the parent records along with their respective child record(s). In order to display child record(s) which will be returned in a List<sObject>, you either have to use another <apex:repeat> inside that repeat tag or use index of list to display specific child record.

Using <apex:repeat>

<apex:repeat value="{!response}" var="record" id="theRepeat">
    <tbody>
        <tr>
            <td class="rowData">{!record.Name}</td>
            <td class="rowData">{!record.Applicant_Name__c}</td>
            <td class="rowData">{!record.Contract_Number__c}</td>
            <td class="rowData">{!record.Broker_Account__r.Name}</td>
            <td class="rowData">{!record.State__c}</td>
            <td class="rowData">{!record.Status__c}</td>
            <apex:repeat value="{!record.Docusign_Histories__r}" var="childrecord" id="childRepeat">
                <tbody>
                    <tr>
                        <td class="rowData">{!childrecord.Envelope_Status__c}</td>
                    </tr>
                </tbody>
            </apex:repeat>
        </tr>
    </tbody>
</apex:repeat>

Using index to display single record's field value

<apex:repeat value="{!response}" var="record" id="theRepeat">
    <tbody>
        <tr>
            <td class="rowData">{!record.Name}</td>
            <td class="rowData">{!record.Applicant_Name__c}</td>
            <td class="rowData">{!record.Contract_Number__c}</td>
            <td class="rowData">{!record.Broker_Account__r.Name}</td>
            <td class="rowData">{!record.State__c}</td>
            <td class="rowData">{!record.Status__c}</td>
            <td class="rowData">{!record.Docusign_Histories__r[0].Envelope_Status__c}</td>
        </tr>
    </tbody>
</apex:repeat>
2
  • Thanks. It works! One more thing, I always want to return only one row from the child. Can I apply a filter in the subquery? Apr 15, 2020 at 13:04
  • @NoorAShuvo Yup, you can either apply a filter or can use LIMIT 1 Apr 15, 2020 at 13:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .