Come creare un modulo dinamico da una tabella in 3 passi!

Tradotto automaticamente da Deepl

4D v17 include i moduli dinamici, introdotti inizialmente in 4D v16 R6, un modo potente e flessibile per creare dinamicamente moduli completamente adattati alle esigenze degli utenti finali. Le possibilità offerte dai moduli dinamici sono enormi. In questo post vedremo un esempio concreto di ciò che è possibile fare con questi nuovi moduli.

Prima di tutto. Nel vostro database, avete bisogno di un modulo di input/output per tutte le vostre tabelle. Meglio ancora, perché non creare questi moduli dinamicamente da un modello? Con la notazione a oggetti, è molto facile manipolare gli oggetti. Basta definire un modello di input, un modello di output e un modello di oggetto. Poi, in fase di esecuzione, si possono generare i moduli in base alla tabella e ai campi selezionati.

Nell’esempio che segue, vengono forniti due modelli di form di output e due di input, oltre a un esempio di codice per aggiungere una tabella e dei campi.

Suggerimenti: Utilizzare i moduli dinamici

esempio di modulo di output

Passo 1

Creare un modello di modulo di output contenente solo pulsanti e una casella di riepilogo vuota. In questo esempio, il modello viene salvato nella cartella“template” della cartella“resources” del database:

$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))

Passo 2

Quindi, tramite codice, aggiungere il titolo del modulo, il nome e la tabella di origine della casella di riepilogo.

$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[1].objects.myListBox.table:=arrTableName{arrTableName}

Output Form Template

Passo 3

Inserire quindi una colonna della casella di riepilogo per ogni campo selezionato. Definire quindi il nome dell’oggetto colonna, l’origine della colonna e il nome dell’intestazione della colonna.

$oFormTemp.pages

$oColumn[1].objects.myListBox.columns:=New collection()

C_LONGINT ($numItem)
$numItem :=0For ($i;1;Size of array(arrFieldName))
If (arrFieldDisplay{$i}=True)
C_OBJECT($oColumn)

// Create a list box column
$oColumn:=OB Copy($oObjectTemplate.colListbox)
xml-ph-0035@deepl.interobjectName:="col "+arrFieldName{$i}
$oColumn .dataSource:="["+arrTableName{arrTableName}+"]"+arrFieldName{$i}
$oColumn .header:=New object("testo";arrFieldLabel{$i})

// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if
End for

Output Form With Column

Modulo di ingresso

Lo stesso principio può essere applicato al modulo di input. È sufficiente aggiungere un testo statico e un oggetto di input per ogni campo selezionato.

Un esempio di codice è disponibile nel database degli esempi.

Buona codifica!

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. 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. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.