编写一个Custom Controller扩展以获取相关记录并遍历列表/索引,并与apex:repeat一起使用

时间:2019-05-15 13:43:44

标签: salesforce apex visualforce

我有3个具有主从关系和查找关系的自定义对象。 CustomA__c(相关的CustomB__c)<-> CustomB__c <-> CustomC_c(相关的CustomB_cc)

到目前为止,我已经建立了带有HTML表的Visualforce页面,用于复制PDF文档和“自定义控制器扩展”。 但是我只是一个使用apex编码的初学者。

问题是我需要按原样复制文档,当没有与CustomA__c或5以下的相关记录时,它仍应显示完整表(空行)。最高文档上的行/相关记录为5,不需要第二页。

目前,我正在尝试通过使用apex:variable和apex:repeat来实现这一点,正如我所看到的一些示例,但是也许还有另一种解决方案。对于Visualforce页面,我已经为包含数据的行编写了代码,为空行编写了另一个apeax:repeat。

但是我确实在为控制器苦苦挣扎,我知道我需要遍历列表,因为我只是不明白它还不够好,所以我已经编写的代码也被合并到示例中。

>

任何帮助将不胜感激!谢谢,乔西普

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 :(得分:0)

通过在子对象上编写直接查询而不是父子SOQL查询,可以大大简化代码。

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中进行迭代。