GetRPCCallerObject
Funkcia %GetRPCCallerObject
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