4D v16

Datenbankmethode On Server Open Connection

Home

 
4D v16
Datenbankmethode On Server Open Connection

Datenbankmethode On Server Open Connection 


 

$1, $2, $3 -> Datenbankmethode On Server Open Connection -> $0 
Parameter Typ   Beschreibung
$1  Lange Ganzzahl in ID Nummer für Benutzer, die 4D Server intern zum Identifizieren der Anwender verwendet.
$2  Lange Ganzzahl in ID Nummer für Verbindung, die 4D Server intern zum Identifizieren einer Verbindung verwendet.
$3  Lange Ganzzahl in Obsolet: Gibt immer 0 zurück, muss aber deklariert werden.
$0  Lange Ganzzahl in 0 oder weggelassen = Verbindung akzeptiert; anderer Wert = Verbindung verweigert

Die Datenbankmethode On Server Open Connection wird einmal auf dem Server-Rechner aufgerufen, wenn sich ein remote 4D anmeldet. Diese Datenbankmethode wird ausschließlich in der 4D Server Umgebung aufgerufen.

Die Datenbankmethode On Server Open Connection wird immer aufgerufen, wenn:

  • Ein remote 4D sich anmeldet (weil der Prozess Anwendung startet)
  • Ein remote 4D die Designumgebung öffnet (weil der Prozess Design startet)
  • Ein remote 4D einen globalen Prozess startet (Name beginnt nicht mit $), der das Erstellen eines kooperativen Prozesses auf dem Server erfordert (*). Dieser Prozess lässt sich über die Funktion New process, über einen Menübefehl oder das Dialogfenster Methode ausführen erstellen.

Bei den Aktionen mit remote 4D starten verschiedene Prozesse — Einer auf dem Client-Rechner und ein bzw. bei Bedarf zwei weitere auf dem Server-Rechner. Auf dem Client-Rechner führt der Prozess Code aus und sendet Anfragen an 4D Server. Auf dem Server-Rechner verwaltet der 4D Client-Prozess (präemptiver Prozess) die Datenbankumgebung für den Client-Prozess (z.B. aktuelle Auswahl und Datensatz sperren für Benutzerprozesse) und beantwortet Anfragen, die vom Prozess auf dem Client-Rechner gesendet wurden. Der 4D Client Datenbankprozess (kooperativer Prozess) ist für die Überwachung des entsprechenden 4D Client Prozesses zuständig.

(*) Ab 4D v13 werden die Server Prozesse (ein präemptiver Prozess für den Zugriff auf die Datenbank-Engine und ein kooperativer Prozess für den Zugriff auf die Programmiersprache) aus Optimierungsgründen nur erstellt, wenn sie beim Ausführen des Code auf Client-Seite notwendig sind. Hier ein Beispiel für eine 4D Code Sequenz, die in einem neuen Client Prozess läuft:

  // globaler Prozess beginnt ohne einen neuen Prozess auf dem Server, wie ein lokaler Prozess.
 CREATE RECORD([Table_1])
 [Table_1])field1_1:="Hallo Welt"
 SAVE RECORD([Table_1]// erstellt hier präemptiven Prozess auf Server
 $serverTime:=Current time(*) // erstellt hier kooperativen Prozess auf Server
  //Aufruf von On Server Open Connection

Wichtig: Web-Verbindungen und SQL-Verbindungen lösen nicht die Datenbankmethode On Server Open Connection aus. Meldet sich ein Web Browser an 4D Server an, startet die Datenbankmethode On Web Authentication - sofern vorhanden, und/oder die Datenbankmethode On Web Connection. Empfängt 4D Server eine SQL Anfrage, wird die Datenbankmethode On SQL Authentication - sofern vorhanden, aufgerufen.

Wichtig: Startet eine Serverprozedur, wird NICHT die Datenbankmethode On Server Open Connection ausgelöst. Serverprozeduren sind Server- und keine Client-Prozesse. Sie führen Code auf dem Server-Rechner aus, beantworten jedoch keine Anfragen von remote 4D oder anderen Clients an 4D Server.

Die Datenbankmethode On Server Open Connection wird auf dem 4D Server-Rechner innerhalb des 4D Client-Prozesses ausgeführt, der die Anweisung gibt, die Methode aufzurufen.

Beispiel: Meldet sich ein remote 4D an eine interpretierte Datenbank auf 4D Server an, starten standardmäßig die Prozesse Benutzer, Design und Registrierung für diesen Client. Die Datenbankmethode On Server Open Connection wird also dreimal ausgeführt — einmal innerhalb des Anwendungsprozesses, ein zweites Mal innerhalb des Client Registrierungsprozesses und ein drittes Mal innerhalb des Prozesses Design. Sind diese Prozesse jeweils der sechste, siebte und achte gestartete Prozess auf dem Server-Rechner und rufen Sie Current process innerhalb der Datenbankmethode On Server Open Connection auf, gibt die Funktion Current process jeweils 6, 7 und 8 zurück.

Beachten Sie, dass die Datenbankmethode On Server Open Connection auf dem Server-Rechner ausgeführt wird. Sie läuft im 4D Client Prozess ab, der auf dem Server läuft, unabhängig vom Prozess auf der Client-Seite. Außerdem ist der 4D Client Prozess in dem Moment, wo die Methode ausgelöst wird, noch nicht benannt. (Der Befehl PROCESS PROPERTIES gibt zu diesem Zeitpunkt nicht den Namen des 4D Client Prozesses zurück).

Die Datenbankmethode On Server Open Connection hat keinen Zugriff auf die Tabelle Prozessvariablen des Prozesses auf der Client-Seite, da diese Tabelle auf dem Client-Rechner und nicht auf dem Server-Rechner liegt.

Greift die Datenbankmethode On Server Open Connection auf eine Prozessvariable zu, läuft sie in einer eigenen und dynamisch erstellten Tabelle Prozessvariablen für den 4D Client Prozess ab.

4D Server übergibt der Datenbankmethode On Server Open Connection drei Parameter vom Typ Lange Ganzzahl und erwartet ein Ergebnis vom Typ Lange Ganzzahl. Die Methode muss deshalb ausdrücklich mit drei Parametern vom Typ Lange Ganzzahl und mit dem Funktionsergebnis vom Typ Lange Ganzzahl deklariert werden:

 C_LONGINT($0;$1;$2;$3)

Geben Sie keinen Wert in $0 zurück, d.h. die Variable ist undefiniert oder gegen Null initialisiert, nimmt 4D Server an, dass die Datenbankmethode die Verbindung akzeptiert. Akzeptieren Sie die Verbindung nicht, geben Sie in $0 einen Wert zurück, der nicht Null ist.

Die drei Parameter für die Datenbankmethode geben folgende Informationen zurück:

ParameterBeschreibung
$1ID Nummer für Benutzer, die 4D Server intern zur Identifikation von Benutzern verwendet.
$2ID Nummer für Verbindung, die 4D Server intern zur Identifikation einer Verbindung verwendet.
$3Obsolet: Gibt immer 0 zurück, muss aber deklariert werden.

Diese ID Nummern sind nicht direkt als Informationsquellen einsetzbar, z.B. um sie in einem 4D Befehl als Parameter zu übergeben. Sie ermöglichen jedoch, einen 4D Client Prozess zwischen der Datenbankmethode On Server Open Connection und der Datenbankmethode On Server Close Connection eindeutig zu identifizieren. Die Kombination dieser Werte ist zu jedem Moment einer Server Sitzung einmalig. Ist diese Information in einer Interprozess-Array bzw. Tabelle gespeichert, können beide Datenbankmethoden Informationen austauschen. Im Beispiel am Ende dieses Abschnitts verwenden die beiden Datenbankmethoden diese Information, um Datum und Uhrzeit für Beginn und Ende einer Verbindung zum gleichen Datensatz einer Tabelle zu speichern.

Dieses Beispiel zeigt, wie mit der Datenbankmethode On Server Open Connection und der Datenbankmethode On Server Close Connection in der Datenbank ein Logbuch der Verbindung verwaltet wird. Die Tabelle [Server Log] wird zum Auffinden der Verbindungsprozesse verwendet.

Die hier gespeicherte Information wird von der Datenbankmethode On Server Open Connection und der Datenbankmethode On Server Close Connection wie folgt verwaltet:

  ` Datenbankmethode On Server Open Connection
 C_LONGINT($0;$1;$2;$3)
  ` Erstelle eine Datensatz [Logbuch]
 CREATE RECORD([Server_Log])
 [Server_Log]Log_Nr:=Sequence number([Server_Log])
  ` Sichere Anmeldedatum und Anmeldezeit
 [Server_Log]Anmeldedatum:=Current date
 [Server_Log]Anmeldezeit:=Current time
  ` Sichere die Verbindungsinformation
 [Server_Log]Benutzer_Nr:=$1
 [Server_Log]Verbindung_Nr:=$2
 SAVE RECORD([Server_Log])
  ` Gibt keinen Fehler zurück, so dass die Verbindung weiterlaufen kann
 $0:=0
 
  ` Datenbankmethode On Server Close Connection
 C_LONGINT($1;$2;$3)
  ` Finde wieder Datensatz [Server_Log]
 QUERY([Server_Log];[Server_Log]Benutzer_Nr=$1;*)
 QUERY([Server_Log]; & ;[Server_Log]Verbindung_Nr=$2;*)
 QUERY([Server_Log]; & ;[Server_Log]Prozess_Nr=0)
  ` Sichere Abmeldedatum und -zeit
 [Server_Log]Abmeldedatum:=Current date
 [Server_Log]Abmeldezeit:=Current time
  ` Sichere die Prozessinformation
 [Server_Log]Prozess_Nr:=Current process
 PROCESS PROPERTIES([Server_Log]Prozess_Nr;$vsProzName;$vlProzStatus;$vlProzZeit)
 [Server_Log]Prozessname:=$vsProzName
 SAVE RECORD([Server_Log])

Nachfolgend sehen Sie einige Einträge in [Server_Log] mit mehreren remote Anbindungen:

Im folgenden Beispiel kann zwischen 2 und 4 Uhr a.m. keine neue Verbindung hergestellt werden:

  ` Datenbankmethode On Server Open Connection
 C_LONGINT($0;$1;$2;$3)
 
 If((?02:00:00?<=Current time)&(Current time<?04:00:00?))
    $0:=22000
 Else
    $0:=0
 End if



Siehe auch 

Datenbankmethode On Server Close Connection

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Datenbankmethoden

 
GESCHICHTE 

Geändert: 4D v13

 
ARTIKELVERWENDUNG

4D Server Handbuch ( 4D v16)