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

Napíšte komentár