4D v17 enthält dynamische Formulare, die erstmals in 4D v16 R6 eingeführt wurden, eine leistungsstarke und flexible Methode zur dynamischen Erstellung von Formularen, die vollständig an die Bedürfnisse Ihrer Endbenutzer angepasst sind. Die Möglichkeiten der dynamischen Formulare sind enorm. In diesem Beitrag sehen wir uns ein konkretes Beispiel dafür an, was Sie mit diesen neuen Formularen tun können.
Das Wichtigste zuerst. In Ihrer Datenbank benötigen Sie ein Eingabe-/Ausgabeformular für alle Ihre Tabellen. Noch besser wäre es, wenn Sie diese Formulare dynamisch aus einer Vorlage erstellen könnten. Mit der Objektnotation ist es sehr einfach, Objekte zu manipulieren. Sie müssen lediglich eine Eingabe- und eine Ausgabemaske sowie eine Objektmaske definieren. Dann können Sie zur Laufzeit Ihre Formulare entsprechend der ausgewählten Tabelle und den Feldern generieren.
Im folgenden Beispiel stellen wir Ihnen zwei Ausgabe- und zwei Eingabeformularvorlagen sowie ein Codebeispiel zum Hinzufügen einer Tabelle und von Feldern zur Verfügung.
Tipps: Dynamische Formulare verwenden
Beispiel für ein Ausgabeformular
Schritt 1
Erstellen Sie eine Ausgabeformularvorlage, die nur Schaltflächen und ein leeres Listenfeld enthält. In diesem Beispiel wird die Vorlage im Ordner„template“ im Ordner„resources“ der Datenbank gespeichert:
$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))
Schritt 2
Fügen Sie dann per Code den Formulartitel, den Namen und die Quelltabelle des Listenfeldes hinzu.
$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[1].objects.myListBox.table:=arrTableName{arrTableName}
Schritt 3
Als nächstes fügen Sie eine Listbox-Spalte für jedes ausgewählte Feld ein. Definieren Sie dann den Namen des Spaltenobjekts, die Spaltenquelle und den Namen der Spaltenüberschrift.
$oFormTemp.pages$oColumn[1].objects.myListBox.columns:=New collection()
C_LONGINT ($numItem)
$numItem :=0
For ($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("text";arrFieldLabel{$i})
// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if
End for
Eingabeformular
Das gleiche Prinzip kann auf das Eingabeformular angewendet werden. Sie fügen einfach statischen Text und ein Eingabeobjekt für jedes ausgewählte Feld hinzu.
Ein Codebeispiel finden Sie in der Beispieldatenbank.
Viel Spaß beim Kodieren!