Recherche par les arguments de requête d’un tableau de liens

Traduit automatiquement de Deepl

Leschamps d’objets, introduits avec 4D v15, permettent de stocker et d’indexer des données non structurées. Il peut s’agir d’un ensemble de données communes, comme le prénom, le nom de famille, la date de naissance. Il peut s’agir de données différentes dans chaque enregistrement, comme un magasin qui aura besoin de différents attributs pour les chaussures (taille, couleur), les ordinateurs (CPU, mémoire), les imprimantes (couleur, encre), une liste de valeurs ou toutes les combinaisons possibles.

Voici une User Story réelle d’un client 4D :

« Mon application de badges gère les droits d’accès de chaque personne à un bâtiment et pour un créneau horaire. Ces informations sont stockées dans une base de données sous la forme d’un tableau d’objets ( par exemple : {droit d’accès, bâtiment, plage horaire} ). Je veux pouvoir rechercher les personnes qui ont accès à un bâtiment pendant un créneau horaire ».

4D fournit plusieurs façons d’interroger les données, en utilisant l’index et donc extrêmement rapide.

4D v16 R2 améliorera encore cet ensemble de fonctionnalités, en permettant des requêtes encore plus complexes à l’intérieur d’une liste d’éléments dans un seul objet. Lorsque vous effectuez une recherche dans les attributs d’un tableau avec plusieurs arguments de requête joints par l’opérateur AND, vous pouvez choisir d’obtenir les enregistrements pour lesquels

  • les arguments correspondants se trouvent dans au moins un élément
  • les arguments correspondants se trouvent dans le même élément (nouveau).

Exemple

Prenons un exemple avec les deux enregistrements suivants :

{
    "name":"martin",
    "locations": [ 
        { "kind":"home", "city":"paris" } ]
 } , {
    "name":"smith",
    "locations": [
        { "kind":"home", "city":"lyon" },
        { "kind":"office", "city":"paris" } ]
 }

Vous voulez trouver les personnes dont le type de localisation « domicile » se trouve dans la ville de « paris ».

Les arguments correspondants sont dans au moins un élément

Si vous écrivez

QUERY BY ATTRIBUTE([People] ;[People]OB_Field ; "locations[].kind";= ; "home";*)
QUERY BY ATTRIBUTE([People] ; & ;[People]OB_Field ; "locations[].city";= ; "paris")

La requête renvoie « martin«  et « smith«  parce que « smith«  a un élément « locations » dont le « kind«  est« home«  et dont la « city«  est « paris« , même s’il ne s’agit pas du même élément.

Les arguments correspondants sont dans le même élément

Si vous écrivez :

QUERY BY ATTRIBUTE([People] ;[People]OB_Field ; "locations[a].kind";= ; "home";*)
QUERY BY ATTRIBUTE([People] ; & ;[People]OB_Field ; "locations[a].city";= ; "paris")

La requête renvoie « martin«  car il possède un élément « locations«  dont le « kind«  est « home«  et dont la « city«  est « paris« . La requête ne renvoie pas « smith«  parce que les valeurs « home«  et « paris«  ne sont pas dans le même élément du tableau.

Si vous souhaitez obtenir uniquement les enregistrements pour lesquels les arguments correspondants se trouvent dans le même élément, vous devez utiliser des arguments liés. Pour lier les arguments d’une requête, ajoutez une lettre entre les [ ] dans le premier chemin à lier et répétez la même lettre dans tous les arguments liés.

Par exemple : locations[a].city et locations[a].kind. Pour ajouter différents critères liés dans la même requête, utilisez une autre lettre. Vous pouvez télécharger la base de données d’exemple suivante pour voir plus d’exemples.

Base de données d’exemple

Vous pouvez également vous référer à la documentation de 4D v16 R2 pour plus de détails :

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.