Le langage 4D prend en charge le concept de classes et, par conséquent, le concept de constructor.
D’autre part, la couche d’abstraction ORDA, par le biais des classes de modèle de données, offre un grand avantage commercial. Elle vous permet d’écrire du code orienté métier et de le « publier » comme une API. Le magasin de données, les classes de données, les sélections d’entités et les entités sont tous disponibles en tant qu’objets de classe qui peuvent contenir des fonctions ainsi que des attributs calculés et des alias.
Cela permet à vos applications de suivre facilement les principes MVC avec un code puissant et optimisé.
Pour travailler avec une approche orientée objet complète, à partir de 4D 20 R10, les classes d’entités peuvent maintenant avoir un constructor(). Vous avez besoin de définir des valeurs initiales lorsqu’une nouvelle entité est instanciée ? C’est désormais possible ! Poursuivez votre lecture pour en savoir plus …
Avec les classes de modèle de données ORDA, les données sont manipulées à travers des entités qui sont des instances des classes d’entités que vous avez dans votre structure.
La version 4D 20 R10 apporte la possibilité d’implémenter un constructor() pour les objets entités.
Le constructeur d’entités
Pour travailler avec une approche complètement orientée objet, à partir de 4D 20 R10, les classes d’entités peuvent maintenant avoir un constructor() qui est exécuté lorsqu’elles sont instanciées
C’est le moyen idéal pour initialiser certaines valeurs par défaut comme un timbre ou un attribut createdBy par exemple.
Auparavant, pour ce faire, vous deviez implémenter une fonction createNew() dans la classe de données appropriée. Avec une classe de données Products, vos développeurs doivent savoir qu’il existe une fonction createNew() dans cette classe et qu’ils doivent l’utiliser au lieu d’instancier naturellement une entité Products à l’aide de ds.Products.new().
C’est ce qu’ils font pour créer un nouveau produit :
Form.product:=ds.Products.createNew()
comment implémenter le constructeur
Il suffit d’implémenter la fonction constructor() dans la classe d’entité.
Voici la classe ProductsEntity:
Class extends Entity
Class constructor()
This.stamp:=Timestamp()
This.createdBy:=Current user()
Et le code d’appel est ainsi logique. Par exemple, lorsque l’on clique sur le bouton Create product dans un formulaire, il suffit de faire :
Form.product:=ds.Products.new()
et l’entité Form.product est livrée avec les attributs stamp et createdBy correctement remplis !

Le code d’appel n’est pas seulement déclenché par l’appel à la fonction constructor() n’est pas seulement déclenchée par l’appel de la fonction new() La fonction n’est pas seulement déclenchée par l’appel de la fonction Quel que soit le moyen par lequel l’entité est instanciée, le constructeur est déclenché.
Il peut également s’agir
– l’explorateur de données (lors de la création d’une nouvelle entité)
– la fonction fromCollection()
– un appel à l’API REST créant une nouvelle entité sur le serveur(par exemple $method=update)
– un code s’exécutant sur le serveur REST et traitant une entité instanciée sur un client tel qu’une application frontale Qodly ou un client 4D utilisant un magasin de données distant.
Autres exemples
Étant donné cette requête REST :
127.0.0.1/rest/Products?method=update
exécuter en utilisant un POST avec le corps :
[
{"name": "Red pack", "price": 50}
]
Voici le résultat dans l’explorateur de données. Notez les valeurs des attributs stamp et createdBy.

Lors de l’importation de produits avec la fonction fromCollection():
var $products : cs.ProductsSelection
var $data:=New collection({name: "Red pack"; price: 50}; {name: "Green pack"; price: 10})
$products:=ds.Products.fromCollection($data)
Voici le résultat. Notez les valeurs des attributs stamp et createdBy.

Ce billet explique comment implémenter la fonction constructor().
Après la lecture, si vous avez besoin d’en savoir plus sur la façon dont constructor() se comporte en C/S ou en utilisant 4D Qodly pro ou lorsque vous travaillez avec un datastore distant, lisez cet article de blog.
Consultez la documentation pour en savoir plus et jouez avec l’IDH !
