Version 6.8 (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 Source Code 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 Source Code 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, daß 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äßt 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 Benutzerprozeß starten, in dem eine Methode abläuft. Diese Methode heißt Prozeßmethode. 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 Benutzerprozeß starten, in dem eine Methode abläuft. Diese Methode heißt Serverprozedur. Der Prozeß, 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, daß im ersten Fall eine SQL Prozedur, im zweiten Fall ein 4D Prozeß abläuft.
Architektur der 4D Serverprozeduren
Eine Serverprozedur hat wie ein normaler Prozeß 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 Prozeßvariablen. Prozeßvariablen werden nur im Bereich der jeweiligen Serverprozedur erkannt.
Standardtabelle: Jede Serverprozedur hat eine eigene Standardtabelle.
Prozeßmengen: Jede Serverprozedur hat ihre eigenen Prozeßmengen.
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 Interprozeßvariablen, die Serverprozeduren für die Interprozeßkommunikation 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 ist die Eingabe von Daten und Drucken.
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 uvm. arbeiten. Der einzige Unterschied besteht darin, daß etwas nicht auf dem 4D Client- Rechner, sondern auf dem Server-Rechner ausgeführt wird.
Ein großer Vorteil ist, daß 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äßt.
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äßt sich leicht erweitern, so daß 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.
ACCUMULATE
ADD RECORD
ADD SUBRECORD
APPEND MENU ITEM
BREAK LEVEL
CALL PROCESS
CHANGE LICENSES
Count menu items
Count menus
CREATE DATA FILE
DELETE MENU ITEM
DISABLE MENU ITEM
DISPLAY SELECTION
EDIT ACCESS
ENABLE MENU ITEM
FILTER EVENT
Get menu item
Get menu item key
Get menu item mark
Get menu item style
Get menu title
GRAPH TABLE
HIDE MENU BAR
INSERT MENU ITEM
Level
Menu selected
MODIFY RECORD
MODIFY SELECTION
MODIFY SUBRECORD
ON EVENT CALL
OPEN DATA FILE
Open external window
PAGE BREAK
PAGE SETUP
PRINT FORM
PRINT LABEL
PRINT RECORD
PRINT SELECTION
PRINT SETTINGS
Printing page
QUERY BY EXAMPLE
REMOVE PICTURE FROM LIBRARY
REPORT
SET ABOUT
SET MENU ITEM
SET MENU ITEM KEY
SET MENU ITEM MARK
SET MENU ITEM STYLE
SET PICTURE TO LIBRARY
SET PRINT PREVIEW
SHOW MENU BAR
Subtotal
Auf dem Server nicht empfohlene Befehle
Enthält eine Serverprozedur einen dieser Befehle, kann der Srver 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.
ACCEPT
Activated
ADD DATA SEGMENT
After
APPEND TO CLIPBOARD
APPEND TO LIST
Before
BLOB to list
BRING TO FRONT
BUTTON TEXT
CANCEL
CHANGE ACCESS
CHANGE PASSWORD
CLEAR CLIPBOARD
CLEAR LIST
Copy list
Count list items
Count screens
Create document (1)
Create resource file (1)
Current form page
Current form table
Current user
C_GRAPH
Deactivated
DELETE LIST ITEM
DELETE USER
DIALOG
DISABLE BUTTON
DRAG AND DROP PROPERTIES
DRAG WINDOW
Drop position
During
ENABLE BUTTON
ERASE WINDOW
EXPORT DATA (1)
FILTER KEYSTROKE
Find window
FIRST PAGE
FONT
FONT LIST
Font name
Font number
FONT SIZE
FONT STYLE
Form event
Frontmost process
Frontmost window
GET CLIPBOARD
Get edited text
GET FORM PROPERTIES
GET GROUP LIST
GET GROUP PROPERTIES
GET HIGHLIGHT
GET LIST ITEM
GET LIST ITEM PROPERTIES
GET LIST PROPERTIES
GET MOUSE
GET OBJECT RECT
GET PICTURE FROM CLIPBOARD
Get text from clipboard
GET USER LIST
GET USER PROPERTIES
GET WINDOW RECT
Get window title
GOTO AREA
GOTO PAGE
GRAPH SETTINGS
HIDE PROCESS
HIDE TOOL BAR
HIDE WINDOW
HIGHLIGHT RECORDS
HIGHLIGHT TEXT
IMPORT DATA (1)
In break
In footer
In header
INPUT FORM
INSERT LIST ITEM
INVERT BACKGROUND
Is a list
Is user deleted
Keystroke
Last object
LAST PAGE
List item parent
List item position
LIST TO BLOB
Load list
MAXIMIZE WINDOW
Menu bar height
Menu bar screen
MINIMIZE WINDOW
Modified
MOVE OBJECT
New list
NEXT PAGE
Next window
Old
Open document (1)
Open resource file (1)
ORDER BY (2)
OUTPUT FORM
Outside call
Pop up menu
POST CLICK
POST EVENT
POST KEY
PREVIOUS PAGE
QUERY BY FORMULA (2)
QUERY (2)
REDRAW
REDRAW LIST
REDRAW WINDOW
REGISTER CLIENT
REJECT
SAVE LIST
SCREEN COORDINATES
SCREEN DEPTH
Screen height
Screen width
Select folder
SELECT LIST ITEM
SELECT LIST ITEM BY REFERENCE
SELECT LOG FILE
Selected list item
Self
SET CHOICE LIST
SET COLOR
SET CURSOR
SET ENTERABLE
SET FIELD TITLES
SET FILTER
SET FORMAT
Set group properties
SET LIST ITEM
SET LIST ITEM PROPERTIES
SET LIST PROPERTIES
SET PICTURE TO CLIPBOARD
SET RGB COLORS
SET SCREEN DEPTH
SET TABLE TITLES
SET TEXT TO CLIPBOARD
SET TIMER
Set user properties
SET VISIBLE
SET WINDOW RECT
Shift down
SHOW PROCESS
SHOW WINDOW
SORT LIST
Test clipboard
User in group
Validate password
Window kind
WINDOW LIST
Window process
(1) Nur wenn der erste Parameter ein leerer String ist.
(2) Nur wenn die Syntax die Anzeige eines Dialogfensters (z.B.: SORT ([Tabelle])).
Befehle ohne Auswirkung auf dem Server
Diese Befehle haben keine Auswirkung in Serverprozeduren auf dem Server. Sie erhalten keine Fehlermeldung.