Salesforce / SOQL - данный дочерний элемент, как вернуть родительский аккаунт «верхнего уровня»? - PullRequest
4 голосов
/ 03 января 2011

У меня проблема с поиском родительской учетной записи верхнего уровня для ребенка.Лучшее, что я смог сделать, - это отфильтровать от дочернего элемента w /

 SELECT id, name, parent.id, parent.parent.id, parent.parent.parent.id,
 FROM Account WHERE id=CHILD_ID

. Затем перебирайте, пока не найдете null parent.id, указывающий на учетную запись верхнего уровня.Не очень элегантно и не гарантирует учетную запись «верхнего уровня», я бы предпочел что-то вроде

SELECT id, name, 
    (SELECT id, name, 
     FROM Accounts WHERE id = CHILD_ID)
FROM Account WHERE parent.id = null

Но это не работает, так как salesforce, по-видимому, не позволяет вам переходить отношения родитель-потомок от учетной записи кучетная запись.У кого-нибудь есть предложения здесь?

Ответы [ 2 ]

4 голосов
/ 03 января 2011

Вы правы - нет способа сделать это в одном запросе SOQL.Обратите внимание, что ваш второй требуемый запрос также не даст вам правильных результатов (он вернет запись, только если у непосредственного родителя дочернего аккаунта нет родителя).

Лучше всего делать то, что вы сказалив вашем первом блоке кода.Вы можете просматривать отношения до 5 объектов в глубину, поэтому вы можете включить parent.parent.parent.parent.parent.id в ваш выбор SOQL.Выполните итерацию по полям - если ни одно из них не равно нулю, то выполните второй запрос SOQL, который изменит CHILD_ID на значение parent.parent.parent.parent.parent.id.Таким образом, вы гарантированно в конечном итоге найдете родителя без родителя (поскольку salesforce гарантирует отсутствие циклов).

Вы можете сделать это более элегантно, только выбрав parent.id в запросе и выполнив больше отдельных запросов,но это заставит вас столкнуться с ограничениями API / регулятора, так что это, вероятно, не очень хорошая идея.

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

1 голос
/ 11 февраля 2011

Я сталкивался с этим много раз на сайтах клиентов. Лучшее решение, которое я нашел, - это настраиваемое поле с именем «Ultimate Parent» или иногда «Legal Entity», но в основном это одно и то же. Мы использовали триггеры для обхода.

Основная идея заключается в том, что всякий раз, когда вы создаете учетную запись, которая является дочерней, вы копируете поле "Ultimate Parent" в дочернюю запись.

Обычно мы настраиваем поле как поиск, чтобы запросы, подобные вашим, были намного проще. Это также позволяет вам делать некоторые очень интересные визуализации данных. Например, используя родительский поиск и конечные родительские поля поиска, вы можете найти учетные записи, которые являются братьями и сестрами, двоюродными братьями и сестрами и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...