Salesforce/SOQL - bestimmtes Kind, wie die Rückkehr der "obersten Ebene" Hauptkonto?
Ich habe ein Problem, wo ich zu finden die top-level-Eltern-Konto für ein Kind. Die besten, die ich in der Lage gewesen zu tun ist, filter nach oben aus dem Kind w/
SELECT id, name, parent.id, parent.parent.id, parent.parent.parent.id,
FROM Account WHERE id=CHILD_ID
Dann Durchlaufen, bis Sie ein null-Elternteil.id-Anzeige-top-level-Konto. Nicht sehr elegant und garantiert nicht die "top-level-account, würde ich lieber so etwas wie
SELECT id, name,
(SELECT id, name,
FROM Accounts WHERE id = CHILD_ID)
FROM Account WHERE parent.id = null
Aber das funktioniert nicht wie salesforce offenbar nicht lassen Sie sich durch Eltern-Kind-Beziehungen von Konto zu Konto. Wer noch keine Vorschläge hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Recht - es gibt keine Möglichkeit, dies in einem einzigen SOQL-Abfrage. Beachten Sie, dass Sie Ihren zweiten, gewünschte Abfrage wäre nicht geben Ihnen die richtigen Ergebnisse (es würde nur die Rückgabe eines Datensatzes, wenn das Kind Kontos unmittelbar übergeordnete hatte keine Eltern).
Ihre beste Wette ist, um zu tun, was Sie sagte, in deinem ersten code-block. Sie durchqueren kann Beziehungen bis zu 5 Objekte tief, so können Sie unter anderem Elternteil.Eltern.Eltern.Eltern.Eltern.id in Ihrem SOQL select. Iterieren über die Felder - wenn keine von Ihnen null ist, dann geben Sie eine weitere SOQL-Abfrage, die änderungen CHILD_ID auf eine übergeordnete Ebene.Eltern.Eltern.Eltern.Eltern.id ' s Wert. So sind Sie garantiert, um schließlich zu finden, ein Elternteil kein Elternteil (seit salesforce garantiert keine Zyklen).
Den man machen kann diese mehr elegant, indem Sie immer nur Auswahl der Eltern.id in der Abfrage und dabei mehr individuelle Abfragen, aber laufen wird Sie bis gegen API/governor-limits, so dass es wahrscheinlich keine gute Idee.
Wenn Sie könnte verwenden Sie ein benutzerdefiniertes Objekt, das anstelle von Konto, die Sie tun könnten, so etwas wie die zweite Abfrage, da Sie in der Lage sein, um die traverse Eltern-Kind-Beziehung aus, das benutzerdefinierte Objekt zu sich selbst, aber ich bin noch nicht sicher, es gibt eine einzige Abfrage, die Sie geben, was Sie wollen.
Ich habe dieses viele Male bei Kunden implementiert. Die beste Lösung, die ich gefunden habe, ist ein benutzerdefiniertes Feld namens "Ultimate Parent" oder manchmal als "Juristische Person", aber im Grunde die gleiche Sache. Wir verwendeten Trigger zu tun, der traversal.
Die grundlegende Idee ist, dass, wenn Sie ein Konto erstellen, das ist ein Kind-Konto, kopierst du den "Ultimate Parent" - Feld in der untergeordneten Datensatz.
In der Regel, richten wir das Feld als Nachschlage, so dass Anfragen wie die deine sind viel einfacher. Es erlaubt Ihnen auch, um einige sehr interessante Daten-Visualisierung. Zum Beispiel, indem die Eltern-lookup und die oberste Muttergesellschaft in der lookup-Felder, die Sie finden konnten-Konten, die Geschwister, cousins und Cousinen, Sekunden, cousins, etc.