El lenguaje 4D soporta el concepto de clases y, por tanto, el concepto de constructor.
Por otro lado, la capa de abstracción ORDA, a través de las Clases del Modelo de Datos, proporciona un gran beneficio de negocio. Permite escribir código orientado al negocio y «publicarlo» como si fuera una API. Datastore, dataclasses, entity selections, y entities están todos disponibles como objetos de clase que pueden contener funciones así como atributos computados, y aliases.
Esto hace que tus aplicaciones sigan fácilmente los principios MVC con un código potente y optimizado.
Para trabajar con un enfoque orientado a objetos completo, a partir de 4D 20 R10, las clases de entidad ahora pueden tener un constructor(). ¿Necesita establecer valores iniciales cuando se instancia una nueva entidad? ¡Ahora es posible! Sigue leyendo para saber más …
Con las clases del modelo de datos ORDA, los datos se manejan a través de entidades que son instancias de las clases Entity que tiene en su Structure.
4D 20 R10 trae la posibilidad de implementar un constructor() para los objetos entidades.
El constructor de entidades
Para trabajar con un enfoque orientado a objetos completo, a partir de 4D 20 R10, las clases entidad pueden ahora tener un constructor() que se ejecuta cuando se instancian
Esta es la manera perfecta de inicializar algunos valores por defecto como un sello o un atributo createdBy por ejemplo.
Antes, para hacer esto, probablemente implementabas una función createNew() en la clase de datos apropiada. Dada una clase de datos Productos, sus desarrolladores deben saber que existe una función createNew() en esta clase y que deben utilizarla en lugar de instanciar de forma natural una entidad Productos utilizando ds.Products.new().
Para crear un nuevo producto, deben
Form.product:=ds.Products.createNew()
cómo implementar el constructor
Basta con implementar la función constructor() en la clase entidad.
Aquí está la clase ProductsEntity:
Class extends Entity
Class constructor()
This.stamp:=Timestamp()
This.createdBy:=Current user()
Y el código de llamada es tan lógico. Por ejemplo, al hacer clic en el botón Crear producto en un formulario, basta con hacer:
Form.product:=ds.Products.new()
¡y la entidad Form.product viene con los atributos stamp y createdBy correctamente rellenados!

El constructor() no sólo se activa llamando a la función new() función. Cualquiera que sea el medio con el que se instancie la entidad, el constructor se dispara.
También puede serlo
– el explorador de datos (al crear una nueva entidad)
– la función fromCollection()
– una llamada a la API REST que crea una nueva entidad en el servidor(por ejemplo, $method=update)
– código ejecutándose en el servidor REST y procesando una entidad instanciada en un cliente como un front-end de una aplicación Qodly o un cliente 4D utilizando un datastore remoto.
otros ejemplos
Dada esta petición REST
127.0.0.1/rest/Products?method=update
ejecutar utilizando un POST con el cuerpo:
[
{"name": "Red pack", "price": 50}
]
Este es el resultado en el explorador de datos. Observe los valores de los atributos stamp y createdBy.

Al importar productos con la función fromCollection():
var $products : cs.ProductsSelection
var $data:=New collection({name: "Red pack"; price: 50}; {name: "Green pack"; price: 10})
$products:=ds.Products.fromCollection($data)
Este es el resultado. Observe los valores de los atributos stamp y createdBy.

Este blogpost explica cómo implementar la función constructor().
Después de la lectura, si usted necesita aprender más acerca de cómo el constructor() se comporta en C / S o el uso de 4D Qodly pro o cuando se trabaja con un almacén de datos remoto, lea este blogpost.
Consulte la documentación para aprender más y jugar con el IDH.
