RmtCall
RmtCall(alpha1[,...]) : int
Prozedurfunktion auf dem Server aufrufen
Details
- alpha1: Name der Prozedurfunktion
- ...: Funktionsargumente
- Resultat:
intID des neuen Benutzers oder Fehlercode_ErrLimitExceededDas Limit fürRmtCall-Aufrufe wurde erreicht_ErrOutOfMemoryNicht genügend Arbeitsspeicher zur Durchführung des Befehls vorhanden_ErrDbaUserLimitBenutzerlimit des Servers erreicht oder Cachegröße der Zieldatenbank für Benutzermenge unzureichend_ErrDbaAreaLockedDie Datenbank ist in exklusiver Benutzung - Siehe: Verwandte Befehle ,
Call (),CallOld (), Verwendung von Remote-Prozeduren (Blog)
Mit dieser Funktion kann eine variable Prozedurfunktion aufgerufen werden, die dann vom CONZEPT 16-Server verarbeitet wird. (alpha1) bezeichnet den Namen der Funktion. Daneben können bis zu 23 weitere Argumente für die Funktion übergeben werden. Die Richtigkeit der Argumenttypen wird erst zur Laufzeit überprüft. Die Verarbeitung der Funktion erfolgt asynchron, dies bedeutet das Programm wird nach dem Aufruf der Funktion durch RmtCall() sofort fortgeführt ohne auf das Beenden der aufgerufenen Funktion zu warten.
Eine Übergabe von Referenz-Variablen durch Angabe von var ist nicht möglich.
Für die Ausführung der Prozedur auf dem Server wird ein neuer Benutzer erzeugt. Dieser Benutzer verfügt über eigene Feldpuffer. Die Prozedur läuft folglich völlig unabhängig vom Client. Kommt es während der Verarbeitung der Prozedur zu einem Laufzeitfehler, wird dieser in der Log-Datei der Datenbank abgelegt (siehe Log-Einträge ).
Es können nur A+ Prozeduren vom Server verarbeitet werden. Innerhalb der aufgerufenen Prozedur wird der Befehl CallOld () ignoriert. Es können nur Befehle verwendet werden, die mit dem Symbol gekennzeichnet sind.
Wird vor dem Aufruf von RmtCall die Anzahl der bereits benutzen RmtCall -Aufrufe mit DbaInfo ( _DbaRmtProcCount ) mit dem Prozedurlimit DbaInfo ( _DbaRmtProcLimit ) verglichen, kann trotzdem der Fehlercode _ErrLimitExceeded zurückgegeben werden, auch wenn das Limit zuvor nicht erreicht war. In diesem Fall wurde in der Zwischenzeit durch einen anderen Client ein RmtCall gestartet.
Wichtiger Hinweis
: Per
RmtCall()gestartete Prozeduren werden innerhalb des Datenbankprozesses durchgeführt. Dabei wird keine TCP/IP-Verbindung mehr benötigt, der Datenzugriff ist daher schneller als bei einem Clientprozess. Allerdings kann die Prozedurausführung die Leistung und im ungünstigen Fall auch die Stabilität des Datenbankprozesses negativ beeinflussen. Ein übermäßiger Resourcenverbrauch oder auch Programmierfehler können zu Performance-Problemen führen oder das Schließen der Datenbank verhindern. Zudem hat der Client nach dem Start der Prozedur keine direkten Kontrollmöglichkeiten mehr. Ein weiterer Nachteil vonRmtCall()liegt im reduzierten Befehlsumfang, etliche Prozedurbefehle sind innerhalb des Datenbankservers nicht verfügbar. Ein socketbasierter SOA-Service kann auf derselben Maschine wie der Datenbankserver laufen und vermeidet die Nachteile von RmtCall () . Datensatzoperationen sind zwar etwas langsamer, dafür sind aber mehr Befehle ausführbar (bespielsweise für Druckfunktionen). Insbesondere durch die Verwendung der Job-Funktionen innerhalb der SOA-Anwendung kann ein Leistungsspektrum erreicht werden, das innerhalb des Datenbankprozesses nicht realisierbar ist. Da Selektionen mit der Option _SelServer direkt vom Server durchgeführt werden, sollte RmtCall () am besten nur dann verwendet werden, wenn es bei einer umfangreichen Datensatzverarbeitung auf maximale Performance ankommt, sonst ist der socketbasierte SOA-Service immer vorzuziehen!