我的控制器都是自定义的。
我有一个对象/表,其中的字段引用同一个对象并表示父对象。
对象/表中有很多行。
我希望将它们全部转储到VF,并允许用户检查哪些行适用于它们。如果父对象不适用于用户,则子对象永远不会。
要限制用户在页面上看到的项目数量,我希望仅显示顶级对象,并且只有当用户选择顶级对象时,才会看到其子对象。理论上,顶级对象可以具有无限深度。
如何在VisualForce和Apex中实现最佳效果?
谢谢!
答案 0 :(得分:0)
仅显示父帐户所需的全部内容
SELECT Id, Name FROM Account WHERE ParentId = null
当您的用户决定要查看一个记录的子项时(例如,可以在复选框上以<apex:actionFunction>
完成),您将能够查询最多5 + 1级别的记录。从此查询和实验开始
SELECT Id, Name, (optional subquery here)
FROM Account
WHERE ParentId = :selectedId
OR Parent.ParentId = :selectedId
OR Parent.Parent.ParentId = :selectedId
... // We can use up to 5 dots
ORDER BY ParentId, Parent.ParentId, Parent.Parent.ParentId ...
按5 + 1我的意思是5“点”和子查询的选项。它不适用于帐户,但在您的自定义对象上,您也可以将(SELECT Id FROM CustomObjects__r)
放在那里。
然后你必须以某种方式在树中很好地显示它们;)有很多Javascript工具接受分层JSON数据,或者你可能决定构建大量嵌套<apex:repeat>
...请注意达到viewstate限制!
查看这些链接以获取一些灵感/警告: