Gérer les entités dans une sélection d’entités

Traduit automatiquement de Deepl

PREMIER RECORD, DERNIER RECORD, PROCHAIN RECORD, RECORD PRÉCÉDENT; cela vous rappelle-t-il quelque chose ? Je suis sûr que oui. Vous les avez déjà utilisés pour gérer des sélections ! ORDA fournit des méthodes utiles et familières pour naviguer à travers les entités dans une sélection d’entités – et évidemment, quelques avantages !

Pour commencer, vous pouvez gérer plusieurs sélections d’entités en même temps et naviguer à travers elles indépendamment, alors que normalement vous ne pouvez gérer qu’une seule ‘sélection courante’ par table. C’est précisément ce que nous allons voir dans ce billet de blog.

Nous avons déjà vu que l’interrogation du datastore retourne une sélection d’entités. ORDA fournit les moyens d’accéder aux entités dans une sélection d’entités très facilement.

ORDA : Gérer les entités dans les sélections d’entités

CRÉER ET REMPLIR DES SÉLECTIONS D’ENTITÉS

Une sélection d’entités vide est créée à l’aide de la méthode newSelection() pour créer une sélection d’entités vide. Vous pouvez également y ajouter des entités à l’aide de la méthode add() méthode.

EXEMPLE

C_OBJECT($employee;$es)
C_TEXT ($name)

//Create a new empty entity selection
$es :=ds.Employee.newSelection()
Repeat
$name :=Request("Quel employé ?")
If (ok=1)
//Get the first employee whose last name is $name
$employee :=ds.Employee.query("lastName=:1";$name).first()
//Add the entity to the new entity selection $es
If ($employee#Null)
$es .add($employee)
End if
End if
Until (ok=0)
alert (String($es.length) + " les employés ont été ajoutés à la nouvelle sélection d'entités")

ACCÈS AUX ENTITÉS DANS UNE SÉLECTION D’ENTITÉS

Rappelez-vous que vous pouvez parcourir les entités d’une sélection d’entités avec la méthode for each boucle. Voici un exemple rapide, mais vous pouvez également consulter ce billet de blog.

C_OBJECT($employeesParis;$employee;$status)

// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
//Iterate through each employee
For each ($employee;$employeesParis)
$employee.lastName:=Uppercase($employee.lastName)
$status:=$employee.save()
End for each

Vous pouvez également charger une entité avec son index dans une sélection d’entités (l’index commence à 0). Voici un exemple :

C_OBJECT($gamers)
//Get all the gamers sorted by rank
$gamers :=ds.Gamer.all( ).orderBy("rang")
if ($gamers.length >=3)
ALERT ("Les trois premiers sont : "+Char(13) \
+$gamers[0].lastName+Char(13)+$gamers[1].lastName+Char(13)+$gamers[2]
.lastName)
End if

PREMIÈRE ET DERNIÈRE ENTITÉS

Les sites first() et last() vous permettent d’obtenir la première ou la dernière entité d’une sélection d’entités. Ces méthodes peuvent renvoyer Null si la sélection d’entités est vide.

Dans l’exemple ci-dessous, nous obtenons la première entité de la sélection d’entités $gamers:

C_OBJECT($gamers;$first)
// Get the gamers whose last name starts with "H"
$gamers :=ds.Gamer.query("lastName='H@'")
// Get the first entity of the $gamers entity selection
$first :=$gamers.first()
If ($first#Null)
ALERT ("Le premier joueur a été trouvé")
Else
ALERT ("La sélection d'entités $gamers est vide")
End if

ENTITÉS précédentes ET suivantes

Une entité peut appartenir à une sélection d’entités. Dans ce cas, vous pouvez parcourir les entités d’une sélection d’entités avec les méthodes previous() et next() pour parcourir les entités d’une sélection d’entités.

Dans cet exemple, nous utilisons un formulaire pour afficher une liste de joueurs. L’utilisateur peut naviguer dans les détails de chaque joueur à l’aide des boutons Previous et Next.

Le bouton Next a la méthode objet suivante :

//Form.gamer is an entity, edited on the form. It belongs to an entity selection which is the entire list of gamers.
If ( . . ()# ) . := . . () FormgamernextNull
//Edit the next entity of the entity selection to which the Form.gamer entity belongs.
FormgamerFormgamernext
End if

info sur une entité

Et ce n’est pas tout ! Pour toute entité donnée, vous pouvez obtenir la sélection d’entités dont elle provient. Autre chose à savoir, il existe également des méthodes pour obtenir des informations contextuelles sur une entité, par exemple vérifier si elle appartient à une sélection d’entités donnée, obtenir sa position dans une sélection d’entités, etc.

Ici, nous avons deux sélections d’entités ($employeesParis et $employeesNY). La méthode selectedEmployee sélectionne un employé dans l’une d’entre elles. Nous pouvons alors déterminer à quelle sélection d’entités appartient cet employé à l’aide de la méthode contains() pour déterminer à quelle sélection d’entités appartient cet employé :

C_OBJECT($employeesParis;$employeesNY;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// Get employees working in New York
$employeesNY :=ds.Employee.query("city='New York'")
// The method selectedEmployee returns an employee in one of the two given entity selections
$employee :=selectedEmployee($employeesParis;$employeesNY)

Case of
: ($employeesParis.contains($employee))
ALERT ("L'employé appartient à la sélection d'entités $employeesParis")
: ($employeesNY.contains($employee))
ALERT ("L'employé appartient à la sélection d'entités $employeesNY")
End case

Ici, nous avons une sélection d’entités ($employeesParis). La méthode selectedEmployee y sélectionne un employé. Nous pouvons obtenir l’indice de l’employé dans la sélection d’entités avec la méthode indexOf() méthode :

C_OBJECT($employeesParis;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// The method selectedEmployee returns an employee in the given entity selection
$employee :=selectedEmployee ($employeesParis)
ALERT ("L'index de l'employé sélectionné est " + String($employee.indexOf()))

Jetez un coup d’œil à l’exemple de la base de données et vous saurez tout sur ce sujet !

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.