4D v16.3

Unterformulare als Seite

Home

 
4D v16.3
Unterformulare als Seite

Unterformulare als Seite  


 

 

Unterformulare als Seite können die Daten des aktuellen Unterdatensatzes oder, je nach Kontext (Variablen, Bilder, etc.), jede Art von dauerhaftem Wert anzeigen. Ein Hauptvorteil dieser Unterformulare ist, dass sie ergänzende Funktionalitäten haben und direkt mit dem Elternformular (Widgets) interagieren können. Unterformulare als Seite haben auch eigene Eigenschaften und Ereignisse; sie lassen sich komplett per Programmierung steuern.

Hinweis: Sie können Komponenten generieren, die über Unterformulare zusätzliche Funktionalitäten bieten. Weitere Informationen dazu finden Sie im Abschnitt 4D Komponenten entwickeln und installieren.

Um ein Unterformular als Seite zu aktivieren, deaktivieren Sie einfach in der Eigenschaftenliste unter der Gruppe Unterformular die Optioden Seitenmodus für en Ausgabeformular. Dann erscheinen die Eigenschaften für Unterformulare als Liste nicht mehr, wie z.B. Auswahlmodus, Doppelklick auf Zeile, u.ä:

Das Unterformular als Seite verwendet das Eingabeformular, welches unter der Eigenschaft “Eingabeformular” angegeben ist. Es kann, anders als das Unterformular als Liste, von derselben Tabelle stammen wie das Elternformular. Sie können auch ein Projektformular verwenden. Bei der Ausführung hat das Unterformular als Seite die gleichen Anzeigemerkmale wie ein Eingabeformular. Die Funktionalitäten von Ausgabeformularen, hauptsächlich Markierer, sind nicht aktiv.

Sie verwalten Unterformulare als Seite über spezifische Eigenschaften, welche die Einbindung und Interaktion mit dem Elternformular vereinfachen.

Sie können einen Objekt Unterformular eine Variable zuordnen. Sie hat standardmäßig den Namen "Unterformular", wie das Objekt selbst. Sie hat einen Typ (siehe nächster Abschnitt) und lässt sich im Elternformular in Form einer Standardvariablen darstellen. Das Ändern dieser Variablen löst Formularereignisse aus, so dass Sie die Werte in Elternformular und Unterformular aufeinander abstimmen können:

  • Das Formularereignis On Data Change gibt im Unterformular Container an, dass der Wert der Variablen im Unterformular geändert wurde.
  • Das Formularereignis On bound variable change gibt dem Unterformular über dessen Formularmethode an, dass die Variable im Elternformular geändert wurde.

Damit können Sie den Typ der Variablen setzen, die dem Objekt Unterformular zugewiesen ist. Standardmäßig ist der Typ alphanumerisch vorgegeben. Der Variablentyp bestimmt die Art der Werte, die über die zugewiesene Variable zwischen Elternformular und Unterformular ausgetauscht werden.
Sie können auch den Typ "Keine" setzen; in diesem Fall setzt 4D den Variablentyp bei der Ausführung automatisch. Weitere Informationen dazu finden Sie im Handbuch 4D Programmiersprache unter Variablen im Abschnitt "Dynamische Variablen".

Quelle  

Damit können Sie verschiedene Arten von Quellen auswählen:

  • <Keine>: Wählen Sie diesen Typ, wenn Sie ein Projektformular oder eine Komponente als Unterformular verwenden wollen. Diese Unterformulare sind nur im Seitenmodus verwendbar: dazu muss in der Eigenschaftenliste unter der Gruppe "Unterformular" die Option Ausgabeformular deaktiviert sein.
    Damit ein Komponentenformular in der Eigenschaftenliste im DropDown-Menü "Eingabeformular" erscheint, muss es in der Komponente veröffentlicht sein. Weitere Informationen dazu finden Sie im Abschnitt Unterformular veröffentlichen (Komponente).
  • Tabellenname: Wählen Sie diesen Quelltyp, wenn Sie Tabellenformulare verwenden wollen.

Ein Objekt Unterformular kann eine Objektmethode haben, um seine Funktionsweise zu steuern, insbesondere wenn Ereignisse ausgelöst werden. Weitere Informationen zu Ereignissen bei Unterformularen als Seite finden Sie unter der 4D Funktion Form event

Beachten Sie, dass die Interaktion zwischen dem Inhalt des Objekts Unterformular und dem Elternformular über spezifische Mechanismen verwaltet werden muss (siehe Formularübergreifende Programmierung).

Die dem Unterformular zugewiesene Variable ermöglicht, beide Kontexte (Formular und Unterformular) miteinander zu verbinden, um komplexen Oberflächen den Endschliff zu geben. Nehmen wir zum Beispiel ein Unterformular mit einer dynamischen Uhr, die in ein Elternformular eingefügt wird, das wiederum eine eingebbare Variable vom Typ Zeit enthält:

Beide Objekte (Zeitvariable und Unterformular Container) haben denselben Variablennamen. In diesem Fall synchronisiert 4D beide Werte automatisch, wenn das Elternformular geöffnet wird. Ist der Wert der Variablen an verschiedenen Stellen gesetzt, verwendet 4D den zuletzt geladenen Wert. Beim Laden gilt folgende Reihenfolge:

1- Objektmethoden des Unterformulars
2- Formularmethode des Unterformulars
3- Objektmethoden des Elternformulars
4- Formularmethode des Elternformulars

Beim Ausführen des Elternformulars muss der Entwickler über passende Formularereignisse für die Synchronisierung der Variablen sorgen. Zwei Arten von Interaktionen können auftreten: Formular zu Unterformular und Unterformular zu Formular.

Fall1: Der Wert der Variablen des Elternformulars wird geändert, diese Änderung muss sich im Unterformular widerspiegeln. In unserem Beispiel ändert sich die Zeit der Variablen ParisTime auf 12:15:00, entweder weil der Benutzer das eingegeben hat oder weil die Zeit dynamisch aktualisiert wird, z.B. über die 4D Funktion Current time.

In diesem Fall müssen Sie das Formularereignis On bound variable change verwenden. Sie müssen es in den Eigenschaften des Unterformulars markieren. Es wird in der Formularmethode des Unterformulars erzeugt.

Das Formularereignis On bound variable change wird erzeugt:

  • sobald der Variablen des Elternformulars ein Wert zugewiesen wird, selbst wenn derselbe Wert erneut zugewiesen wird.
  • wenn das Unterformular zur aktuellen Formularseite oder zur Seite 0 gehört.

Wir empfehlen, wie im obigen Beispiel, die 4D Funktion OBJECT Get pointer zu verwenden, da sie statt der Variablen einen Zeiger auf den Unterformular Container übergibt. Denn in dasselbe Elternformular lassen sich mehrere Unterformulare einfügen. So enthält z.B. ein Fenster mit verschiedenen Zeitzonen mehrere Uhren. In diesem Fall lässt sich nur über einen Zeiger feststellen, welcher Unterformular Container am Ursprung des Ereignisses ist.

Fall 2: Der Inhalt des Unterformulars wird geändert und diese Änderung muss sich im Elternformular widerspiegeln. Stellen Sie sich in unserem Beispiel vor, dass der Benutzer im Unterformular die Zeiger der Uhr manuell bewegen kann.

In diesem Fall müssen Sie den Wert des Objekts der Variablen des Unterformular Containers im Elternformular zuweisen. Wie im vorigen Beispiel empfehlen wir, die 4D Funktion OBJECT Get pointer mit dem Selektor Object subform container zu verwenden, der einen Zeiger auf den Unterformular Container zurückgibt.

Weisen Sie den Wert der Variablen zu, wird das Formularereignis On Data Change in der Objektmethode des Unterformular Containers im Elternformular generiert, so dass Sie jede Art von Aktion ausführen können. Dieses Ereignis muss in den Eigenschaften des Unterformular Containers ausgewählt sein.

Hinweis: Bewegen Sie die Zeiger der Uhr manuell, wird das Formularereignis On Data Change ebenfalls in der Objektmethode der Variablen clockValue im Unterformular generiert.

Die Kommunikation zwischen dem Elternformular und den Instanzen des Unterformulars erfordern u.U. mehr als den Austausch eines Werts über die zugewiesene Variable. Sie wollen die Variablen in den Unterformularen gemäß den Aktionen updaten, die im Elternformular ausgeführt werden und umgekehrt. Nehmen wir wieder das Beispiel Unterformular mit dynamischer Uhr. Wir wollen nun eine oder mehrere Alarmzeiten pro Uhr setzen.

Dafür wurden in 4D folgende Funktionalitäten geschaffen:

Die 4D Funktion OBJECT Get pointer akzeptiert zusätzlich zum Selektor Object subform container einen Parameter, der angibt, in welchem Unterformular nach dem Objekt gesucht werden soll, dessen Name im zweiten Parameter angegeben ist. Diese Syntax lässt sich nur verwenden, wenn der Selektor Object named übergeben ist. 

Beispiel:
Die folgende Anweisung:

 $ptr:=OBJECT Get pointer(Object named;"MyButton";"MySubForm")

... findet einen Zeiger auf die Variable "MyButton", die im Unterformular "MySubForm" sliegt. Über diese Syntax lässt sich vom Elternformular aus auf jedes Objekt zugreifen, das im Unterformular gefunden wird.
Beachten Sie auch den 4D Befehl OBJECT Get name über den Sie den Namen des Objekts mit Fokus wiederfinden können.

Über den 4D Befehl CALL SUBFORM CONTAINER kann eine Unterformular Instanz ein Ereignis an das Objekt Unterformular-Container senden, welches es dann im Kontext des Elternformulars bearbeiten kann. Das Ereignis wird in der Objektmethode des Containers empfangen. Es kann am Ursprung jedes Ereignisses sein, das vom Unterformular gefunden wird (Klick, Drag-and-Drop, etc.). 

Der Code des Ereignisses ist nicht begrenzt, er kann z.B. 20000 oder -100). Sie können Code von vorhandenen Ereignissen, z.B. 3 für On Validate, oder einen eigenen Code verwenden. Im ersten Fall können Sie nur Ereignisse verwenden, die Sie in der Eigenschaftenliste für Unterformular Container markiert haben. Im zweiten Fall darf der Code keinem vorhandenen Formularereignis entsprechen. Wir empfehlen, einen negativen Wert zu verwenden, um sicherzustellen, dass 4D diesen Code nicht in zukünftigen Versionen verwendet.

Die ausführliche Beschreibung dieses Befehls finden Sie unter CALL SUBFORM CONTAINER.

Über den Befehl EXECUTE METHOD IN SUBFORM kann ein Formular oder eins seiner Objekte die Ausführung einer Methode im Kontext der Unterformular Instanz anfordern, was Zugriff auf Variablen, Objekte, etc. des Unterformulars gibt. Diese Methode kann auch Parameter empfangen. Nachfolgendes Schema zeigt die Funktionsweise:

Die ausführliche Beschreibung dieses Befehls finden Sie unter EXECUTE METHOD IN SUBFORM.

Der 4D Befehl GOTO OBJECT sucht nach dem Zielobjekt im Elternformular, auch wenn es über ein Unterformular ausgeführt wird.



Siehe auch 

Unterformulare als Liste

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Unterformulare und Widgets

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Designmodus ( 4D v16)
4D Designmodus ( 4D v16.1)
4D Designmodus ( 4D v16.3)