Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
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:
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:
Beim Verlassen der Anwendung führt 4D folgende Aktionen aus:
Wenn 4D kurz vor der Beendigung steht, wird das Programm:
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:
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")
// 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
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)))  // 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
Produkt: 4D
Thema: Datenbankmethoden
Nummer:
905252
Erstellt:
4D Programmiersprache ( 4D v20 R7)