ORDA: lavorare con oggetti e collezioni

Tradotto automaticamente da Deepl

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

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.