Recherche sur une liste d'objets métier défini

Bonjour,

Pour mon projet, je souhaiterai faire une recherche ciblé sur une liste d’objet défini
Dans l’idée, cela serait comme le search global mais ciblé pour seulement certains objets

Imaginons que j’ai le nom d’une traduction: “Group name”, je voudrais savoir quels sont tous les objets traductions qui ont “Group name” comme traduction
On ouvrirai une page dédié à tous les objets traduction (Translate object, Translate object field, Translate field, Translate Link, etc…) et lorsque que l’on cherche “Group name”, ca nous liste tous les enregistrements avec la traduction “Group name”
ex:
Object | Object | field | traduction
Translate object field User profile GrpName Group Name
Translate object field Group Group Group Name
Translate field GrpName Group Name
Translate field Group Group Name
Translate field OtherGroup Group Name
Etc…
(Bien sur ceci est juste à titre d’exemple avec les objets Translate, cela sera utiliser pour d’autres objets propre à mon projet)

Est-il possible de configurer une view pour qu’elle fasse cela par paramètrage, outil, ou voire même est-il possible faire du requetage (SQL, search object, etc.) sur une view afin de pouvoir exactement la liste des enregistrements que je voudrais en sortie ?

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-02-20 23:46 (revision 33b1f370cc64d7c985e644e4e24860e0e5973a3b)
DBPatchLevel=P24;33b1f370cc64d7c985e644e4e24860e0e5973a3b

Cordialement,
KWu

La recherche indexée restreinte à un objet métier est disponible en standard dans la recherche:

Mais bon sinon ce que vous décrivez c’est exactement ce que fait la recherche indexée globale = rechercher dans les attributs indexés des objets indexés qui sont accessibles au user connecté dans le scope courant

Bonjour,

La recherche indexée recherche seulement sur un seul objet non ?
Justement je cherche à faire un search sur plusieurs objets différents (la recherche portant bien sur sur un seul champ de chacun des objets)

Cordialement,
KWu

La recherche indexée globale cherche sur beaucoup trop d’objet en meme, je voudrais la restreindre à une liste d’objet définie

Non la recherche indéxée globale porte sur l’ensemble des objets indexés mais, bien entendu, restreint aux seuls objets accessibles à l’utilisateur courant dans le scope courant:

Mais, forcément; si vous faites vos recherches indéxées en tant que designer sur le scope Simplicité administrator ça va ramener beacoup trop de choses.

Vos utilisateurs ne sont pas designer ils n’ont donc accès qu’à un nombre restreint d’objets.

C’est tout l’intérêt de configurer des scopes pour voir, en tant que designer, ce que ça donne pour les utilisateur “normaux”. Dans l’exemple ci-dessus je suis designer mais sur le scope Demo

Justement même par rapport à designer, admin, ou tout autre user qui aurait des droits differents, je voudrais faire en sorte que tous puisse entrer dans la fenetre de recherche et que lorsqu’ils font une recherche, cette recherche se base sur un nombre d’objet défini
par exemple, pour le designer, meme si il a les droits sur tous les objets, lorsqu’il entre dans la fenetre de recherche globale des translations, sa recherche portera seulement sur les objets translations qui auront été fixé (si on lui dit de chercher sur les objets field translation, field translation et link translation, il cherchera sur ces objets seulement même si il a les droits sur object translation ou autre).
Est-ce que cela est possible avec la recherche indexée globale ?

Cordialement,
KWu

Ne sont rechargeables via l’indexation que les objets explicitement marqués indexables (et uniquement sur les attributs marqués indexées).

Votre demande qui consiste à dire “parmi les objets indexables je veux rechercher sur uniquement certains objets” n’a pas vraiment d’intéret dans la vraie vie des utilisateurs: soit on cherche au niveau d’un objet donné (via l’index ou via les attributs recherchables) soit un cherche globalement via l’index sur l’ensemble des objets indexables du scope courant.

Un truc entre les deux où on ferait une recherche globale sur un sous ensemble d’objet explicitement sélectionnés ne sera sans doute jamais utilisé car trop compliqué à utiliser. Ou alors il faudrait raisonner par “groupes” d’objets déjà constitués par ailleurs, typiquement par domaine.

J’ai passé le post en feature request, je laisse @Francois donner son avis

Bonjour David,

Nos utilisateurs ont des droits en lecture sur un grand nombre d’objets (ceux supportant leur domaine d’application + ceux supportant les adhérences avec les autres domaines + tous les autres objets sans mesure de restriction d’accès) -> ~100 objets actuellement dans notre modèle répartis dans ~20 domaines.

Le besoin exprimé par plusieurs de nos PO est de pouvoir lancer des recherches globales à leur domaine d’application mais sans aller dans les autres domaines (alors qu’ils ont accès a minima en lecture à tout).

Existe-t-il des hooks “preRechercheGlobale” / “postRechercheGlobale” permettant de restreindre / restaurer les responsabilités du user courant dans le contexte d’une action de recherche globale de domaine (dans une page d’accueil de domaine par exemple) ?

Attention on ne parle plus ici de la même chose : subset des objets vs subset des records des objets (ou d’un subset des objets)

Car j’imagine que la notion de “domaine” dont tu parles n’est pas la notion de “Domain” (rubique de menu) de Simplicité.

Peut on préciser le besoin ?

La recherche par domaine est effectivement une notion vague / métier.

  • Il y a une recherche par Domaine (au sens Domain du menu) qui va chercher les objets par date de dernière mise à jour (par l’utilisateur ou non). C’est plutot une recherche qui me permet de retrouver sur quoi je travaillais hier en 2 clicks.

  • Il y a la recherche fulltext Globale ou par Objet, il n’y pas de notion intermédiaire.
    Entre les 2 il faudrait modéliser ce que vous entendez par domaine ou périmètre, jointure des records avec un profil ou un pérmètre métier, valeur fixe d’un attribut… ?

  • Il y a les UserFilters, qui permettent de filtrer ce que l’utilisateur voit à un instant t :

    • search-spec additive sur tous les objets contenant les filtres au choix de l’utilisateur (champs fixes ou jointures vers des objets de périmètre)
    • et filtrage des objets avec date de début/fin.

Je reconnais, c’est un peu ambigu (Domaine, Scope, … on gravite autour du pot).

Plus explicitement, nous souhaitons pouvoir restreindre la liste des objets recherchés au moment de la recherche depuis une page d’accueil de domaine (Simplicité) même si le user a le droit de tout lire…

On parle bien des objets uniquement ?

Si oui une logique par scope et/ou domaine répondrait au besoin.

Si non y-a-t-il une notion de filtrage par records : genre je veux pouvoir rechercher sur les records de l’objet A auxquels j’ai accès en écriture mais pas ceux auxquels j’ai accès en lecture seule ? Si oui c’est beaucoup plus compliqué même si les user filters ou des héritages malins peuvent répondre à ça mais de manière pas forcément idéale.

Oui: une recherche ajustable - par exemple en définissant un searchSpec sur ObjectIndex/idx_object in(‘x’,‘y’,‘z’) - en fonction du scope et/ou domaine répondrait au besoin :slight_smile:

  1. S’il s’agit de limiter les objets consultés, c’est effectivement plus simple à concevoir.
  • On pourrait par exemple proposer un premier niveau de choix de domaines / case à cocher qui coche/décoche tous les objets (masqués)
  • Puis raffiner les objets au besoin via un bouton (+) par domaine
  • Ca revient à réafficher le menu du scope avec des cases à cocher malines

Les objets cochés viendraient filtrer la recherche sur la colonne idx_object.

Tout étant pré-coché par défaut, on pourrait garder le choix courant dans un user parameter, pour ne pas avoir à les décocher à chaque session.

Ce ne serait pas possible avec le champ raccourci de l’entête, il faudrait forcement passer par l’écran de recherche.

  1. S’il s’agit de filtrer les records sur une notion métier, il faudrait plutôt afficher le UserFilters pour l’appliquer à la recherche uniquement (et pas aux listes elles-mêmes).
1 Like

Point 1: Oui, absolument! Si en plus on peut intervenir par code sur les cases cochées, le besoin sera bien couvert (scopé a minima par défaut puis étendu si le user le souhaite)
Point 2: En effet, les userfilters permettent de faire d’autres choses… on serait bien sur le point 1 dans notre cas.

Merci beaucoup à tous les deux pour votre écoute :)

En 5.2, il y a une nouvelle fonctionnalité de filtrage des objets lors d’une recherche full-text :

  • Bouton filtre (jaune si filtre en cours)

  • Et popup des objets habilités et indéxables par domaine, l’utilisateur peut cocher dans quoi il veut chercher uniquement :

  • La préférence est stockée en base par User dans un nouveau paramètre INDEX_OBJ_FILTER = liste d’objets en json.

@bmo

1 Like

Merci beaucoup François, voici de quoi nous faire accélérer le mouvement vers la 5.x!