Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
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 Option Ausgabe Unterformular. 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 einem Objekt Unterformular eine Variable zuordnen. Sie hat standardmäßig keinen Namen, so kann Ihr Code über einen Zeiger darauf zugreifen. Weitere Informationen dazu finden Sie im Abschnitt des Handbuchs 4D Programmiersprache.
Sie hat einen Typ (siehe nächster Abschnitt) und lässt sich als Standardvariable im Elternformular 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 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. Der Variablentyp bestimmt die Art der Werte, die über diese Variable zwischen Elternformular und Unterformular ausgetauscht werden.
Standardmäßig ist als Typ Nichts vorgegeben. Behalten Sie diese Option bei, müssen Sie den Typ explizit über Code setzen, damit die Anwendung im kompilierten Modus arbeitet. Weitere Informationen dazu finden Sie im Abschnitt des Handbuchs 4D Programmiersprache.

Wählen Sie den Typ Objekt (mit Variablenname), können Sie über die Funktion Form die Eigenschaften dieses Objekts im Unterformular erhalten oder setzen (siehe unten An Unterformular gebundenes Objekt verwenden).

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 .
  • 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 code

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.

4D bindet automatisch ein Objekt (_O_C_OBJECT) an jedes Unterformular. Der Inhalt dieses Objekts kann im Kontext des Unterformulars gelesen bzw. geändert werden, so dass Sie Werte in einem lokalen Kontext gemeinsam nutzen können.

Das Objekt lässt sich automatisch erstellen oder ist die Variable des Elterncontainer, wenn sie explizit benannt und als Objekt typisiert ist (siehe unten). In allen Fällen wird das Objekt von der Funktion Form zurückgegeben, die sich direkt im Unterformular aufrufen lässt (ein Zeiger wird ignoriert). Da Objekte immer über Referenz übergeben werden, wird eine Änderung, die der Benutzer im Unterformular macht, automatisch im Objekt selbst gesichert.

Zum Beispiel werden in Ihrem Unterformular Feldbezeichnungen im verbundenen Objekt gespeichert, so dass Sie verschiedene Sprachen anzeigen können:

Um die Bezeichnungen vom Unterformular zu ändern, weisen Sie einfach dem Objekt InvoiceAddress Werte zu:

 C_OBJECT($lang)
 $lang:=New object
 If(<>lang="fr")
    $lang.CompanyName:="Société :"
    $lang.LastName:="Nom :"
 Else
    $lang.CompanyName:="Company:"
    $lang.LastName:="Name:"
 End if
 InvoiceAddress.Label:=$lang

Weitere Informationen dazu finden Sie unter der Funktion Form.

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

 
SEITENINHALT 
 
GESCHICHTE 

Geändert: 4D v16 R5

 
ARTIKELVERWENDUNG

4D Designmodus ( 4D v20 R7)