4D v14.3Datenbankmethode On Exit |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
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:
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:
Beim Verlassen der Datenbank führt 4D folgende Aktionen aus:
Die Datenbankmethode On Exit ist der richtige Ort, um:
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.”
` 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
` 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.
` 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.
` 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
` 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
` 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.
2.6.97 | 15:47:25 | 1 | Hauptprozess | Sitzung beginnt |
2.6.97 | 15:55:43 | 5 | ML_1 | Datensatz #23 in Tab 1 hinzugefügt |
2.6.97 | 15:55:46 | 5 | ML_1 | Datensatz #24 in Tab 1 hinzugefügt |
2.6.97 | 15:55:54 | 6 | $DO_QUIT | Datenbank verlassen |
2.6.97 | 15:55:58 | 7 | $xx | Sitzung beendet |
Hinweis: $xx ist der Name des lokalen Prozesses, den 4D zur Ausführung von Datenbankmethode On Exit startet.
Produkt: 4D
Thema: Datenbankmethoden
Erstellt:
Datenbankmethode On Startup
QUIT 4D
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)