Version 2004 (Geändert)
Was ist eine SQL Serverprozedur?
Der Ausdruck Serverprozedur stammt aus der Server-Welt, die auf SQL basiert. Sendet eine Arbeitsstation eine Anfrage an einen SQL Server, sendet sie die Anfrage als Volltext in SQL Sprache an diesen Server. Die Anfrage wird vor der Ausführung auf dem SQL Server analysiert und interpretiert. Ist der Quellcode umfangreich und wird die Anfrage während einer Sitzung mehrere Male gesendet, beansprucht das natürlich viel Zeit für die Übertragung über das Netzwerk und die stets neue Analyse und Interpretation.
Deshalb sollte ein Weg gefunden werden, diese Anfrage zuerst über das Netzwerk zu senden, zu analysieren und zu interpretieren und nur noch auszuführen, wenn sie von der Arbeitsstation gesendet wird. Die Lösung war, den Quellcode der Anfrage (mit anderen Worten eine Prozedur) auf der Server-Seite zu lassen; die Arbeitsstation sendet dann als Anfrage nur den Namen dieser Prozedur. Da diese Prozedur auf dem Server gespeichert wird, nennen wir solche Prozeduren "Serverprozeduren".
Beachten Sie, dass eine Serverprozedur, die auf SQL basiert, Parameter von einer Arbeitsstation empfangen kann, die damit verbundenen Tasks synchron oder asynchron ausführt und evtl. ein Ergebnis an die Arbeitsstation zurückgibt. Löst eine Arbeitsstation die Ausführung einer Serverprozedur aus, überlässt die Station die Ausführung von Code bis zu einem gewissen Maß dem Server-Rechner.
Was ist eine 4D Server Serverprozedur?
Selbst wenn wir den gängigen Namen benutzen, bieten Serverprozeduren unter 4D Server weit mehr als reguläre Serverprozeduren.
Mit einer 4D Funktion, wie z.B. New process können Sie einen Benutzerprozess starten, in dem eine Methode abläuft. Diese Methode heißt Prozessmethode. Weitere Informationen dazu finden Sie im Handbuch 4th Dimension Programmiersprache im Abschnitt Projektmethoden.
Dasselbe können Sie mit 4D Server auf einer Arbeitsstation durchführen. Sie können zusätzlich mit der Funktion Execute on server auf dem Server-Rechner einen Benutzerprozess starten, in dem eine Methode abläuft. Diese Methode heißt Serverprozedur. Der Prozess, der auf dem Server-Rechner gestartet wird, heißt ebenfalls Serverprozedur.
Wichtig: Der Hauptunterschied zwischen einer Serverprozedur, die auf SQL-basiert und einer Serverprozedur unter 4D Server ist, dass im ersten Fall eine SQL Prozedur, im zweiten Fall ein 4D Prozess abläuft.
Architektur der 4D Serverprozeduren
Eine Serverprozedur hat wie ein normaler Prozess eine eigene Umgebung:
Aktuelle Auswahl pro Tabelle: Jede Serverprozedur hat eine eigene aktuelle Auswahl. Eine Tabelle kann in verschiedenen Serverprozeduren auch verschiedene Auswahlen haben.
Aktueller Datensatz pro Tabelle: Jede Tabelle kann in jeder Serverprozedur einen anderen aktuellen Datensatz haben.
Variablen: Jede Serverprozedur hat ihre eigenen Prozessvariablen. Prozessvariablen werden nur im Bereich der jeweiligen Serverprozedur erkannt.
Standardtabelle: Jede Serverprozedur hat eine eigene Standardtabelle.
Prozessmengen: Jede Serverprozedur hat ihre eigenen Prozessmengen.
On Error Call: Jede Serverprozedur hat ihre eigene Methode On Error Call.
Debugger Fenster: Jede Serverprozedur kann ein eigenes Debugger Fenster haben.
Eine Serverprozedur kann in der Benutzeroberfläche Fenster öffnen und Daten anzeigen (z.B. DISPLAY RECORD). Sie kann jedoch im Gegensatz zu Benutzerprozessen auf der Arbeitsstation keine Dateneingabe auslösen (z.B. ADD RECORD), da es keinen Eingabe-Kernel auf dem Server-Rechner gibt.
Sie können soviele Serverprozeduren starten wie es Hardware und Speicher des Systems zulassen. Im Grunde genommen antwortet der 4D Server-Rechner nicht nur auf Anfragen der Arbeitsstation und von Web Browsern, er führt auch Prozesse aus, die mit anderen Prozessen interagieren, die auf dem Server-Rechner und Client-Rechnern laufen.
Ebenso wie 4th Dimension und 4D Client eine Multi-Tasking Umgebung für Benutzerprozesse auf einer Arbeitsstation bieten, bietet 4D Server eine Multi-Tasking Umgebung für Serverprozeduren. 4D Server verwaltet zum Beispiel eine Tabelle mit Interprozessvariablen, die Serverprozeduren für die Interprozesskommunikation benutzen können.
Was macht eine Serverprozedur?
Fast alles, was im Handbuch 4th Dimension Programmiersprache über die Funktionsweise von Prozessen und Befehlen beschrieben wird, gilt auch für Serverprozeduren. Davon ausgenommen sind die Eingabe von Daten und einige Druckoptionen.
Eine Serverprozedur kann Datensätze hinzufügen, suchen, sortieren, aktualisieren und löschen. Sie kann Mengen und Auswahlen verwenden, auf Dokumente auf der Festplatte zugreifen, mit BLOBs u.v.m. arbeiten. Der einzige Unterschied besteht darin, dass etwas nicht auf dem 4D Client-Rechner, sondern auf dem Server-Rechner ausgeführt wird.
Ein großer Vorteil ist, dass eine Serverprozedur lokal auf dem Server-Rechner ausgeführt wird, also dort, wo auch die Datenbank-Engine liegt. Der Befehl APPLY TO SELECTION ist innerhalb einer Serverprozedur effizienter als über das Netzwerk. Das Beispiel im Abschnitt Import mit Serverprozeduren (Beispiel) zeigt, wie stark sich die Leistung über clever eingesetzte Serverprozeduren optimieren lässt.
Der wichtigste Vorteil von Serverprozeduren sind jedoch die neuen Möglichkeiten, die sich für 4D Server ergeben. Mit Serverprozeduren können Sie Ihre eigenen 4D Server Dienste einrichten. Ihrer Phantasie sind keine Grenzen gesetzt. Das Beispiel im Abschnitt Service mit Serverprozeduren (Beispiel) zeigt eine Serverprozedur, die Clients mit Information über 4D Server bzw. den Server-Rechner ausstattet. Sie können z.B. die Laufwerke des Server-Rechners auflisten. Dieses Beispiel lässt sich leicht erweitern, so dass ein Client auch Information über ein Verzeichnis oder ein Dokument erhält.
Auf dem Server nicht zulässige Befehle
Enthält eine Serverprozedur einen dieser Befehle, erscheint eine Meldung, dass der Befehl nicht auf 4D Server ausgeführt werden kann. Der Fehler #67 wird zurückgegeben. Sie können ihn mit dem Befehl ON ERR CALL verwalten.
Auf dem Server ungeeignete Befehle
Enthält eine Serverprozedur einen dieser Befehle, kann der Server blockiert werden. Es kann ein Fehler erzeugt werden oder nicht das gewünschte Ergebnis eintreten. Sie erhalten keine spezifische Fehlermeldung. Vermeiden Sie deshalb diese Befehle in Serverprozeduren.
BLOB to list
Create document (1)
EXPORT DATA (1)
IMPORT DATA (1)
Open document (1)
ORDER BY (2)
PRINT RECORD (2)
PRINT SELECTION (2)
QUERY BY FORMULA (2)
QUERY (2)
SELECT LIST ITEMS BY REFERENCE
(1) Nur wenn der erste Parameter ein leerer String ist.
(2) Nur wenn die Syntax die Anzeige eines Dialogfensters auslöst, z.B. SORT ([Tabelle]).
Befehle ohne Auswirkung auf dem Server
Diese Befehle haben keine Auswirkung in Serverprozeduren auf dem Server. Sie erhalten keine Fehlermeldung.
Eine Serverprozedur starten
Mit 4D Client können Sie eine Serverprozedur im Dialogfenster Methode ausführen manuell starten:
Sie können sie auf 4D Server oder einem bzw. mehreren 4D Client Rechnern ausführen. Beachten Sie, dass nur die Clients in der Liste erscheinen, welche Sie zuvor registriert haben. Weitere Informationen dazu finden Sie im Abschnitt 4D Client registrieren und unter dem Befehl REGISTER CLIENT.
Über Code in 4D Client: Rufen Sie die Routinen Execute on server oder EXECUTE ON CLIENT auf.
Hinweis: Sie können von 4D Client aus keine Befehle zur Prozessverwaltung für Serverprozeduren auf dem Server verwenden. Das sind die Befehle DELAY PROCESS, PAUSE PROCESS und RESUME PROCESS.
Über eine Methode, die auf 4D Server ausgeführt wird (Server Datenbankmethode oder Serverprozedur): Wählen Sie dazu die Funktionen Execute on server oder New process oder EXECUTE ON CLIENT.
Interprozess-Kommunikation zwischen Serverprozeduren und Benutzerprozessen
Serverprozeduren können miteinander kommunizieren durch:
Interprozessvariablen
lokale oder globale Semaphoren
Datensätze
Interprozessmengen und temporäre Auswahlen auf Interprozessebene
die Befehle GET PROCESS VARIABLE, SET PROCESS VARIABLE und VARIABLE TO VARIABLE
Weitere Informationen dazu finden Sie im Handbuch 4th Dimension Programmiersprache in den entsprechenden Abschnitten. Nochmal zur Erinnerung: Denken Sie daran, dass die 4D Befehle im Bereich des Server-Rechners genauso arbeiten wie im Bereich des Client-Rechners.
Hinweis: Die Befehle CALL PROCESS und Outside call haben auf dem Server-Rechner keine Bedeutung, da Serverprozeduren keine Benutzeroberfläche mit Dateneingabe haben.
Es gibt jedoch ein anderes wichtiges Feature: Benutzerprozesse, die auf dem Client-Rechner laufen, können mit den Befehlen GET PROCESS VARIABLE, SET PROCESS VARIABLE und VARIABLE TO VARIABLE Prozessvariablen (*) von einer Serverprozedur lesen und schreiben.
(*) ebenso wie die Interprozessvariable auf dem Server-Rechner.
Wichtig: Die Prozesskommunikation zwischen mehreren Rechnern über die Befehle GET PROCESS VARIABLE, SET PROCESS VARIABLE und VARIABLE TO VARIABLE ist nur vom Client zum Server möglich. Es ist immer ein Client-Prozess, der die Variablen einer Serverprozedur liest oder schreibt.
Referenz
Import mit Serverprozeduren (Beispiel), Service mit Serverprozeduren (Beispiel)