ORDA – Améliorez votre API grâce à la portée des fonctions

Traduit automatiquement de Deepl

4D v18 R4 et ORDA vous permettent de créer des fonctions de classe de haut niveau au-dessus du modèle de données. Cela vous permet d’écrire du code orienté métier pour masquer la complexité, réduire les erreurs et accélérer le processus de développement.

Avec 4D v18 R5, nous apportons encore plus de fonctionnalités pour vous aider à optimiser et organiser votre code. Par exemple, vous pouvez avoir besoin d’exécuter une fonction localement sur le client pour améliorer les performances lorsque vous travaillez en mode client/serveur. C’est désormais possible ! Ou si vous exposez votre base de données en tant que serveur REST, vous pouvez souhaiter que certaines fonctions soient disponibles du côté serveur mais cachées pour vos clients REST. C’est également possible !

HDI : Mots-clés de fonctions dans les classes de modèle de données ORDA

Deux nouveaux mots-clés pour les fonctions dans les classes de modèle de données ORDA sont disponibles :

travailler en C/S avec le mot-clé LOCAL

Les fonctions sont exécutées sur le serveur par défaut dans C/S, mais vous pouvez maintenant choisir d’exécuter certaines d’entre elles sur le client. Cela peut améliorer considérablement les performances.

Exemple

Dans cet exemple, nous avons une classe de données Students. Écrivons une fonction qui renvoie les âges des étudiants.

blank

Voici notre fonction age() dans la classe d’entités cs.StudentsEntity.

Class extends Entity

// This is an estimate of the age
local Function () : ( . #!00-00-00 !) := ( )- ( . ) age Variant
IfThisbirthDate
$0Year ofCurrent dateYear ofThisbirthDate
Else
:= $0Null
End if

Et voici une zone de liste affichant tous les étudiants dont la colonne d’âge est associée à l’expression This.age():

blank

Grâce au mot clé local, la fonction age() est exécutée localement sur le client avec la date de naissance chargée tout en affichant la boîte de liste. Ceci est important pour être en phase avec l’optimisation des requêtes ORDA de 4D v17 R5.

Sans le mot-clé local, la fonction age() déclencherait une requête au serveur pour chaque ligne !

mot-clé exposed

Comme promis avec 4D v18 R4, nous avons amélioré les fonctions d’exposition pour le serveur REST. Maintenant avec 4D v18 R5, vous pouvez choisir les fonctions à publier (ou non).

Vous pouvez utiliser le mot-clé exposed pour qu’une fonction soit publiée en tant qu’API pour les clients REST.

Dans l’exemple ci-dessous, la fonction registerNewStudent() de la classe de classe de données cs.Students peut être appelée depuis un client REST, alors que computeStudentId() ne l’est pas.

Class extends DataClass

exposé Function registerNewStudent($student: Object) : Object
var $entity : cs.StudentsEntity
var $status : Object

$entity :=ds.Students.new()
$entity .fromObject($student)
$entity .
studentId:=This.computeStudentId()
$status:=$entity.save()

If ($status.success)
$0 :=$entity
Else
$0 :=$status
End if

// This function not callable from a REST client
Function computeStudentId() : Integer
//calculer un nouveau numéro d'étudiant
Use (Storage.
infos)
Storage.
infos.studentId:=Storage.infos.studentId+1
$0:=Storage.
infos.studentId
End use

Voici le code d’appel sur le client REST :

var $connect;$ds;$student;$result: Object
var $studentId : Integer

$connect := New object("hostname" ; "127.0.0.1:8044")
$ds :=Open datastore($connect; "demo")

$student :=New object("firstname" ; "Mary" ; "lastname" ; "Smith")
// Execution is OK, no error is raised
$result:=$ds.Students.registerNewStudent($student)

//An error is raised
$ studentId:=$ds.Students.computeStudentId()

Remarque: dans 4D v18 R4, toutes les fonctions sont exposées sur le serveur REST. Dans 4D v18 R5, les fonctions ne sont PAS exposées par défaut. N’oubliez pas de marquer les fonctions que vous souhaitez exposer.

Consultez la documentation et l’IDH ci-dessus pour en savoir plus sur les nouvelles fonctionnalités !

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.