Recherche de collections

Traduit automatiquement de Deepl

La simplicité est la sophistication ultime, et avec plus de 40 méthodes dans 4D v16 R6 pour gérer les collections, les choses deviennent beaucoup plus faciles pour vous en tant que développeur. Non seulement votre code est propre et plus lisible, mais il est également écrit en un temps record !

Dans cet article de blog, nous allons voir comment les deux nouvelles méthodes, query et indicesvous permettront de manipuler et de récupérer des éléments d’une collection en un clin d’œil !

Le site query et indices sont utilisées, comme dans une requête 4D traditionnelle, pour manipuler et récupérer des éléments dans une collection. Elles fonctionnent exactement de la même manière, la seule différence réside dans le résultat renvoyé : query renvoie une collection contenant tous les objets correspondant à la condition de recherche définie par l’argument de la requête, alors que indices renvoie une collection d’index.

Exemple de base de données : interrogation de collections

Vous pouvez combiner deux types d’opérateurs pour interroger votre collection. Les exemples de code suivants vous montrent ce qu’il est possible de faire et comment procéder.

Comment écrire une requête ?

Exemple de base

Il y a deux façons possibles d’écrire une requête :

  • la requête sous forme de chaîne de caractères :

$c:=Newcollection(New object("Id";128 ; "City" ; "Paris" ; "Weather";1))
$c.push(New object("Id";50 ; "City" ; "New-York" ; "Weather";-10))
$c.push(New object("Id";1792 ; "City" ; "Tokyo" ; "Weather";-5))
$c.push(New object("Id";2973 ; "City" ; "Miami" ; "Weather";15))

$col:=$c.query("Weather#0")
$col2:=$c.indices("Weather#0")

  • ou requête avec placeholder. De cette façon, vous pouvez facilement créer des requêtes dynamiques, et 4D convertit vos variables pour vous :

$w:=$1
$col:=$c.query("Weather#:1" ;$w)
$col2:=$c.indices("Weather#:1" ;$w)

exemple avancé

Les exemples précédents n’avaient pour but que de montrer la syntaxe, mais il est évident que pour trouver quelque chose dans une collection à quatre éléments, une boucle aurait suffi. La véritable force de la méthode query c’est lorsque vous devez trouver quelque chose dans un objet ou une collection contenant une grande quantité de données. La méthode query est un moyen très efficace d’accéder aux données.

L’exemple ci-dessous montre combien il est maintenant facile de trouver le nombre d’opérations qu’un administrateur a effectuées aujourd’hui :

// Save the current log file to JSON and put it in a collection
LOG FILE TO JSON("c:\\NExportLogs")
$txt :=Document to text("c:\NExportLogs\NJournalExport.json")
$col :=JSON Parse($txt)

// Count how many operations have been done by "Administrator"
$count :=$col.query("extraData.user_name=:1" ; "Administrator").length

Opérateurs de comparaison

Les opérateurs de comparaison sont utilisés pour comparer une expression à une autre. Le résultat d’une comparaison peut être VRAI ou FAUX. Les opérateurs de comparaison sont :

  • =
  • #
  • <
  • >
  • <=
  • >=

$col:=$c.query("Météo>0")
//$col=[{Id:128,Ville:Paris,Météo:1},{Id:2973,Ville:Miami,Météo:15}]
$col2:=$c.indices("Météo>0")
//$col2=[0,3]

opérateurs logiques

Les opérateurs logiques sont utilisés pour tester la validité d’une condition. Comme les opérateurs de comparaison, ils renvoient VRAI ou FAUX. Les opérateurs logiques sont :

  • ET
  • OU

$col:=$c.query("Id>50 AND (Weather>10 OR Weather<0)")
//$col=[{Id:1792,City:Tokyo,Weather:-5},{Id:2973,City:Miami,Weather:15}]
$col2:=$c.indices("Id>50 AND (Weather>10 OR Weather<0)")
//$col2=[2,3]

Fabrice Mainguené
- Product Owner -Fabrice Mainguené a rejoint l'équipe du programme 4D en novembre 2016. En tant que Product Owner, il est en charge 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 de la fonctionnalité livrée répond au besoin du client.Après avoir obtenu une licence en informatique au CNAM, Fabrice a rejoint une petite société d'édition de logiciels en tant que développeur Windev. Il a ensuite travaillé pour différentes entreprises dans les domaines de l'industrie et du commerce en tant que développeur Windev et web ainsi que conseiller technique sur les nouvelles fonctionnalités.