Utilizzare collezioni ed elenchi all’interno degli oggetti dei moduli

Tradotto automaticamente da Deepl

Lecollezioni sono sempre più utilizzate nella programmazione 4D. A partire da 4D v19, è possibile utilizzarle per definire il contenuto di alcuni oggetti dell’interfaccia, anche attraverso la funzione Form. Ciò è molto utile per la gestione generica delle interfacce.

Abbiamo anche aggiunto miglioramenti al modo in cui vengono utilizzati gli elenchi. Vediamoli in dettaglio!

Utilizzo di collezioni ed elenchi all’interno degli oggetti dei moduli

Miglioramenti nell’uso degli elenchi

L’utilizzo degli elenchi è stato migliorato:
– Elenchi gerarchici
– Controlli a schede (primo caso d’uso)

Le collezioni possono ora essere utilizzate come riferimenti con i seguenti oggetti:
– Elenchi a discesa (noti anche come “elenchi a comparsa”)
– Caselle combinate
– Controlli a schede (secondo caso d’uso)

Elenchi gerarchici e controlli Tab

Abbiamo migliorato l’uso dei riferimenti agli elenchi per i controlli a schede e per gli oggetti del modulo Elenco gerarchico. Era già possibile associare il riferimento all’elenco direttamente all’oggetto modulo, ma ora questo riferimento può essere recuperato da un attributo dell’oggetto. Quindi ora è possibile scrivere questo :

// create a new object
$o
:=New object
// aggiungere un elenco a questo oggetto
$o .listRef:=New list
// then add items, icons, etc. to this list

// (…)
// quindi chiamare la finestra di dialogo usando questo oggetto (con il riferimento all'elenco incluso)
DIALOG ("myForm";$o)
// cancellare l'elenco per evitare perdite di memoria
CLEAR LIST ($o.listRef)

Fatto!

Elenchi a discesa (pop-up), caselle combinate e controlli Tab (ancora!)

L’evoluzione principale riguarda le collezioni. I possibili valori dei seguenti oggetti del modulo possono essere basati su una collezione di valori scalari (di solito alfanumerici), più esattamente su un oggetto che contiene a sua volta una collezione. Perché? Perché in genere è necessario conoscere il valore selezionato dall’utente e/o selezionare un valore predefinito (prima scheda, terzo elemento del menu a tendina, ecc.).

La variabile oggetto conterrà quindi i tre attributi seguenti:
values: collezione di valori possibili
index: indice dell’elemento scelto (negli elenchi a discesa e nelle schede)
currentValue: valore corrente (utilizzato per le caselle combinate, dove l’utente può selezionare o inserire un valore)

esempio

Immaginiamo di voler richiamare una finestra di dialogo come quella qui sotto. Ma, prima di chiamare la finestra di dialogo, si desidera definire:

  • Il contenuto del controllo Tab con “Alpha”; “Bravo”; “Charlie”.
  • il titolo (e dare la possibilità di inserirne uno)
  • Le possibili scelte per lo “Stato”

blank

Ciascuno di questi oggetti modulo avrà lo stesso tipo di variabile o espressione associata: Oggetto

blank

// prepare a global object that will be sent to the dialog command
$o
:=New object

// prepare the tab control object
$o
.oTab:=New object
$o .oTab.values:=New collection("Alpha"; "Bravo"; "Charlie")
$o .oTab.index:=0 // selezionare la scheda "Alpha"

// prepare the Title object
$o .oCombo:=New object
$o .oCombo.values:=New collection("Mr"; "Mz"; "Dr")
$o .oCombo.currentValue:=""

// prepare the Status object
// suggerimento: quando l'indice = -1, il currentValue viene usato come segnaposto!
$o .oPop:=New object
$o .oPop.values:=New collection("Single"; "Married"; "Widdow"; "Divorced")
$o .oPop.currentValue:="Select status..."
$o .oPop.index:=-1

$win :=Open form window("BLOG")
DIALOG ("BLOG"; $o)

Eseguire questo metodo e riempire la finestra di dialogo…

blankblank

Una volta convalidata la finestra di dialogo (cliccando su OK), sarà possibile sapere quale titolo e quale stato sono stati selezionati o inseriti.

Ecco il valore JSON dell’oggetto restituito:

blank

Conclusione

L’uso di un singolo oggetto per definire immediatamente i valori visualizzati e selezionati è ottimo. È possibile utilizzare le raccolte in molti oggetti contemporaneamente ed evitare l’uso di array di processo o interprocesso. Naturalmente, anche l’obiettivo principale è stato raggiunto: questo renderà la programmazione generica più semplice che mai.

Come al solito, un HDI vi guiderà attraverso questa funzione e anche la documentazione è stata aggiornata.

Buon divertimento e buona programmazione!

Roland Lannuzel
- Product Owner ed esperto di 4D - Dopo aver studiato elettronica, Roland è passato all'IT industriale come sviluppatore e consulente, realizzando soluzioni per i clienti con una varietà di database e tecnologie. Alla fine degli anni '80 si è innamorato di 4D e lo ha utilizzato per scrivere applicazioni aziendali che includono sistemi di contabilità, fatturazione e posta elettronica. Entrato a far parte dell'azienda nel 1997, Roland ha dato il suo prezioso contributo progettando specifiche, strumenti di test e demo, oltre a formare e parlare alla comunità 4D in occasione di numerose conferenze. Continua a plasmare attivamente il futuro di 4D definendo nuove funzionalità e strumenti di sviluppo di database.