ORDA : travailler avec des objets et des collections

Traduit automatiquement de Deepl

Dans ce dernier volet de la sérieORDA, nous allons voir comment les nouveaux concepts ORDA peuvent interagir avec les objets et collections existants. En fait, il est possible de transformer les entités et les sélections d’entités en objets et collections, ainsi que de construire des entités et des sélections d’entités à partir d’objets et de collections. En procédant ainsi, vous pouvez facilement intégrer le code ORDA dans votre code existant. Vous pouvez profiter pleinement d’ORDA sans avoir à réécrire votre code !

Aujourd’hui, vous utilisez SELECTION TO ARRAY et ARRAY TO SELECTION pour travailler de manière déconnectée du serveur, mais vous devez gérer autant de tableaux que de champs. Et pour un enregistrement courant, il n’y a aucun moyen de l’extraire sous une forme quelconque. Avec ORDA, vous pouvez facilement exporter les entités et les sélections d’entités de la base de données pour travailler sur elles séparément. Et ce n’est pas tout, vous pouvez importer des objets et des collections précédemment créés dans la base de données. Tout cela avec une méthode unique et facile à utiliser !

Ceci est très utile pour travailler efficacement en mode client-serveur, pour communiquer avec d’autres applications, ou pour importer des données en utilisant des processus batch.

ORDA : travailler avec des objets et des collections

EXPORTER DES SÉLECTIONS D’ENTITÉ ET D’ENTITÉ VERS DES OBJETS ET DES COLLECTES

Les exemples suivants sont basés sur cette structure. Mettons la main à la pâte !

EXPORTATION VERS DES OBJETS

Une entité peut être extraite sous forme d’objet à l’aide de la méthode toObject(). Ici, nous extrayons l’entité $pupil sous forme d’objet. Nous pouvons choisir les propriétés à extraire.

Ensuite, nous pouvons appliquer la commande JSON Stringify pour convertir la valeur de cet objet en une chaîne JSON et l’envoyer sur le réseau, par exemple. C_OBJECT($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway"
$pupil :=ds.Pupil.query("lastName=:1" ; "Dunaway").first()
If ($pupil#Null)
// Turn the entity to an object
$pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject)
// Stringify the object
End if

L’objet $pupilObject sera :

{
 "firstName" : "Cecil",
 "lastName" : "Dunaway",
 "email" : "Cecil.Dunaway@echo"
}

EXPORTATION VERS DES COLLECTIONS

Une sélection d’entités peut être exportée vers une collection à l’aide de la méthode toCollection(). Ici, nous exportons la sélection d’entités $pupils (qui contient 2 entités) sous forme de collection. Nous décidons d’extraire uniquement les propriétés de l’étudiant lastName and firstName de l’étudiant, ainsi que toutes les propriétés de l’entité liée school .

Ensuite, nous pouvons appliquer la commande JSON Stringify pour convertir les valeurs de cette collection en une chaîne JSON et l’envoyer via le réseau, par exemple.

C_OBJECT($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1" ; "L@")
//Turn the entity selection to a collection of objects
$pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)

La collection $pupilsCollection sera :

[
  {
   "firstName" : "Lauren",
   "lastName" : "Bouchard",
   "école" : {
   "ID" : 45,
   "nom" : "Écoles d'arts",
   "état" : "New Jersey" }
  },
  {
   "FirstName" : "Laurie",
   "lastName" : "Valenti",
   "école" : {
   "ID" : 46,
   "nom" : "École de mathématiques",
   "Etat : "New Jersey"}
  }
]

Plus d’options pour toObject() et toCollection() sont disponibles, consultez la documentation pour plus de détails !

IMPORTER DES SÉLECTIONS D’ENTITÉS ET D’ENTITÉ D’OBJETS ET DE COLLECTES

Importation d’objets

Une entité peut être construite à partir d’un objet avec la méthode fromObject() méthode. Ici, nous créons une nouvelle entité $pupil à partir d’un objet donné :

C_OBJECT($pupil;$pupilObject)
$pupilObject :=New object("firstName" ; "Mary" ; "lastName" ; "Smith" ; "email" ; "Mary.Smith@whisky")
//Create a new empty entity
$pupil:=ds.Pupil.new()
//Fill entity
$pupil.fromObject(
$pupilObject)

import de collections

Une sélection d’entités peut être construite à partir d’une collection avec la méthode fromCollection(). Ici, nous construisons une sélection d’entités $pupils à partir d’une collection donnée.

Notez que ce mécanisme peut être utilisé pour créer de nouvelles entités ou mettre à jour des entités existantes. Il dépend simplement de la présence de la clé primaire dans les objets.

C_OBJECT($pupils)
C_TEXT($txtPupils)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"pupils_data.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)

et voici la méthode $pupilsCollection collection:

[
 { // La clé primaire de l'entité n'est pas donnée. Une nouvelle entité sera créée
 "firstName" : "Mark",
 "lastName" : "Mac Arthur",
 "email" : "Mark.MacArthur@yankee",
 "école" : {
 "__KEY" : "45"
 }
},
 { // La clé primaire de l'entité est donnée. Cette entité sera mise à jour (si elle existe).
 "__KEY" : 3436, 
 "firstName" : "Victor",
 "lastName" : "Valenti",
 "email" : "Victor.Valenti@NEWSCHOOL",
 "école" : {
 "__KEY" : "45"
 }
}
 ]

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.