Il linguaggio 4D supporta il concetto di classi e, di conseguenza, il concetto di constructor.
D’altra parte, il livello di astrazione ORDA, attraverso le classi di modelli di dati, offre un grande vantaggio commerciale. Permette di scrivere codice orientato al business e di “pubblicarlo” proprio come un’API. Datastore, classi di dati, selezioni di entità ed entità sono tutti disponibili come oggetti di classe che possono contenere funzioni, attributi calcolati e alias.
Questo porta le applicazioni a seguire facilmente i principi MVC con un codice potente e ottimizzato.
Per lavorare con un approccio completamente orientato agli oggetti, a partire da 4D 20 R10, le classi di entità possono ora avere un constructor(). Avete bisogno di impostare i valori iniziali quando una nuova entità viene istanziata? Ora è possibile! Continuate a leggere per saperne di più …
Con le classi del modello di dati ORDA, i dati vengono gestiti attraverso entità che sono istanze delle classi Entity presenti nella struttura.
4D 20 R10 offre la possibilità di implementare un constructor() per gli oggetti entità.
Il costruttore di entità
Per lavorare con un approccio completamente orientato agli oggetti, a partire da 4D 20 R10, le classi entità possono ora avere un constructor() che viene eseguito quando vengono istanziate.
Questo è il modo perfetto per inizializzare alcuni valori predefiniti, come ad esempio un timbro o un attributo createdBy.
Prima, per fare questo, probabilmente si implementava una funzione createNew() nella classe di dati appropriata. Data una classe di dati Products, gli sviluppatori devono sapere che esiste una funzione createNew() in questa classe e che devono usarla invece di istanziare naturalmente un’entità Products usando ds.Products.new().
Per creare un nuovo prodotto, lo fanno:
Form.product:=ds.Products.createNew()
come implementare il costruttore
Basta implementare la funzione constructor() nella classe entità.
Ecco la classe ProductsEntity:
Class extends Entity
Class constructor()
This.stamp:=Timestamp()
This.createdBy:=Current user()
E il codice di chiamata è così logico. Per esempio, quando si fa clic sul pulsante Crea prodotto in un modulo, basta fare:
Form.product:=ds.Products.new()
e l’entità Form.product viene fornita con gli attributi stamp e createdBy correttamente compilati!

La funzione constructor() non si attiva solo chiamando la funzione new() funzione. Qualunque sia il mezzo con cui l’entità viene istanziata, il costruttore viene attivato.
Può anche essere:
– l’Esploratore dati (quando si crea una nuova entità)
– la funzione fromCollection()
– una chiamata API REST che crea una nuova entità sul server(ad esempio, $method=update)
– codice in esecuzione sul server REST che elabora un’entità istanziata su un client, come il front-end di un’applicazione Qodly o un client 4D che utilizza un datastore remoto.
altri esempi
Data questa richiesta REST:
127.0.0.1/rest/Products?method=update
eseguire un POST con il corpo:
[
{"name": "Red pack", "price": 50}
]
Ecco il risultato nel Data explorer. Si notino i valori degli attributi stamp e createdBy.

Quando si importano prodotti con la funzione fromCollection():
var $products : cs.ProductsSelection
var $data:=New collection({name: "Red pack"; price: 50}; {name: "Green pack"; price: 10})
$products:=ds.Products.fromCollection($data)
Ecco il risultato. Si notino i valori degli attributi stamp e createdBy.

Questo blogpost spiega come implementare la funzione constructor().
Dopo la lettura, se volete saperne di più su come constructor() si comporta in C/S o utilizzando 4D Qodly pro o quando si lavora con un datastore remoto, leggete questo blogpost.
Consultate la documentazione per saperne di più e giocate con l’HDI!
Al momento non è possibile lasciare commenti su questo post.