Sammlungen und Listen in Formularobjekten verwenden

Sammlungen werden in der 4D Programmierung immer häufiger verwendet. Ab 4D v19 können Sie sie verwenden, um den Inhalt einiger Schnittstellenobjekte zu definieren, auch über die Funktion Form. Dies ist sehr nützlich für das allgemeine Schnittstellenmanagement.

Wir haben auch Verbesserungen bei der Verwendung von Listen vorgenommen. Schauen wir uns das im Detail an!

Verwendung von Sammlungen und Listen in Formularobjekten

Verbesserungen bei der Verwendung von Listen

Die Verwendung von Listen wurde verbessert:
– Hierarchische Listen
– Tab-Steuerelemente (erster Anwendungsfall)

Sammlungen können jetzt als Referenzen mit den folgenden Objekten verwendet werden:
– Dropdown-Listen (auch bekannt als „Pop-up-Listen“)
– Kombinationsfelder
– Tabulator-Steuerelemente (zweiter Anwendungsfall)

Hierarchische Listen und Tabulator-Steuerelemente

Wir haben die Verwendung von Listenreferenzen für Registersteuerelemente und hierarchische Listenformularobjekte verbessert. Es war bereits möglich, die Listenreferenz direkt mit dem Formularobjekt zu verknüpfen, aber diese Referenz kann nun über ein Objektattribut abgerufen werden. Sie können jetzt also Folgendes schreiben :

// create a new object
$o
:=New object
// eine Liste zu diesem Objekt hinzufügen
$o .listRef:=New list
// then add items, icons, etc. to this list

// (…)
// dann den Dialog über dieses Objekt (mit der enthaltenen Listenreferenz) aufrufen
DIALOG ("myForm";$o)
// die Liste löschen, um Speicherlecks zu vermeiden
CLEAR LIST ($o.listRef)

Geschafft!

Dropdown-Listen (Pop-ups), Kombinationsfelder und Tabulator-Steuerelemente (wieder!)

Die wichtigste Entwicklung betrifft die Sammlungen. Die möglichen Werte der folgenden Formularobjekte können auf einer Sammlung von skalaren Werten (normalerweise alphanumerisch) basieren, genauer gesagt auf einem Objekt, das selbst eine Sammlung enthält. Und warum? Weil es im Allgemeinen notwendig ist, den vom Benutzer gewählten Wert zu kennen und/oder einen Standardwert auszuwählen (erste Registerkarte, drittes Element der Auswahlliste, usw.)

Die Objektvariable wird also die folgenden drei Attribute enthalten:
values: Sammlung der möglichen Werte
index: Index des gewählten Elements (in Dropdown-Listen und Registerkarten)
currentValue: aktueller Wert (für Kombinationsfelder, in denen der Benutzer entweder einen Wert auswählen oder eingeben kann)

Beispiel

Stellen Sie sich vor, Sie möchten ein Dialogfeld wie das unten stehende aufrufen. Aber bevor Sie den Dialog aufrufen, möchten Sie definieren:

  • Den Inhalt des Tab Controls mit „Alpha“; „Bravo“; „Charlie“
  • Den Titel (und die Möglichkeit, einen einzugeben)
  • Die möglichen Auswahlen für „Status“

blank

Jedes dieser Formularobjekte hat denselben Typ von zugehöriger Variable oder Ausdruck: Objekt

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 // Wählen Sie die Registerkarte "Alpha"

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

// prepare the Status object
// Tipp: Wenn der Index = -1 ist, wird der currentValue als Platzhalter verwendet!
$o .oPop:=New object
$o .oPop.values:=New collection("Single"; "Verheiratet"; "Verwitwet"; "Geschieden")
$o .oPop.currentValue:="Status auswählen..."
$o .oPop.index:=-1

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

Führen Sie diese Methode aus und füllen Sie den Dialog…

blankblank

Sobald das Dialogfeld validiert ist (OK wird angeklickt), können Sie feststellen, welcher Titel und welcher Status ausgewählt oder eingegeben wurde.

Hier ist der resultierende JSON-Wert des zurückgegebenen Objekts:

blank

Schlussfolgerung

Die Verwendung eines einzigen Objekts zur sofortigen Definition der angezeigten und ausgewählten Werte ist großartig. Sie können die Sammlungen in vielen Objekten auf einmal verwenden und vermeiden die Verwendung von Prozess- oder Interprozess-Arrays. Natürlich ist auch das Hauptziel erreicht: Die generische Programmierung wird dadurch einfacher als je zuvor.

Wie üblich wird ein HDI Sie durch diese Funktion führen, und die Dokumentation wurde ebenfalls aktualisiert.

Viel Spaß beim Programmieren!

Roland Lannuzel
- Product Owner & 4D Experte - Nach seinem Studium der Elektronik arbeitete Roland als Entwickler und Berater in der industriellen IT-Branche, wo er Lösungen für Kunden mit einer Vielzahl von Datenbanken und Technologien entwickelte. In den späten 80er Jahren verliebte er sich in 4D und setzte es bei der Entwicklung von Geschäftsanwendungen wie Buchhaltungs-, Abrechnungs- und E-Mail-Systemen ein. 1997 trat er schließlich in das Unternehmen ein und leistete einen wertvollen Beitrag, indem er Spezifikationen, Testtools und Demos entwarf, Schulungen durchführte und auf vielen Konferenzen für die 4D Community sprach. Er gestaltet die Zukunft von 4D aktiv mit, indem er neue Funktionen und Datenbankentwicklungstools definiert.