Angolo degli oggetti: condivisione facilitata e altre buone notizie

Tradotto automaticamente da Deepl

Quante volte avete ricevuto l’errore“Tipo di valore non supportato in un oggetto condiviso” quando avete cercato di inserire un oggetto in un oggetto condiviso?

Che cosa avete fatto? Avete scritto del codice più lungo per trasformare il vostro oggetto innocente in un oggetto condiviso, magari iterando su tutte le sue proprietà?

Che ne dite di trasferire un oggetto condiviso da un gruppo condiviso a un altro?

Una cosa interessante sugli oggetti: sapete già che possono essere usati come una mappa hash (un sistema chiave/valore), ma che ne dite di ottenere tutte le chiavi o tutti i valori con una sola riga di codice?

Continuate a leggere, perché 4D v18 R3 è uscito e porta con sé buone notizie!

COPIA di oggetti e collezioni condivise

copiare un oggetto come condiviso

Il comando OB Copy() è stato migliorato per accettare una nuova opzione che può avere il valore: ck condiviso

Nell’esempio che segue, l’oggetto $person viene copiato come oggetto condiviso nell’oggetto $copy.

Quindi, possiamo inserire l’oggetto $copy nell’oggetto condiviso $personsList .

C_OBJECT$copy ($person;$copy;$personsList)
C_TEXT ($text)

$text :=Document to text(Get 4D folder(Current resources folder)+"person.txt")
//$person is a standard object
$person :=JSON Parse($text)

$personsList :=New shared object()

//$copy is a shared object
$copy :=OB Copy($person;ck shared)

Use ($personsList)
//We can put $copy in $personsList because $copy is a shared object
$personsList .person:= xml-ph-003

End use

assegnare un oggetto condiviso da un gruppo condiviso a un altro

Il comando OB Copy() è stato migliorato per accettare un nuovo parametro: groupWith (che deve essere un oggetto condiviso o un insieme condiviso).

Il passaggio del parametro groupWith consente di inserire l’oggetto copiato nello stesso gruppo condiviso di groupWith.

Nell’esempio seguente, $sharedObj e $sharedColl appartengono a due gruppi condivisi separati.

Non possiamo inserire $sharedObj in $sharedColl senza incorrere in un errore, ma possiamo facilmente copiare $sharedObj in un nuovo oggetto appartenente allo stesso gruppo condiviso di $sharedColl.

C_OBJECT($sharedObj;$objCopy)
C_COLLECTION ($sharedColl)

//$sharedObj belongs to a shared group

$sharedObj :=New shared object("cognome"; "Smith"; "indirizzo";New shared object("città"; "New York"))

//$sharedColl belongs to another shared group

$sharedColl :=New shared collection(New shared object("cognome"; "Brown")

//$objCopy is in the same shared group as $sharedColl

$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)

//So we can put $objCopy into $sharedColl without error

Use ($sharedColl)
$sharedColl .push($objCopy)
End use

e che dire delle collezioni condivise?

Gli esempi precedenti sono relativi al comando OB Copy() .

Il metodo membrocollection.copy() è stato migliorato esattamente nello stesso modo.

gestire un oggetto come mappa hash

Ci sono nuovi comandi che facilitano la gestione di un oggetto come mappa hash. Se avete oggetti i cui nomi di proprietà contengono dati dinamici, questi comandi fanno al caso vostro!

Spieghiamolo con un singolo esempio.

Consideriamo questo oggetto $persons che contiene nome come nome di proprietà ed età come valore di proprietà:

C_OBJECT($persons)
$persons :=New object
$persons ["John"]:=42 // John is 42
$persons ["Andy"]:=24 // Andy is 24
$persons ["Mary"]:=30 // Mary is 30
$persons ["Paul"]:=50 // Paul is 50
$persons ["Fred"]:=51// Fred is 51

Comando Chiavi OB

Questo comando restituisce i nomi delle proprietà di un oggetto sotto forma di raccolta:

ALERT("Ci sono "+String(OB Keys($persons).length)+" persone")

Comando OB Valori

Questo comando restituisce i valori delle proprietà di un oggetto sotto forma di raccolta:

ALERT("L'età media è "+String(OB Values($persons).average()))

Comando OB Voci

Questo comando restituisce un insieme di oggetti con proprietà chiave (nome della proprietà) e valore (valore della proprietà):

C_COLLECTION($agesOK)

$agesOK:=OB Entries($persons).query("valore>:1";45)
ALERT ("Ci sono "+String($agesOK.length)+" persone che hanno più di 45 anni")
ALERT ("I loro nomi sono: "+$agesOK.extract("chiave").join("-"))

L’uso di un oggetto, come mostrato sopra, consente un accesso rapido e diretto ai dati, come quando si usa un indice.

È più veloce che usare un insieme di oggetti con le proprietà firstname ed age.

Si noti anche che questi comandi restituiscono un insieme. Ciò consente di utilizzare tutti i metodi membri disponibili per le collezioni (come ad esempio average(), query(), …).

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.