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" } } ]