我的控制器都是定制的。
我有一个对象/表,其中包含一个引用同一对象并表示父对象的字段。
对象/表中有很多行。
我希望将它们全部转储到 VF 并允许用户检查哪些行适用于它们。如果父对象不适用于用户,则子对象将永远不会。
为了限制用户必须在页面上看到多少项目,我希望只显示顶级对象,并且只有当用户选择顶级对象时,他才会看到它的子对象。顶级对象理论上可以具有无限深度。
这在 VisualForce 和 Apex 中如何最好地完成?
谢谢!
我的控制器都是定制的。
我有一个对象/表,其中包含一个引用同一对象并表示父对象的字段。
对象/表中有很多行。
我希望将它们全部转储到 VF 并允许用户检查哪些行适用于它们。如果父对象不适用于用户,则子对象将永远不会。
为了限制用户必须在页面上看到多少项目,我希望只显示顶级对象,并且只有当用户选择顶级对象时,他才会看到它的子对象。顶级对象理论上可以具有无限深度。
这在 VisualForce 和 Apex 中如何最好地完成?
谢谢!
例如,仅显示父帐户,您只需要
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>
......只要注意达到视图状态限制!
检查这些链接以获得一些灵感/警告: