Interroger votre base de données avec une approche orientée objet

Traduit automatiquement de Deepl

Après avoir appris comment créer, mettre à jour et supprimer des données, voici une nouvelle entrée dans la série ORDA. Dans ce post, vous allez voir comment interroger votre datastore en mode orienté objet. Avec ORDA, les requêtes sont plus légères, plus lisibles, et vous pouvez naviguer dans l’ensemble du modèle de données en utilisant des concepts orientés objet !

De plus, ORDA permet d’ interroger très facilement plusieurs tables liées, de gérer des relations récursives sur une même table et d’utiliser plusieurs opérateurs logiques dans une seule requête. De plus, vous n’avez pas à vous soucier de la mise en place des relations entre les tables … manuellement ou automatiquement !

Exemple de requête avec DataStore

COMMENCEZ À UTILISER LES REQUÊTES ORDA

Comme lorsque vous exécutez une requête sur une table, la requête avec ORDA est faite sur une classe de données ( qui correspond à une table).

Il existe plusieurs façons d’interroger une classe de données. Ce qui suit en donne un aperçu rapide. Pour des informations plus approfondies sur la méthode query(), consultez la documentation.

1- Fournir la requête sous la forme d’une seule chaîne

Voici une requête pour obtenir tous les employés dont le prénom commence par ‘S’ :

C_OBJECT($employees)
$employees :=ds.Employee.query("firstName='S@'"
) // Query on Employee table

2- Fournir la requête et les valeurs séparément en utilisant des caractères de remplacement

Supposons maintenant que vous vouliez obtenir tous les employés dont le prénom commence par ‘D’ ou ‘E’. Veuillez noter que les valeurs à appliquer sont décalées dans la requête et qu’elles sont désignées par :1, :2, … :n, comme indiqué ci-dessous :

C_OBJECT($employees)
$employees :=ds.Employee.query("firstName=:1 or firstName=:2" ; "D@" ; "E@"
) // Query on Employee table

Variante: Vous pouvez également utiliser des caractères de remplacement à travers une collection pour fournir les valeurs. Comme le montre l’exemple ci-dessous :

C_OBJECT($employees;$params)
// You can use a collection to provide values to apply in the query
$params:=New object
$params .parameters:=New collection("D@" ; "E@")
$employees :=ds.Employee.query("firstName=:1 or firstName=:2";$params) // Query on Employee table

quelques avantages de cette nouvelle façon de faire des requêtes

UTILISER FACILEMENT UN LIEN RÉCURSIF SUR UNE SEULE TABLE

Considérons ce lien récursif sur la table « Employee » :

En utilisant la méthode classique

Ce code demande tous les employés dont le prénom commence par la lettre ‘A’, avec un manager dont le nom de famille commence par la lettre ‘S’ :

ARRAY LONGINT(_managersIDs;0)
QUERY ([Employee] ;[Employee]firstName ;"=" ; "A@")
CREATE SET ([Employee] ; "a")
QUERY ([Employee] ;[Employee]lastName ;"=" ;"S@")
SELECTION TO ARRAY ([Employee]ID;_managersIDs)
QUERY WITH ARRAY ([Employee]managerID;_managersIDs)
CREATE SET ([Employee] ; "s")
INTERSECTION ("a" ; "s" ; "result")
USE SET ("result")
CLEAR SET ("a")
CLEAR SET ("s")

en utilisant orda

Cette requête est beaucoup plus légère…

C_OBJECT($entitySelection)
$entitySelection := ds.Employee.query("firstName=:1 and manager.lastName=:2" ; "A@" ; "S@")

N’attendez pas … commencez à utiliser ORDA dès maintenant pour obtenir un code plus court, plus propre et plus lisible!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle 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.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.