4D v14.3

Datenbankmethode On Exit

Home

 
4D v14.3
Datenbankmethode On Exit

Datenbankmethode On Exit 


 

Datenbankmethode On Exit  
Dieser Befehl benötigt keine Parameter

  

Die Datenbankmethode On Exit wird einmal aufgerufen, wenn Sie eine Datenbank verlassen.

Dies geschieht in folgenden 4D Umgebungen:

  • 4D im lokalen Modus
  • 4D im remote Modus
  • 4D Anwendung mit integriertem 4D Volume Desktop

Hinweis: Die Datenbankmethode On Exit wird NICHT von 4D Server ausgelöst.

Die Datenbankmethode On Exit wird automatisch von 4D ausgelöst; diese Datenbankmethode können Sie im Gegensatz zu Projektmethoden nicht selbst per Programmierung aufrufen. Sie können auch Unterroutinen verwenden.

Eine Datenbank wird verlassen, wenn folgendes passiert:

  • Der Benutzer wählt in der Designumgebung im Menü Datei/Ablage den Befehl Beenden oder Anwendungsumgebung die Standardaktion Beenden.
  • Ein Aufruf des Befehls QUIT 4D wird ausgelöst
  • Ein 4D Plug-In löst einen Aufruf von QUIT 4D aus

Beim Verlassen der Datenbank führt 4D folgende Aktionen aus:

  • Ist keine Datenbankmethode On Exit vorhanden, beendet 4D ohne Unterscheidung der Reihe nach jeden Prozess. Der Datensatz in Bearbeitung wird gelöscht und nicht gesichert.
  • Ist eine Datenbankmethode On Exit vorhanden, führt 4D diese Methode in einem neu angelegten lokalen Prozess durch. Sie können so via Interprozesskommunikation anderen Prozessen mitteilen, die Ausführung zu beenden. Beachten Sie, dass 4D evtl. beendet wird - die Datenbankmethode On Exit kann zwar alle gewünschten Operationen zum Aufräumen oder Schließen durchführen, aber nicht das Beenden ansich verweigern, und endet so an einem gewissen Punkt.

Die Datenbankmethode On Exit ist der richtige Ort, um:

  • Prozesse zu beenden, die beim Öffnen der Datenbank automatisch starten.
  • Voreinstellungen bzw. Einstellungen (lokal oder auf Festplatte) zu speichern, um sie beim Starten der nächsten Sitzung in der Datenbankmethode On Startup wiederzuverwenden.
  • Andere Aktionen auszuführen,
  • Andere Aktionen auszuführen, die bei jedem Beenden der Datenbank automatisch ablaufen sollen.

Folgendes Beispiel umfasst alle Methoden in der Datenbank zum Verwalten signifikanter Ereignisse während einer Arbeitssitzung und legt eine Beschreibung in ein Textdokument mit Namen “Journal.”

  • Die Datenbankmethode On Startup initialisiert die Interprozessvariable ◊vbQuit4D, die allen Benutzerprozessen mitteilt, ob die Datenbank verlassen wurde. Diese erstellt auch das Journal, falls es noch nicht existiert.
  ` Datenbankmethode On Startup
 C_TEXT(◊vtIPMessage)
 C_BOOLEAN(◊vbQuit4D)
 ◊vbQuit4D:=False
 
 If(Test path name("Journal")#Is a document)
    $vhDocRef:=Create document("Journal")
    If(OK=1)
       CLOSE DOCUMENT($vhDocRef)
    End if
 End if
  • Die Projektmethode WRITE JOURNAL, die von den anderen Methoden als Unterroutine verwendet wird, schreibt die empfangene Information in das Dokument Journal:

  ` Projektmethode WRITE JOURNAL
  ` WRITE JOURNAL (Text)
  ` WRITE JOURNAL (Beschreibung des Ereignisses)
 C_TEXT($1)
 C_TIME($vhDocRef)
 
 While(Semaphore("$Journal"))
    DELAY PROCESS(Current process;1)
 End while
 $vhDocRef:=Append document("Journal")
 If(OK=1)
    PROCESS PROPERTIES(Current process;$vsProcessName;
    $vlState;$vlElapsedTime;$vbVisible)
    SEND PACKET($vhDocRef;String(Current date)+Char(9)
    +String(Current time)+Char(9)
    +String(Current process)+Char(9)+$vsProcessName+
    Char(9)+$1+Char(13))
    CLOSE DOCUMENT($vhDocRef)
 End if
 CLEAR SEMAPHORE("$Journal")
 WRITE JOURNAL("Sitzung beginnen")

Beachten Sie, dass das Dokument jedes Mal geöffnet und geschlossen wird. Außerdem wird eine Semaphore als Zugriffsschutz für das Dokument eingerichtet.—Wir wollen nicht, dass zwei Prozesse gleichzeitig auf das Journal zugreifen können.

  • Die Projektmethode M_ADD_RECORDS wird ausgeführt, wenn in der Anwendungsumgebung der Menübefehl Neuer Datensatz ausgewählt wird:
  ` Projektmethode M_ADD_RECORDS
 SET MENU BAR(1)
 Repeat
    ADD RECORD([Table1];*)
    If(OK=1)
       WRITE JOURNAL("Adding record #"+String(Record number([Table1]))
       +" in Table1")
    End if
 Until((OK=0)|◊vbQuit4D)

Diese Methode wird durchlaufen, bis der Benutzer die Dateneingabe abbricht oder die Datenbank verlässt.

  • Das Eingabeformular für [Table 1] beinhaltet auch die Verwaltung der Ereignisse On Outside Call. So kann selbst ein Prozess Dateneingabe bequem verlassen werden, wobei der Benutzer die gerade eingegebenen Daten sichern oder annullieren kann:
  ` Formularmethode [Table1];"Input"
 Case of
    :(Form event=On Outside Call)
       If(◊vtIPMessage="QUIT")
          CONFIRM("Wollen Sie die Änderungen in diesem Datensatz sichern?")
          If(OK=1)
             ACCEPT
          Else
             CANCEL
          End if
       End if
 End case
  • Die Projektmethode M_QUIT wird ausgeführt, wenn in der Anwendungsumgebung im Menü Datei/Ablage der Befehl Beenden aufgerufen wird:
  ` M_QUIT
 $vlProcessID:=New process("DO_QUIT";32*1024;"$DO_QUIT")

Die Methode arbeitet mit einem Trick. Beim Aufrufen von QUIT 4D wirkt sich der Befehl sofort aus. Der hervorrufende Prozess befindet sich in Stopposition, bis die Datenbank verlassen wird. Da dieser Prozess einer der Prozesse sein kann, in dem Dateneingabe stattfindet, erfolgt der Aufruf von QUIT 4D in einem lokalen Prozess, der nur für diesen Zweck startet:

  ` Projektmethode DO_QUIT
 CONFIRM("Wollen Sie wirklich beenden?")
 If(OK=1)
    WRITE JOURNAL("Datenbank verlassen")
    QUIT 4D
  ` QUIT 4D wirkt sich sofort aus, alle nachfolgenden Programmierzeilen
  ` Werden nicht mehr ausgeführt
 End if
  • Hier folgt nun die Datenbankmethode On Exit, die alle offenen Benutzerprozessen auffordert, nun zu beenden. Sie setzt ◊vbQuit4D auf Wahr und sendet Interprozessmeldungen an die Benutzerprozesse, die Dateneingabe ausführen:
  ` Datenbankmethode On Exit
 ◊vbQuit4D:=True
 Repeat
    $vbDone:=True
    For($vlProcess;1;Count tasks)
       PROCESS PROPERTIES($vlProcess;$vsProcessName;$vlState;$vlElapsedTime;$vbVisible)
       If(((($vsProcessName="ML_@")|($vsProcessName="M_@")))&($vlState>=0))
          $vbDone:=False
          ◊vtIPMessage:="QUIT"
          BRING TO FRONT($vlProcess)
          CALL PROCESS($vlProcess)
          $vhStart:=Current time
          Repeat
             DELAY PROCESS(Current process;60)
          Until((Process state($vlProcess)<0)|((Current time-$vhStart)>=?00:01:00?))
       End if
    End for
 Until($vbDone)
 WRITE JOURNAL("Sitzung beenden")

Hinweis: Prozesse, die mit "ML_..." oder "M_..." beginnen, werden von Menübefehlen mit der Eigenschaft Starte Neuen Prozeß gestartet. Das sind in diesem Beispiel die Prozesse, die bei Aufrufen des Menübefehls Neuer Datensatz starten.

Mit dem Test (Current time-$vhStart)>=?00:01:00? kann die Datenbankmethode die Wiederholungsschleife “Warte auf anderen Prozess” verlassen, wenn der andere Prozess nicht sofort aktiv wird.

  • Hier ist ein typisches Beispiel für ein Journal, das die Datenbank anlegt:
2.6.9715:47:251HauptprozessSitzung beginnt
2.6.9715:55:435ML_1Datensatz #23 in Tab 1 hinzugefügt
2.6.9715:55:465ML_1Datensatz #24 in Tab 1 hinzugefügt
2.6.9715:55:546$DO_QUITDatenbank verlassen
2.6.9715:55:587$xxSitzung beendet

Hinweis: $xx ist der Name des lokalen Prozesses, den 4D zur Ausführung von Datenbankmethode On Exit startet.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Datenbankmethoden

 
GESCHICHTE 

Erstellt:

 
SIEHE AUCH 

Datenbankmethode On Startup
QUIT 4D

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v11 SQL Release 6)
4D Programmiersprache ( 4D v14 R3)
4D Programmiersprache ( 4D v12.4)
4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)
4D Programmiersprache ( 4D v14 R4)