Написание расширения Custom Controller для получения связанных записей и перебора списка / индекса и использования с apex: repeat - PullRequest
0 голосов
/ 15 мая 2019

У меня есть 3 пользовательских объекта с отношениями Master-Detail и Lookup Lookup. CustomA__c (связанный CustomB__c) <-> CustomB__c <-> CustomC_c (связанный CustomB_cc)

Я создал страницу Visualforce с таблицей HTML для репликации документа PDF и пользовательского расширения контроллера, пока что все хорошо. Но я только начинающий с вершинным кодированием.

Проблема в том, что мне нужно реплицировать документ таким, какой он есть, когда нет связанных записей для CustomA__c или меньше 5, он все равно должен показывать полную таблицу (пустые строки). Максимум. Число строк / связанных записей в документе равно 5, вторая страница не требуется.

В настоящее время я пытаюсь выполнить это, используя apex: variable и apex: repeat, как я видел некоторые примеры, но, возможно, есть и другое решение. Для страницы Visualforce я уже написал код для строк с данными и другим апексом: повторите для пустых строк.

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

Любая помощь будет оценена! Спасибо, Иосип

public with sharing class CustomAController {    

    public CustomA__c customa{get; set;}
    public CustomA__c ca{get; set;}

    public CustomAController (ApexPages.StandardController controller) {
        ca = (CustomA__c )controller.getRecord();
        customa= [SELECT Id, Name  FROM CustomA__c WHERE Id = :ApexPages.currentPage().getParameters().get('Id')];
    }

        public List<CustomB__c > getrelatedCustomB() {
        List <CustomB__c > cbList = New List<CustomB__c >(5);

        for(CustomA__c acc:[SELECT Id, Name, (SELECT Id, Name, ... , CustomCfield__r.Name FROM CustomBs__r ORDER BY Name LIMIT 5) FROM CustomA__c WHERE Id = :customa.Id]){
            for(CustomB__c cb:acc.CustomBs__r)
                cbList.add(cb);
        }

        return cbList;
        }

}

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете значительно упростить свой код, написав прямой запрос на дочерний объект вместо SOQL-запроса parent-child.

public List<CustomB__c > getrelatedCustomB() {
    return [SELECT Id, Name, ... , CustomCfield__r.Name 
            FROM CustomB__c 
            WHERE CustomA__c = :customA.Id
            ORDER BY Name 
            LIMIT 5];
}

Здесь нет необходимости перебирать Apex.

...