У меня есть два настраиваемых объекта: «Дела MRC» (родительский) и «Примечания к делу MRC» (дочерний). На странице Lightning Record дел MRC я хочу отобразить все примечания к делу, связанные с делом MRC, с полным текстом каждого примечания, видимым без нажатия на каждую запись примечания по отдельности.

Если я просто добавлю виджет связанных списков на страницу записи Lightning, стандартный вид усекает длинные поля и требует отдельного щелчка по каждой записи для просмотра полных заметок.

Я пытаюсь создать страницу VF, на которой отображаются полные заметки. Мне удалось создать рабочую страницу с помощью стандартного контроллера для объекта Case Notes (дочернего), но затем я понял, что не могу добавить это на страницу записи MRC Cases, потому что он должен использовать стандартный контроллер для родительского объекта и ему потребуется пользовательский контроллер или расширение для доступа к связанным записям.

Я застрял в написании контроллера. (примечание: имена API для двух объектов: «Жалоба__c» (дело MRC) и «Grievance_Note__c» (примечания к делу MRC))

Вот что у меня есть:

MrcCaseList.vfp:

<apex:page standardController="Grievance__c" extensions="MrcCaseListController" recordSetVar="notes" sidebar="false" >     
      <apex:pageBlock >
        <apex:pageBlockTable value="{!notes}" var="n">
                <apex:column headerValue="Case Note" value="{!n.Note__c}" style="width: 76%; padding:10px;vertical-align:top;" />            

                <apex:column value="{!n.Contact_Date__c}" style="width: 6%; padding:10px; vertical-align:top;"/> 

                <apex:column value="{!n.Contact_Type__c}" style="width: 6%; padding:10px; vertical-align:top;"/>

                <apex:column value="{!n.CreatedById}" style="width: 6%; padding:10px; vertical-align:top;"/>    
                <apex:column style="width: 6%; padding:10px;vertical-align:top;">
                    <apex:outputLink value="/{!n.id}" target="_blank">
                        {!n.Note_Created_Date_Time__c}
                    </apex:outputLink>
                </apex:column>   
        </apex:pageBlockTable>
  </apex:pageBlock>  

</apex:page>

MrcCaseListController.apxc:

public with sharing class MrcCaseListController {     

    public List<Grievance_Note__c> notes{get;set;} 
    public Grievance__c mrcCase {get;set;} 

    public MrcCaseListController(ApexPages.StandardController controller) { 

        mrcCase = (Grievance__c)controller.getRecord();      

        List <Grievance__c> mrcCaseList = [SELECT id FROM Grievance__c WHERE id =: mrcCase.id LIMIT 1]; 

        notes = [SELECT id,Note__c,Note_Created_Date_Time__c,Contact_Date__c,Grievance__c,Contact_Type__c,CreatedById,LastModifiedById 
                    FROM Grievance_Note__c 
                    WHERE Grievance__c = :mrcCase.id 
                    ORDER BY Note_Created_Date_Time__c];  

} 

}

Я получаю эту ошибку со страницы VF:

Неизвестный конструктор «MrcCaseListController.MrcCaseListController (контроллер ApexPages.StandardSetController)»

Почему я получаю эту ошибку? Как я могу это исправить?

0
Adrian Larson 21 Фев 2019 в 06:39

1 ответ

Лучший ответ

Проблема в том, что вы пытаетесь использовать StandardListController где в данном случае не нужно. Для вашего контроллера это должно быть нормально.

public with sharing class MrcCaseListController {

    private final Grievance__c mcrCase;

    public MrcCaseListController(ApexPages.StandardController stdController) {
        this.mcrCase = (Grievance__c)stdController.getRecord();
    }

    public List<Grievance_Note__c> getNotes() {
        return [
            SELECT  Id,
                    Note__c,
                    Note_Created_Date_Time__c,
                    Contact_Date__c,
                    Grievance__c,
                    Contact_Type__c,
                    CreatedById,
                    LastModifiedById
            FROM    Grievance_Note__c
            WHERE   Grievance__c = :mrcCase.id
            ORDER   BY Note_Created_Date_Time__c
        ];
    }
}

Затем для страницы VisualForce вы можете удалить параметр recordSetVar.

<apex:page standardController="Grievance__c" extensions="MrcCaseListController" sidebar="false">
    <apex:pageBlock>
        <apex:pageBlockTable value="{!notes}" var="n">
            <apex:column headerValue="Case Note" value="{!n.Note__c}" style="width: 76%; padding:10px;vertical-align:top;" />
            <apex:column value="{!n.Contact_Date__c}" style="width: 6%; padding:10px; vertical-align:top;" />
            <apex:column value="{!n.Contact_Type__c}" style="width: 6%; padding:10px; vertical-align:top;" />
            <apex:column value="{!n.CreatedById}" style="width: 6%; padding:10px; vertical-align:top;" />
            <apex:column style="width: 6%; padding:10px;vertical-align:top;">
                <apex:outputLink value="/{!n.id}" target="_blank">
                    {!n.Note_Created_Date_Time__c}
                </apex:outputLink>
            </apex:column>
        </apex:pageBlockTable>
    </apex:pageBlock>
</apex:page>
0
Andrew L. 21 Фев 2019 в 03:14
Спасибо! Это сработало отлично
 – 
rg_
21 Фев 2019 в 23:46