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}
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.inter
objectName:="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
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!