4D v16

Serverprozeduren

Home

 
4D v16
Serverprozeduren

Serverprozeduren  


 

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.

Selbst wenn wir den üblichen Namen benutzen, bieten Serverprozeduren unter 4D Server weit mehr als reguläre Serverprozeduren.

Mit 4D im lokalen Modus können Sie beim Verwenden einer Routine, z.B. New process einen Benutzerprozess starten, in dem eine Methode abläuft. Diese Methode heißt Prozessmethode. Weitere Informationen dazu finden Sie im Handbuch 4D 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. Über den Befehl EXECUTE ON CLIENT können Sie eine Methode in einem anderen Prozess auf einem anderen Client laufen lassen. In beiden Fällen heißt die Methode Serverprozedur.
Der Prozess, der auf dem Server-Rechner oder einem anderen Client 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 eigenständiger 4D Prozess abläuft.

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 so viele 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 remote 4D Rechnern laufen.

Ebenso wie 4D eine Multi-Tasking Umgebung für Benutzerprozesse auf einer Arbeitsstation bietet, 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.

Hinweis: Die Methodeneigenschaft "Auf Server ausführen" lässt sich für eine Methode anwenden, die in einem Prozess auf dem Server ausgeführt wird. Die Methode verwendet dann jedoch einen Zwillingsprozess des Client-Prozesses, d.h. sie kann die Umgebung dieses Client Prozesses nutzen. Es handelt sich dann nicht um eine 4D Serverprozedur. Weitere Informationen dazu finden Sie im Abschnitt Attribut Auf Server ausführen.

Fast alles, was im Handbuch 4D Programmiersprache über die Funktionsweise von Prozessen und Befehlen beschrieben wird, gilt auch für Serverprozeduren. Davon ausgenommen ist die Dateneingabe.

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 arbeiten, Datensätze drucken, u.v.m. Stellen Sie sich einfach vor, dass etwas nicht auf dem lokalen 4D Rechner, sondern auf dem Server-Rechner bzw. auf einer oder mehreren Arbeitsstationen ausgeführt wird.

Ein offensichtlicher Vorteil ist, dass eine Serverprozedur lokal auf dem Server-Rechner ausgeführt wird, also dort, wo auch die Datenbank-Engine liegt. So ist z.B. der Befehl APPLY TO SELECTION 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.

Serverprozeduren, die auf einer oder mehreren Arbeitsstationen ausgeführt werden, ermöglichen, Aufgaben und Kommunikation auf mehrere Client Rechner zu verteilen. Ein Beispiel dazu finden Sie im Handbuch 4D Programmiersprache unter dem Befehl REGISTER CLIENT.

Der wichtigste Vorteil von Serverprozeduren sind jedoch die zusätzlichen Möglichkeiten für 4D Server. 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 Volumes 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.

Generell sollten Serverprozeduren, die auf dem Server ausgeführt werden, nicht mit Oberflächenelementen arbeiten, wie z.B. Menüs, Fenster, Formulare, etc. Die Oberfläche wird ja auch nicht auf der Server-Seite verwaltet. Befehle, die Dialogfenster auf dem Server anzeigen, sowie Dialogfenster zur Dateneingabe, sollten vermieden werden.

Es folgt die Liste der Befehle, die Sie NICHT in Serverprozeduren verwenden sollten, die auf dem Server ausgeführt werden. Sie ist in drei Gruppen gegliedert:

  • 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
_o_ADD SUBRECORD
APPEND MENU ITEM
BREAK LEVEL
CALL PROCESS
CHANGE LICENSES
Count menu items
Count menus
CREATE USER FORM
DELETE MENU ITEM
DELETE USER FORM
DISABLE MENU ITEM
DISPLAY SELECTION
EDIT ACCESS
EDIT FORM
ENABLE MENU ITEM
FILTER EVENT
Get menu item
Get menu item key
Get menu item mark
Get menu item style
Get menu title
SET PICTURE TO LIBRARY
_o_GRAPH TABLE
INSERT MENU ITEM
Level
LIST USER FORMS
Menu selected
MODIFY RECORD
MODIFY SELECTION
_o_MODIFY SUBRECORD
ON EVENT CALL
_o_Open external window
PAGE BREAK
PAGE SETUP
PRINT SETTINGS
QUERY BY EXAMPLE
QR REPORT
Printing page
REMOVE PICTURE FROM LIBRARY
SET MENU ITEM
SET MENU ITEM SHORTCUT
SET MENU ITEM MARK
SET MENU ITEM STYLE
SET PICTURE TO LIBRARY
SHOW MENU BAR
Subtotal

  • Auf dem Server ungeeignete Befehle

Wir raten dringend, die folgenden Befehle nicht in Serverprozeduren zu verwenden, da sie für Methoden, die auf dem Server ausgeführt werden, ungeeignet sind. Sie können den Server blockieren und Fehler erzeugen und werden in jedem Fall nicht korrekt ausgeführt. Es erscheint keine explizite Fehlermeldung.

ACCEPT
Activated
_o_ADD DATA SEGMENT
After
APPEND DATA TO PASTEBOARD
APPEND TO LIST
Before
BLOB TO DOCUMENT
BLOB to list
BRING TO FRONT
_o_C_GRAPH
CANCEL
CHANGE CURRENT USER
CHANGE PASSWORD
CLEAR LIST
CLEAR PASTEBOARD
Copy list
Count list items
Count screens
Create document(1)
_o_Create resource file(1)
Current form table
Current user
Deactivated
DELETE FROM LIST
DELETE USER
DIALOG
_o_DISABLE BUTTON
DRAG AND DROP PROPERTIES
DRAG WINDOW
Drop position
_o_During
_o_ENABLE BUTTON
ERASE WINDOW
EXPORT DATA(1)
FILTER KEYSTROKE
Find window
Focus object
FONT LIST
_o_Font name
_o_Font number
Form event
FORM FIRST PAGE
FORM Get current page
FORM GET PROPERTIES
FORM GOTO PAGE
FORM LAST PAGE
FORM NEXT PAGE
FORM PREVIOUS PAGE
FORM SET INPUT
FORM SET OUTPUT
Frontmost process
Frontmost window
Get edited text
GET GROUP LIST
GET GROUP PROPERTIES
GET HIGHLIGHT
GET LIST ITEM
GET LIST ITEM PROPERTIES
GET LIST PROPERTIES
GET MOUSE
GET PASTEBOARD DATA
GET PICTURE FROM PASTEBOARD
Get text from pasteboard
GET USER LIST
GET USER PROPERTIES
GET WINDOW RECT
Get window title
GOTO OBJECT
GRAPH SETTINGS
HIDE PROCESS
HIDE TOOL BAR
HIDE WINDOW
HIGHLIGHT RECORDS
HIGHLIGHT TEXT
IMPORT DATA(1)
In break
In footer
In header
INSERT IN LIST
_o_INVERT BACKGROUND
Is a list
Is user deleted
Keystroke
List item parent
List item position
LIST TO BLOB
Load list
MAXIMIZE WINDOW
Menu bar height
Menu bar screen
MINIMIZE WINDOW
Modified
New list
Next window
OBJECT GET COORDINATES
OBJECT MOVE
OBJECT SET LIST BY NAME
OBJECT SET COLOR
OBJECT SET ENTERABLE
OBJECT SET FILTER
OBJECT SET FORMAT
OBJECT SET RGB COLORS
OBJECT SET TITLE
OBJECT SET VISIBLE
Old
Open document(1)
Open resource file(1)
ORDER BY(2)
Outside call
Pasteboard data size
Pop up menu
POST CLICK
POST EVENT
POST KEY
QUERY BY FORMULA(2)
QUERY(2)
REDRAW
_o_REDRAW LIST
REDRAW WINDOW
REGISTER CLIENT
REJECT
SAVE LIST
SCREEN COORDINATES
SCREEN DEPTH
Screen height
Screen width
Select folder
SELECT LIST ITEMS BY POSITION
SELECT LIST ITEMS BY REFERENCE
SELECT LOG FILE
Selected list items
Self
SET CURSOR
SET FIELD TITLES
Set group properties
SET LIST ITEM
SET LIST ITEM PROPERTIES
SET LIST PROPERTIES
SET PICTURE TO PASTEBOARD
SET SCREEN DEPTH
SET TABLE TITLES
SET TEXT TO PASTEBOARD
SET TIMER
Set user properties
SET WINDOW RECT
Shift down
SHOW PROCESS
SHOW WINDOW
SORT LIST
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 auslöst, z.B. ORDER BY([Tabelle]).

  • Befehle ohne Auswirkung auf dem Server

Diese Befehle haben keine Auswirkung, wenn sie in Serverprozeduren auf dem Server ausgeführt werden. Es erscheint keine explizite Fehlermeldung.

GRAPH
MESSAGES OFF
MESSAGES ON
SET MENU BAR
SHOW TOOL BAR

  • Von 4D aus können Sie eine Serverprozedur im Dialogfenster Methode ausführen manuell starten:

Sie können sie auf dem 4D Server- oder einem Client-Rechner ausführen. Beachten Sie, dass nur die Client-Rechner in der Liste erscheinen, welche Sie zuvor registriert haben. Weitere Informationen dazu finden Sie im Abschnitt Serverprozeduren auf Client-Rechnern und unter dem Befehl REGISTER CLIENT.

Hinweis: Sie können von remote 4D aus keine Befehle zur Prozessverwaltung für Serverprozeduren auf dem Server verwenden. Das sind die Befehle DELAY PROCESS, PAUSE PROCESS und RESUME PROCESS.

  • Sie können eine Serverprozedur über eine Methode aufrufen, die auf 4D Server ausgeführt wird (Server Datenbankmethode, Methode mit dem Attribut Auf Server ausführen oder Serverprozedur): Verwenden Sie dazu die Funktionen Execute on server, New process oder EXECUTE ON CLIENT.

Serverprozeduren können miteinander kommunizieren durch:

Weitere Informationen dazu finden Sie im Handbuch 4D Programmiersprache in der Beschreibung zu den Befehlen. Nochmal zur Erinnerung: Die 4D Befehle arbeiten im Bereich des Server-Rechners genauso wie im Bereich eines 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.



Siehe auch 

Import mit Serverprozeduren (Beispiel)
Service mit Serverprozeduren (Beispiel)

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: 4D Server und Programmiersprache

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Server Handbuch ( 4D v16)