ORDA – Empezar con el constructor de entidades

Traducido automáticamente de Deepl

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 …

HDI_ORDA_constructor

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.

blank

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.

blank

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.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.