0

我的控制器都是定制的。

我有一个对象/表,其中包含一个引用同一对象并表示父对象的字段。

对象/表中有很多行。

我希望将它们全部转储到 VF 并允许用户检查哪些行适用于它们。如果父对象不适用于用户,则子对象将永远不会。

为了限制用户必须在页面上看到多少项目,我希望只显示顶级对象,并且只有当用户选择顶级对象时,他才会看到它的子对象。顶级对象理论上可以具有无限深度。

这在 VisualForce 和 Apex 中如何最好地完成?

谢谢!

4

1 回答 1

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>......只要注意达到视图状态限制!

检查这些链接以获得一些灵感/警告:

  1. https://salesforce.stackexchange.com/questions/4537/how-to-reduce-a-large-internal-view-state-what-is-in-the-internal-view-state
  2. https://appexchange.salesforce.com/listingDetail?listingId=a0N300000016chCEAQ(免费)
  3. https://appexchange.salesforce.com/listingDetail?listingId=a0N30000001gFEWEA2(付费,不知道是否有“试运行”选项可以用来查看至少使用的 Visualforce。我与这家公司没有任何关系)
于 2013-04-11T10:15:56.720 回答