Wie man in 3 Schritten ein dynamisches Formular aus einer Tabelle erstellt!

Automatisch übersetzt von Deepl

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}

Output Form Template

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.interobjectName:="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

Output Form With Column

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!

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.