2013-04-10 2 views
0

Мои контроллеры являются обычными.Создание древовидной структуры в VisualForce/Apex из таблицы саморегуляции/sObject

У меня есть объект/таблица с полем, которое ссылается на один и тот же объект и обозначает родительский объект.

В объекте/таблице много строк.

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

Чтобы ограничить количество элементов, которые пользователь должен видеть на странице, я хочу отображать только объекты верхнего уровня, и только если пользователь выбирает объект верхнего уровня, он увидит его дочерние объекты. Объекты верхнего уровня теоретически могут иметь неограниченную глубину.

Как это лучше всего сделать в VisualForce и Apex?

Спасибо!

ответ

0

Для отображения, например, только Родитель Accounts все, что вам нужно, это

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. Я не отношусь к этой Компании никоим образом)
Смежные вопросы