GetRPCCallerObject

GetRPCCallerObject

Funkcia %GetRPCCallerObject


Funkcia

Funkcia vráti jednoznačný identifikátor (HOBJ) objektu typu Event, Schéma, ktorý volal aktuálne vykonávanú RPC procedúru.

Deklarácia

INT %GetRPCCallerObject()

Parametre

Bez parametrov.

Návratová hodnota

Návratová hodnota je typu Int

Popis

Funkciu je vhodné použiť na identifikáciu volajúceho Eventu alebo Schémy v aplikácii, ktorá je postavená na princípe klient-server architektúry. Jej použitie odstraňuje nutnosť explicitného prenosu identifikátora procesu prostredníctvom parametrov.
Nasledovný príklad zobrazuje prenos identifikátora volajúceho procesu prostredníctvom parametra a jeho využitie za účelom odpovede bez použitia funkcie %GetRPCCallerObject a %GetRPCCallerProcess:

 

Volanie

Príklad

PROCEDURE .... ; Úplná identifikácia volajúceho procesu prostredníctvom parametrov INT _callerProcess, _callerObject _callerObject := %GetSelfHBJ(@FALSE) _callerProcess := %GetParentProcessHBJ() ;volanie CALL [E.Service] Question(_callerProcess, _callerObject) ON SELF.EVH ; .... END ....

 

Obsluha volania na strane servera

 

; Obsluha RPC PROCEDURE Question (IN INT _callerProcess, _callerObject) ; Odpoveď!!! NUTNÉ ASYNC, ak je procedúra Question volaná synchrónne - lebo vznikne DeadLock!!! CALL [(_callerObject)] QuestionReply ASYNC ON (_callerProcess) END Question

 

Alebo použitím funkcií %GetRPCCallerProcess, %GetRPCCallerObject:

 

Volanie

 

PROCEDURE .... ;volanie CALL [E.Service] Question ON SELF.EVH ; .... END ....

 

Obsluha volania na strane servera:

 

RPC PROCEDURE Question ; identifikácia volajúceho procesu INT _callerProcess, _callerObject _callerObject := %GetRPCallerProcess() _callerProcess := %GetRPCCallerObject() ; Odpoveď!!! NUTNÉ ASYNC, ak je procedúra Question volaná synchrónne - lebo vznikne DeadLock!!! IF %GetRPCCallerIsJava() THEN CALLJ [(_callerObject)] QuestionReply ASYNC ON (_callerProcess) ELSE CALL [(_callerObject)] QuestionReply ASYNC ON (_callerProcess) ENDIF END Question