Siamo tutti d’accordo che ORDA è una grande funzionalità di 4D V17. Una sorta di rivoluzione nel modo di pensare e di programmare. I database 4D non saranno più visti nello stesso modo di prima.
ORDA permette di concepire applicazioni avanzate in minor tempo, con un codice più leggibile e pulito. Per mostrarvi la potenza di ORDA abbiamo preparato per voi una serie di consigli, suddivisi in tre episodi. In questo primo episodio vi mostreremo come i collegamenti debbano essere considerati più come entità e collezioni di entità e come le listbox possano essere basate su selezioni di entità, piuttosto che su selezioni o array.
Scarica Genealogia – Episodio uno
Usare le relazioni ricorsive
Per dimostrare la potenza di 4D e ORDA, useremo un database altamente ricorsivo, utilizzando una singola tabella chiamata PEOPLE.
Questa tabella contiene cinque campi principali: Cognome, Nome, Data di nascita, Sesso e ID (che ovviamente è unico).
Poi ci sono altri tre campi: FatherID, MotherID e PartnerID che collegano ogni persona ad altre tre se esistono (Partner) o se sono conosciute (Mother e Father).
definizione delle relazioni
Concentriamoci ora sulla definizione delle relazioni. In entrambe le direzioni (da 1 a N e da N a 1), le relazioni possono essere denominate. Utilizzando ORDA, questi nomi diventeranno molto significativi e utili. Nella direzione molti a uno , il nome non è solo una stringa, ma è un’entità della tabella PEOPLE, allo stesso modo dell’entità PEOPLE da cui ha origine la relazione. Nella direzione uno a molti è ancora di più, il nome rappresenta una selezione di entità.
Senza anticipare troppo, si può intuire che con la notazione a oggetti, si potrà usare PEOPLE.Father, così come PEOPLE.ChildrenAsFather, per raggiungere una singola persona (il padre) o un gruppo di persone (i figli).
Un nuovo tipo di casella di riepilogo
Finora il contenuto delle caselle di riepilogo (l’origine dei dati) era costituito da array o selezioni. D’ora in poi, il contenuto può provenire anche da un insieme o da una selezione di entità. Vediamo quindi come si può utilizzare una selezione di entità all’interno di una casella di riepilogo.
Prima di tutto, è necessario creare la selezione di entità utilizzando la nuova funzione ds. In questo esempio, creeremo una semplice selezione di entità contenente tutte le PERSONE ordinate per compleanno, cognome e nome. Questo può essere fatto in una sola riga, come mostrato di seguito. Questo è tutto ciò che si deve sapere per ora su ds!
people:= ds.PEOPLE.all().orderBy("Birthday asc, Lastname asc, Firstname asc")
Una volta ottenuta la selezione dell’entità people, basta impostarla come proprietà della casella di riepilogo e il gioco è fatto!
“QUESTO” è fantastico
Come nelle normali caselle di riepilogo, il contenuto di ogni colonna deve essere definito. Nel nostro caso, finché usiamo una selezione di entità, il contenuto di ogni colonna sarà definito come un’espressione. Per farlo, utilizzeremo una nuova parola chiave (“This“) che si riferirà all’elemento corrente della selezione di entità.
Per visualizzare i nomi e le date di nascita di people, l’espressione può essere semplice come:
Questo.Lastname
Questo.Firstname
Questo.Lastname + " " +Questo.Firstname
Questo.Birthday
Ora arriva il potere e il divertimento: se si vuole visualizzare il cognome del padre, la data di nascita della madre o il nome del partner, basta usare i nomi delle entità che sono stati dati nelle definizioni delle relazioni (padre, madre, partner, ecc.) e scrivere:
Questo.Father.Lastname
Questo.Mother.Birthday
Questo.Parter.Firstname
Naturalmente, si può andare oltre se si vogliono conoscere i nomi dei quattro nonni del partner dell’attuale people scrivendo:
Questo.Partner.Father.Father.Lastname
Questo.Partner.Father.Mother.Lastname
Questo.Partner.Mother.Father.Lastname
Questo.Partner.Mother.Mother.Lastname
Un ultimo passo (per oggi!): Voglio anche visualizzare il numero di figli e fratelli che questa persona ha. Posso farlo?
Certo, è abbastanza facile. Per i figli, basta utilizzare la selezione dell’entità ChildrenAsFather definita nella definizione della relazione. Come ogni selezione di entità, ha una proprietà length. È sufficiente definire l’espressione in questo modo:
This.ChildrenAsFather.length + This.ChildrenAsMother.length // uno di essi sarà uguale a zero, ChildrenAsFather.length per le donne e viceversa.
Per i fratelli è necessario “salire” fino alla madre (o al padre) e “scendere” fino ai figli. Quindi l’espressione sarebbe :
Questo
. Mother.
ChildrenAsMother
.length - 1 // minus 1 to remove the current people from the number of his/her siblings :-)
Ed ecco il risultato… senza una sola riga di codice!
Per continuare, rimanete sintonizzati!