4D v16Service mit Serverprozeduren (Beispiel) |
||||||||||
|
4D v16
Service mit Serverprozeduren (Beispiel)
Service mit Serverprozeduren (Beispiel)
Im Beispiel aus dem vorigen Abschnitt Import mit Serverprozeduren (Beispiel) startet oder endet eine Serverprozedur immer, wenn ein Datenimport angefordert wird. In diesem Beispiel startet eine Serverprozedur automatisch beim Starten der Serverdatenbank und kann von jedem remote 4D, der sich an die Datenbank anmeldet, beliebig beendet oder wieder gestartet werden. Sobald die Serverprozedur läuft, kann sie asynchron auf die verschiedenen Anfragen antworten, welche die an die Datenbank angeschlossenen Clients senden. Der vorige Abschnitt zeigt, wie Sie einen in 4D Server bestehenden Service zur Optimierung von Operationen integrieren können. Dieser Abschnitt erläutert, wie Sie neue Services integrieren können, die für alle angemeldeten Client-Rechner verfügbar sind. Sie können das Beispiel auch als Vorlage zum Einrichten eigener Services verwenden. Die Serverprozedur wird automatisch gestartet mit der Datenbankmethode On Server Startup: ` Datenbankmethode On Server Startup Da die Datenbankmethode On Server Startup die Projektmethode SP SERVICES als Serverprozedur startet, läuft sie, sobald die Datenbank mit 4D Server gestartet wird, unabhängig davon, ob derzeit Clients an die Server-Datenbank angemeldet sind. Das hier abgebildete Verwaltungsfenster von 4D Server zeigt die aktive Serverprozedur, ohne dass ein Client angemeldet ist. Die Projektmethode START SP SERVICES sieht folgendermaßen aus: ` Projektmethode START SP SERVICES Da die Funktion Execute on server wie New process arbeitet, wenn sie auf dem Server-Rechner aufgerufen wird, kann auf dem Server-Rechner bzw. auf jedem Client-Rechner dieselbe Methode (START SP SERVICES) verwendet werden, um die Methode SP SERVICES als Serverprozedur auf dem Server-Rechner aufzurufen. Die Projektmethode STOP SP SERVICES stoppt die Projektmethode SP SERVICES ` Projektmethode STOP SP SERVICES Startet die Projektmethode SP SERVICES, setzt sie die Prozessvariable vbStopSPServices auf Falsch und durchläuft die Schleife, bis diese Variable vom Typ Boolean den Wert Wahr annimmt. Mit dem Befehl SET PROCESS VARIABLE lässt sich in jedem Benutzerprozess auf dem Server-Rechner bzw. auf jedem Client-Rechner der Wert der Variablen vbStopSPServices verändern und so die Serverprozedur nach eigenen Wünschen stoppen. Die Serverprozedur muss Anfragen des Clients jederzeit und in beliebiger Reihenfolge asynchron empfangen und beantworten können. Das ist am einfachsten mit einer Tabelle möglich. Die Tabelle [SP Anfragen] enthält folgende Datenfelder:
Hinweis: Die Werte wurden willkürlich für dieses Beispiel gewählt, sie sind nicht von 4D vorgegeben.
Die Kommunikation zwischen einem Client-Prozess und einer Serverprozedur lässt sich mit den Befehlen GET PROCESS VARIABLE, SET PROCESS VARIABLE und VARIABLE TO VARIABLE herstellen. Diese Befehle werden z. B. im Abschnitt Import mit Serverprozeduren (Beispiel) und in der Projektmethode STOP SP SERVICES verwendet. Hier muss das System jedoch zulassen, dass die Serverprozedur variable Datenmengen empfängt und zurücksendet. Sie könnten zwar auch Arrays, einschließlich Arrays vom Typ Text und Bild verwenden, zwei Gründe sprechen jedoch für die Verwendung einer Tabelle:
Die Projektmethode Client post request ist eine generische Methode zum Senden einer Anfrage: ` Projektmethode Client post request Die Methode gibt die Nummer der Anfrage zurück. Die Funktion Sequence number stellt ihre Einzigartigkeit sicher. Wurde der Datensatz in der Datenbank [SP Anfragen] hinzugefügt, kann der Client das Datenfeld [SP Anfragen]Anf_Status befragen und abwarten, bis die Serverprozedur die Anfragen vollständig bearbeitet hat. Die Projektmethode Client get result ist eine generische Methode zum Abfragen des Status der Anfrage. Wie bereits erwähnt, weiss der Client, sobald das Datenfeld [SP Anfragen]Anf_Status einen anderen Wert als 1 hat, dass die Serverprozedur die Anfrage bearbeitet hat (erfolgreich oder nicht erfolgreich). ` Projektmethode Client get result Hat die Serverprozedur die Anfrage erfolgreich bearbeitet, kopiert die Methode das Ergebnis (falls vorhanden) aus dem Datensatz in das BLOB, dessen Zeiger als Parameter übergeben wurde. Die aufrufende Methode analysiert und verwendet dann die BLOB Daten je nach Art der Anfrage. Beachten Sie, dass der Client für das Löschen des Datensatzes [SP Anfragen] zuständig ist, sobald die Anfrage vollständig bearbeitet ist. Die kleine Projektmethode WAITING LOOP durchläuft die Schleife, bis eine Anzahl Ticks vergangen ist: `Projektmethode WAITING LOOP Zu Erinnerung: Der Befehl DELAY PROCESS hat im Anwendungsprozess keine Auswirkung. Mit der Projektmethode WAITING LOOP wartet der Prozess die erforderliche Zeitspanne ab, selbst wenn die Anfrage von einem Benutzerprozess auf einem Client-Rechner ausging. Die Projektmethode SP SERVICES läuft als Serverprozedur auf dem Server-Rechner. Der gesamte Aufbau dieser Methode, hier gezeigt in Pseudocode, ist denkbar einfach: Initialisiere eine Variable “stop” Hier ist der echte Source Code: ` Projektmethode SP SERVICES Die Projektmethode SP SERVICES kann als Vorlage zur Integration neuer Services in einer Datenbank dienen. In diesem Abschnitt betrachten wir näher die Unterroutinen SP DO SERVER INFORMATION und SP DO VOLUME LIST. Die Unterroutine SP DO BROWSE DIRECTORY, die den Parameter übernimmt, den der Client im Datenfeld [SP Anfragen]Anf_Parameter übersendet, wird hier nicht erläutert. Die Projektmethode SP SERVICES ruft je nach Anfragetyp eine Unterrroutine auf, welche die resultierenden Daten im Datenfeld [SP Anfragen]Anf_Daten speichert. SP SERVICES sichert den Datensatz und ändert den Status der Anfrage. Hier folgt die Unterroutine SP DO SERVER INFORMATION. Sie speichert die server-bezogene Information im BLOB. Eine andere Projektmethode entnimmt die BLOB Daten entsprechend auf dem Client-Rechner. ` Projektmethode SP DO SERVER INFORMATION Hier folgt die Unterroutine SP DO VOLUME LIST. Sie speichert die volume-bezogene Information im BLOB. Eine andere Projektmethode entnimmt die BLOB Daten entsprechend auf dem Client-Rechner. ` Projektmethode SP DO VOLUME LIST Mit den generischen Projektmethoden Client post request und Client get result zeigt die Projektmethode M_SERVER_INFORMATION die Serverinformation an, die die Serverprozedur auf dem Client-Rechner zurückgibt. Diese Methode kann einem Menübefehl zugeordnet werden oder z.B. über eine Objektmethode für eine Schaltfläche aufgerufen werden: ` M_SERVER_INFORMATION Hier ist das Formular [SP Anfragen];"SERVER INFORMATION" in der Ausführung: Mit den generischen Projektmethoden Client post request und Client get result zeigt die Projektmethode M_SERVER_VOLUMES auf dem Client-Rechner die Laufwerke des Server-Rechners an, die die Serverprozedur zurückgibt. Diese Methode kann einem Menübefehl zugeordnet werden oder z.B. über eine Objektmethode für eine Schaltfläche aufgerufen werden: ` M_SERVER_VOLUMES Hier ist das Formular [SP Anfragen];"LAUFWERK" in der Ausführung:
Siehe auch
|
EIGENSCHAFTEN
Produkt: 4D
GESCHICHTE
ARTIKELVERWENDUNG
4D Server Handbuch ( 4D v16) |
||||||||