Plusieurs équipes me demande de disposer de cette possibilité : quand un objet a un lien récursif, voir les enfants avec un bouton + comme c’est le cas en onglet.
J’ai l’impression que ce n’est pas possible pour des raisons de performance, y a-t-il une autre possibilité ?
Oui même si le besoin paraît simple, sa conception reste ardue dans un cas général.
Imaginons un objet reflexif A et B fils de A.
Avec une contrainte d’unicité d’affichage des lignes pour paginer la liste, il faut connaître tous les arbres pour n’afficher que N racines paginées. On a A et B en fils à l’écran. C’est comme cela qu’on affiche les panels non paginés car filtrés sur 1 seul parent.
En revanche si on lève la contrainte d’unicité où une ligne peut etre ramenée comme racine et comme enfants, on peut paginer normalement comme une liste normale. Mais on aura A et B en fils, et B une seconde fois en racine à l’écran.
Oui si on peut filtrer la liste, une racine n’est pas un record avec un “where parent is null”, sinon ce serait facile de les trouver. Dans un cas général, on doit pouvoir filtrer “B*” et avoir B en racine de la liste sans A, et donc il faut connaitre tous les arbres avant dans proposer qu’une page côté front.
Pour paginer simplement,
on sera donc potentiellement obligé de n’afficher que les “vraies” racines (where parent is null),
ou alors utiliser des requêtes SQL reflexives (langage propriétaires pour PgSQL, Oracle…).
Si ton objet peut ne pas être paginé car contient peu de ligne, le fonctionnement actuel pourrait convenir tel quel.
Ce que tu peux faire par contre à court terme, c’est d’utiliser un TreeView qui sait parcourir les noeuds de proche en proche si l’objet est réflexif.