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

Home

 
4D v20 R7
DIALOG

DIALOG 


 

DIALOG ( {Tabellenname ;} Formularname {; FormularDaten}{; *} ) 
Parameter Typ   Beschreibung
Tabellenname  Tabelle in Tabelle, zu der das Formular gehört,
ohne Angabe: Standardtabelle oder Verwenden von Projektformular
Formularname  String, Objekt in Name (String) des Tabellen- oder Projektformulars, oder
POSIX Pfad (String) zu einer .json Datei mit Beschreibung des Formulars, oder
Objekt mit Beschreibung des Formulars.
FormularDaten  Objekt in Daten für das Formular
Operator in Verwende gleichen Prozess

Der Befehl DIALOG zeigt dem Benutzer das Formular Formularname, optional mit dem Parameter FormularDaten.

Dieser Befehl dient zum Arbeiten mit angepassten oder komplexen Benutzeroberflächen, die auf Formularen basieren. Damit können Sie Information aus der Datenbank bzw. von anderen Stellen anzeigen oder Features zur Dateneingabe vermitteln. Im Gegensatz zu ADD RECORD oder MODIFY RECORD gibt DIALOG Ihnen volle Kontrolle über das Formular, seinen Inhalt und die Schaltflächen zum Navigieren und Bestätigen.

Oft wird das Formular zusammen mit der Funktion Open form window zum Anzeigen komplexer Formulare aufgerufen. Hierzu ein Beispiel:

Sie können DIALOG auch anstatt ALERT, CONFIRM oder Request verwenden, wenn die anzuzeigende Information für diese Befehle zu umfangreich ist.

Hinweis: In konvertierten Datenbanken lässt sich die Dateneingabe in Felder von Dialogboxen unterbinden, d.h. die Dateneingabe ist auf Variablen beschränkt. Diese Option stellen Sie in den Einstellungen der Datenbank auf der Seite Kompatibilität ein. Diese Einschränkung entspricht der Arbeitsweise früherer 4D Versionen.

In Formularname definieren Sie, welches Formular (Projekt- oder Tabellenformular) verwendet werden soll.

Im Parameter Formularname können Sie folgendes übergeben:

  • Name des Formulars (Projektformular oder Tabellenformular)
  • Pfad (in POSIX Syntax) zu einer gültigen .json Datei mit der Beschreibung des Formulars. Siehe Dateipfade für Formulare;
  • Objekt mit der Beschreibung des Formulars. Weitere Informationen dazu finden Sie unter Dynamische Formulare.

Optional können Sie für Formularname über das Objekt FormularDaten bestimmte Eigenschaften übergeben. Alle Eigenschaften von FormularDaten sind dann im Formularkontext über die Funktion Form verfügbar. Übergeben Sie z.B. ein Objekt mit {"version","12"}, können Sie den Wert der Eigenschaft "Version" im Formular mit folgender Anweisung erhalten:

 $v:=Form.version //"12"

Über eine lokale Variable für FormularDaten können Sie Parameter sicher an Ihre Formular übergeben, unabhängig vom aufrufenden Kontext. Insbesondere wenn dasselbe Formular im gleichen Prozess von verschiedenen Stellen aus aufgerufen wird, können Sie durch Aufrufen von Form.myProperty immer auf die spezifischen Werte zugreifen. Da Objekte über Referenz übergeben werden, ist ein weiterer Vorteil, dass ein vom Benutzer im Formular geänderter Wert automatisch im Objekt selbst gesichert wird.
Durch Kombination des Objekts FormularDaten mit der Funktion Form können Sie jederzeit mit sauberem und sicherem Code Parameter an das Formular senden oder Parameter des Formulars ansehen.

Hinweis: Übergeben Sie keinen Parameter FormularDaten bzw. ein undefiniertes Objekt, erstellt DIALOG automatisch ein neues leeres Objekt, das an Formularname angebunden und über die Funktion Form verfügbar ist.

Der Dialog wird vom Benutzer geschlossen, entweder über "Bestätigen" (ausgelöst über die Standardaktion ak accept, die Eingabetaste oder den Befehl ACCEPT) oder "Abbrechen" (ausgelöst über die Standardaktion ak cancel, die Escape-Taste oder den Befehl CANCEL). Bei Bestätigen wird die Systemvariable OK auf 1 gesetzt, bei Abbrechen auf 0.

Übergeben Sie den optionalen Parameter *, wird Formularname geladen und im zuletzt geöffneten Fenster des aktuellen Prozesses angezeigt. Der Befehl beendet seine Ausführung und lässt das aktive Formular auf dem Bildschirm. Dieses Formular reagiert dann normal auf Benutzeraktionen und wird über eine Standardaktion geschlossen oder, wenn die dem Formular zugewiesene Objekt- oder Formularmethode den Befehl CANCEL oder ACCEPT aufruft. Endet der aktuelle Prozess, werden die auf diese Weise erstellten Formulare automatisch so geschlossen, als ob CANCEL aufgerufen worden wäre. Dieser Öffnen-Modus ist besonders hilfreich zum Anzeigen eines Palettenfensters mit einem Dokument und es ist kein weiterer Prozess erforderlich.

Hinweise:

  • Sie können die Syntax DIALOG(form;*) mit dem Befehl CALL FORM kombinieren, um die Kommunikation zwischen den Formularen einzurichten.
  • Sie müssen ein Fenster anlegen, bevor Sie die Anweisung DIALOG(Formular;*) aufrufen; Sie können nicht das aktuelle Dialogfenster im Prozess bzw. das standardmäßig für jeden Prozess erstellte Fenster verwenden. In diesem Fall wird der Fehler 9909 erzeugt.
  • Mit dem Parameter * wird das Fenster automatisch über eine Standardaktion oder Aufrufen des Befehls CANCEL oder ACCEPT geschlossen. Sie müssen das Schließen des Fensters selbst nicht verwalten.

Dieses Beispiel erstellt eine Werkzeugpalette

  `Zeige Werkzeugpalette
 $palette_window:=Open form window("Werkzeuge";Palette form window)
 DIALOG("Werkzeuge";*) `Die Steuerung sofort zurückgeben
  `Zeige Hauptdokumentfenster
 $document_window:=Open form window("Dok";Plain form window)
 DIALOG("Dok")

In einen Eingabeformular zu einer Person lässt sich über die Schaltfläche "Check Children" ein Dialog öffnen, um Name und Alter ihrer Kinder zu überprüfen/ändern:

Hinweis: Das Objektfeld "Children" dient nur dazu, um seine Struktur für dieses Beispiel anzuzeigen.

Im Fenster zur Überprüfing haben Sie den Form Objekteigenschaften Variablen zugewiesen:

Der Code für die Schaltfläche "Check Children" lautet:

 C_LONGINT($win;$n;$i)
 C_BOOLEAN($save)
 ARRAY OBJECT($children;0)
 OB GET ARRAY([Person]Children;"children";$children//die  Collection children erhalten
 $save:=False //die Variable save initialisieren
 
 $n:=Size of array($children)
 If($n>0)
    $win:=Open form window("Edit_Children";Movable form dialog box)
    SET WINDOW TITLE("Check children for "+[Person]Name)
    For($i;1;$n//für jedes Kind
       DIALOG("Edit_Children";$children{$i}) //den mit Werten gefüllten Dialog anzeigen
       If(OK=1) //der Benutzer hat auf OK geklickt
          $save:=True
       End if
    End for
    If($save=True)
       [Person]Children:=[Person]Children //Update des Objektfeldes erzwingen
    End if
    CLOSE WINDOW($win)
 Else
    ALERT("No child to check.")
 End if

Hinweis: Für dieses Beispiel muss die Objektnotation in der Anwendung aktiviert sein (siehe Seite Kompatibilität).

Das Formular zeigt Information zu jedem Kind an:

Werden die Werte bearbeitet und auf die Schaltfläche OK geklickt, wird das Feld aktualisiert (der übergeordnete Datensatz muss anschließend gesichert werden).

Dieses Beispiel verwendet den Pfad eines .json Formulars zum Anzeigen der Datensätze in einer Liste der Angestellten:

 Open form window("/RESOURCES/OutputPersonnel.json";Plain form window)
 ALL RECORDS([Personnel])
 DIALOG("/RESOURCES/OutputPersonnel.json";*)

Das ergibt folgendes Formular:

Dieses Beispiel verwendet eine .json Datei als ein Objekt und ändert ein paar Eigenschaften:

 C_OBJECT($form)
 $form:=JSON Parse(Document to text(Get 4D folder(Current resources folder)+"OutputPersonnel.json"))
 $form.windowTitle:="The Avengers"
 $form.pages[1].objects.logo.picture:="/RESOURCES/Images/Avengers.png"
 $form.pages[1].objects.myListBox.borderStyle:="double"
 Open form window($form;Plain form window)
 DIALOG($form;*)

Das ergibt dieses Formular mit geändertem Titel, Logo und Rahmen:

Bestätigen des Dialogs nach Aufrufen von DIALOG setzt die Systemvariable OK auf 1, Abbrechen setzt sie auf 0.



Siehe auch 

ACCEPT
ADD RECORD
CALL FORM
CANCEL
Form
Open window

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Eingabe
Nummer: 40

Dieser Befehl ändert die Systemvariable OKDieser Befehl ändert die Systemvariable Error

 
SEITENINHALT 
 
GESCHICHTE 

Geändert: 4D v11 SQL
Geändert: 4D v16 R5
Geändert: 4D v16 R6

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)