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.
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():
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 !