In questa ultima aggiunta alla serieORDA, vedremo come i nuovi concetti ORDA possono interagire con gli oggetti e le collezioni esistenti. Infatti, è possibile trasformare entità e selezioni di entità in oggetti e collezioni, nonché costruire entità e selezioni di entità da oggetti e collezioni. In questo modo, è possibile integrare facilmente il codice ORDA nel codice esistente. È possibile sfruttare appieno i vantaggi di ORDA senza dover riscrivere il codice!
Oggi si usa SELECTION TO ARRAY e ARRAY TO SELECTION per lavorare in modo disconnesso dal server, ma si devono gestire tanti array quanti sono i campi. E per un record corrente, non c’è modo di estrarlo in nessuna forma. Con ORDA è possibile esportare facilmente le entità e le selezioni di entità dal database per lavorarci separatamente. E non è tutto: è possibile importare nel database oggetti e collezioni creati in precedenza. Il tutto con un unico metodo facile da usare!
Ciò è molto utile per lavorare in modo efficiente in modalità client-server, per comunicare con altre applicazioni o per importare dati con processi batch.
ORDA: lavorare con oggetti e collezioni
ESPORTAZIONE DI SELEZIONI DI ENTITA’ E DI ENTITA’ IN OGGETTI E COLLEZIONI
Gli esempi che seguono si basano su questa struttura. Sporchiamoci le mani!

Esportazione a oggetti
Un’entità può essere estratta come oggetto utilizzando il metodo toObject(). In questo caso, estraiamo l’entità $pupil come oggetto. Possiamo scegliere quali proprietà estrarre.
Quindi, possiamo applicare il comando JSON Stringify per convertire il valore di questo oggetto in una stringa JSON e inviarla attraverso la rete, ad esempio. C_OBJECT($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway"
$pupil :=ds.Pupil.query("lastName=:1"; "Dunaway").first()
If ($pupil#Null)
// Turn the entity to an object
$pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject) // Stringify the object
End if
L’oggetto $pupilObject sarà:
{
"firstName": "Cecil",
"cognome": "Dunaway",
"email": "Cecil.Dunaway@echo".
}
ESPORTAZIONE ALLE COLLEZIONI
Una selezione di entità può essere esportata in un insieme utilizzando il metodo toCollection(). In questo caso, esportiamo la selezione di entità $pupils (che contiene 2 entità) come raccolta. Decidiamo di estrarre solo le proprietà dello studente lastName and firstName insieme a tutte le proprietà dell’entità school .
Quindi, possiamo applicare il comando JSON Stringify per convertire i valori di questa raccolta in una stringa JSON e inviarla attraverso la rete, ad esempio.
C_OBJECT($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1"; "L@")
//Turn the entity selection to a collection of objects
$pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)
L’insieme $pupilsCollection sarà:
[
{
"firstName": "Lauren",
"cognome": "Bouchard",
"scuola": {
"ID": 45,
"nome": "Scuole d'arte",
"stato": "New Jersey" }
},
{
"nome": "Laurie",
"cognome": "Valenti",
"scuola": {
"ID": 46,
"nome": "Scuola di matematica",
"stato": "New Jersey"}
}
]
Altre opzioni per toObject() e toCollection() sono disponibili, si consiglia di consultare la documentazione per maggiori dettagli!
IMPORTAZIONE DI SELEZIONI DI ENTI E DI ENTITÀ DA OGGETTI E COLLEZIONI
importare da Oggetti
Un’entità può essere costruita da un oggetto con il metodo fromObject() . In questo caso, creiamo una nuova entità $pupil da un oggetto dato:
C_OBJECT($pupil;$pupilObject))
$pupilObject :=New object("nome"; "Mary"; "cognome"; "Smith"; "email"; "Mary.Smith@whisky")
//Create a new empty entity
$pupil :=ds.Pupil.new(
//Fill entity
$pupil.fromObject($pupilObject)
importare da collections
Una selezione di entità può essere costruita da un insieme con il metodo fromCollection(). Qui si costruisce una selezione di entità $pupils da un insieme dato.
Si noti che questo meccanismo può essere utilizzato per creare nuove entità o aggiornare quelle esistenti. Dipende semplicemente dalla presenza della chiave primaria negli oggetti.
C_OBJECT($pupils)
C_TEXT($txtAlunni)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"alunni_dati.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)
ed ecco il metodo $pupilsCollection collection:
[
{ // La chiave primaria dell'entità non è data. Verrà creata una nuova entità
"firstName": "Mark",
"lastName": "Mac Arthur",
"email": "Mark.MacArthur@yankee",
"scuola": {
"__KEY": "45"
}
},
{ // Viene fornita la chiave primaria dell'entità. Questa entità verrà aggiornata (se esiste)
"__KEY": 3436,
"firstName": "Victor",
"cognome": "Valenti",
"email": "Victor.Valenti@NEWSCHOOL",
"scuola": {
"__KEY": "45"
}
}
]
