Salesforce / SOQL - Dada niño, la forma de devolver “nivel superior” cuenta principal?

StackOverflow https://stackoverflow.com/questions/4587270

  •  14-10-2019
  •  | 
  •  

Pregunta

Tengo un problema por el que tengo que encontrar la cuenta principal de nivel superior para un niño. El mejor que he podido hacer es filtro hacia arriba desde el niño w /

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

A continuación, iterar hasta que encuentre un nulo parent.id indicando cuenta de nivel superior. No es muy elegante y no garantiza el "nivel superior" cuenta, me gustaría tener algo como preferido

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

Pero eso no funciona como fuerza de ventas al parecer, no le deje transversales relaciones entre padres e hijos de cuenta a cuenta. Alguien tiene alguna sugerencia aquí?

¿Fue útil?

Solución

Tienes razón - no hay manera de hacer esto en una sola consulta SOQL. Tenga en cuenta que el segundo, deseada, consulta sería no le dará los resultados correctos, ya sea (que sólo volvería si un registro padre inmediato de la cuenta de niño tenía ningún padre).

Su mejor apuesta es hacer lo que dijo en su primer bloque de código. Puede atravesar relaciones hasta 5 objetos de profundidad, por lo que puede incluir en su parent.parent.parent.parent.parent.id SOQL seleccionar. Iterar a través de los campos - si ninguno de ellos es nula, a continuación, emitir una segunda consulta SOQL que cambia CHILD_ID al valor de parent.parent.parent.parent.parent.id. De esa manera usted está garantizado para finalmente encontrar un padre con ninguno de los padres (ya que la fuerza de ventas garantiza que no habrá ciclos).

Se podría hacer esto más elegante por única vez de seleccionar parent.id en la consulta y hacer consultas más individuales, sino que le funcionará con límites API / gobernador, por lo que probablemente no es una gran idea.

Si usted podría utilizar un objeto personalizado en lugar de la cuenta, se podría hacer algo así como la segunda consulta, ya que sería capaz de atravesar la relación de padre a hijo de ese objeto personalizado a sí mismo, pero todavía no estoy seguro que hay una sola consulta que le dará lo que quiere.

Otros consejos

Me he encontrado muchas veces en sitios de clientes. La mejor solución que he encontrado es un campo personalizado llamado "Ultimate Padres" o, a veces llamado "entidad legal", pero básicamente la misma cosa. Utilizamos disparadores para hacer el recorrido.

La idea básica es que cada vez que cree una cuenta que es una cuenta secundaria, se copia el campo "Ultimate Padres" en el registro hijo.

Por lo general, la configuración del campo como una búsqueda de modo que las consultas como la suya son mucho más fáciles. También le permite hacer algunas visualización de datos muy interesante. Por ejemplo, mediante el uso de las operaciones de búsqueda de los padres y los campos de la controladora última de búsqueda, se puede encontrar cuentas que son hermanos, primos, primos segundos, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top