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

Home

 
4D v20 R7
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 Anwendung 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 auf 4D Server ausgelöst. Sie sollten in diesem Zusammenhang Datenbankmethode On Server Shutdown verwenden. 

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 Anwendung 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 Anwendung 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 abgebrochen und nicht gesichert.
  • Ist eine Datenbankmethode On Exit vorhanden, führt 4D diese Methode in einem neu angelegten lokalen Prozess durch. 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.

Wenn 4D kurz vor der Beendigung steht, wird das Programm:

  • fordert laufende Prozesse auf, ihre Ausführung so bald wie möglich abzubrechen (wird nur bei Prozessen berücksichtigt, die 4D-Code ausführen)
  • setzt ihr 'Prozess abgebrochen'-Flag
  • weckt Prozesse auf, die durch DELAY PROCESS oder andere Mittel verzögert wurden.

4D setzt die Iteration von Prozessen fort, solange ein Prozess noch aktiv ist, und zwar für eine maximale Dauer von 13 Sekunden. Um auf eine Quit-Aktion zu reagieren, empfehlen wir, ein Flag (z.B. einen Eintrag im Storage Objekt) im Datenbankmethode On Exit oder in Ihrer eigenen Quit-Methode zu setzen. Es könnte sinnvoll sein, eine Schleife in dieser Methode zu bilden (max. 10 Sekunden), um den laufenden Prozessen Zeit zu geben, zu reagieren und sich selbst zu beenden. Es wird nicht empfohlen, länger als 10 Sekunden zu warten, um zu vermeiden, dass 4D den Prozess oder das Betriebssystem die gesamte Anwendung beendet.

Die Datenbankmethode On Exit ist der richtige Ort, um:

  • Voreinstellungen bzw. Einstellungen (lokal auf der Festplatte) zu speichern, um sie beim Starten der nächsten Sitzung in der wiederzuverwenden.
  • Andere Aktionen auszuführen, die bei jedem Beenden der Datenbank automatisch ablaufen sollen (ohne Datenbank-Zugriffe).

Hinweis: Beachten Sie, dass die Datenbankmethode On Exit ein lokaler/Client Prozess ist, d.h. er kann nicht auf die Datendatei zugreifen. Wenn also die Datenbankmethode On Exit eine Suche oder Sortierung ausführt, wird ein 4D Client, der gerade beendet, eingefroren und nicht abgeschlossen. Müssen Sie auf Daten zugreifen, während ein Client die Anwendung verlässt, erstellen Sie in der Datenbankmethode On Exit einen neuen globalen Prozess, der auf die Datendatei zugreifen kann. Stellen Sie in diesem Fall sicher, dass der neue Prozess korrekt abgeschlossen ist, bevor die Datenbankmethode On Exit endet, z.B. über Interprozessvariablen.

Hinweis: In einer Client/Server-Umgebung verhält sich Datenbankmethode On Exit unterschiedlich. Das hängt davon ab, ob der Benutzer manuell beendet (über den Menübefehl Beenden oder Aufrufen des Befehls QUIT 4D) oder ob der 4D Server abschaltet, was alle Clients zum Beenden zwingt.
Schaltet 4D Server ab und bietet eine Zeitspanne zum Beenden an (z.B. 10 Minuten), erscheint auf jedem angemeldeten Client eine entsprechende Meldung. Beendet der Benutzer innerhalb dieses Zeitrahmens, wird die Datenbankmethode On Exit normal ausgeführt. Dagegen wird in anderen Fällen (der Benutzer antwortet nicht innerhalb der Zeit, der Server verlangt das sofortige Beenden oder der Client wird manuell vom Administator abgemeldet) die Datenbankmethode On Exit zeitgleich mit dem Schließen der Verbindung zum Server ausgeführt. Dann kann der Code in der Datenbankmethode On Exit keinen anderen lokalen oder serverseitigen Prozess starten und nicht abwarten, dass andere Prozesse abbrechen (diese können auch nicht mehr auf den Server zugreifen). Solche Versuche generieren einen Netzwerkfehler (10001 oder 10002), da die Verbindung zum Server bereits geschlossen ist.

Das folgende Beispiel zeigt einen typischen Fall, in dem Sie einen oder mehrere Hintergrundprozesse starten, die regelmäßige Aufgaben erledigen, die endlos laufen, im Datenbankmethode On Startup (oder im Datenbankmethode On Server Startup). Ein Flag im Storage-Objekt der Anwendung wird verwendet, um ihnen mitzuteilen, dass sie beendet werden sollen - und um zu überprüfen, ob sie beendet wurden.

 Use(Storage)
    Storage.global:=New shared object("ExitNow";False)
 End use
 $p:=New process("Serverjob";0;"Background job#1")
 $p1:=New process("Check_Invoices";0;"Background job#2")

  • Hier ist ein Beispiel für eine solche Hintergrundmethode:

  // regelmäßige Hintergrundaufgaben auf dem Server ausführen
 While(Not(Bool(Storage.global.ExitNow)))
  // Buchhaltungsaufträge ausführen, Daten berechnen, etc.
  // ...
    DELAY PROCESS(Current process;60*60) //eine Minute lang schlafen, dann Schleife wiederholen
 End while

  • In der Datenbankmethode On Exit:

 Use(Storage.global)
    Storage.global.ExitNow:=True //alle Hintergrundarbeiter auffordern zu kündigen
 End use
 
 $time:=Current time
 $finished:=False
 While((($time+10)>(Current time+0))&(Not($finished)))&NBSP// maximal 10 Sekunden
    $list:=Get process activity(Processes only// Liste aller Prozesse abrufen
    $sublist:=$list.processes.query("name='Background job@' and state >=0") //Läuft noch ein Hintergrundjob?
    $finished:=($sublist.length=0)
    If($sublist.length>0)
       For each($job;$sublist)
          RESUME PROCESS($job.number) //Sicherstellen, dass alle Prozesse wach sind
       End for each
    End if
 End while



Siehe auch 

Datenbankmethode On Startup
QUIT 4D

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Datenbankmethoden
Nummer: 905252

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt:

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)