Limitation de nombre de record à afficher dans un objet

Tags: #<Tag:0x00007fe29b226890>

Bonjour,

Serait-il possible de limiter le nombre de record dont l’utilisateur peut voir dans un objet suivant son profil ?

Exemple, l’objet « Référentiel bien » contient 1000 biens, je voudrais que lorsque l’utilisateur X se connecte, qu’il ne voit en tout et pour tout que 10 biens seulement (peu importe lesquels).

J’essaie le limit 10 dans le preSearch/setSearchSpec mais je n’y arrive pas.

Merci d’avance pour votre aide.

Abed.

Le setLimit met une limite “dure” : https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/ObjectCore.html#setLimit(boolean)

Merci @david.
Le setLimit semble concerner plus la pagination, or moi c’est le nombre total de ligne à récupérer depuis la base que je souhaite limiter.
Je pense que c’est plutôt this.setSearchLimit(10); qu’il faut que j’utilise, mais je ne sais pas dans quel hook. J’ai essayé dans le preSearch mais sans effet, toutes les lignes sont ramenées.

Tout ce qui modifie la définition d’un objet pour l’ensemble de la session utilisateur doit être fait dans le postLoad

Merci @david

Voici ce que j’ai du mettre pour que cela fonctionne comme souhaité (afficher 10 lignes seulement) :

		this.setSearchLimit(10);
		this.setLimit(false);

Attention, retirer la pagination et limiter la profondeur physique d’un select peut avoir un comportement problématique sur les tris (order by) :

Suivant la base de données, le tri sera appliqué sur les 10 premiers trouvés uniquement, et non pas sur la table. Si votre recherche n’a pas besoin d’être triée ça ira, mais sinon par exemple un tri par date sera faux, vous ne ramènerez pas les 10 dates les plus récentes, mais 10 dates au hasard du where triées entre elles.

Dans ce cas, il faudra retirer le this.setSearchLimit(10) et tronquer au postSearch le tableau des records retournés par la base.

De mémoire c’est un pb sur Oracle uniquement. Mais je me trompe peut être.

Oui sur Oracle, mais le pb est peut être ancien et résolu avec des versions récentes.
MySQL/MariaDB et PostgreSQL n’ont pas ce problème de tri à ma connaissance.

Dans tous les cas il faut vérifier et surtout trier son objet si on tronque “en dur” le résultat (sinon 2 mêmes requêtes peuvent ramener potentiellement 2 résultats différents).