Kbase 20785: 4GL. How to Use Parameters in Asynchronous Requests
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  15/10/2008 |
|
Status: Verified
GOAL:
How to Use Parameters in Asynchronous Requests
FIX:
Asynchronous requests handle the OUTPUT and INPUT-OUTPUT parameters differently than synchronous requests. After the asynchronous request is finished, the EVENT-PROCEDURE defined in the RUN statement is executed.
Therefore the OUTPUT and INPUT-OUTPUT parameters that are defined in the RUN statement are passed to the EVENT-PROCEDURE and not to the RUN statement.
Asynchronous requests must define the parameters in the same way that they are sent in the RUN statements, as is true for synchronous requests.
The way to define parameters in the EVENT-PROCEDURE is different and this must be changed. Parameters defined as INPUT parameters in the asynchronous request are not defined in the EVENT-PROCEDURE, and the parameters defined as OUTPUT or INPUT-OUTPUT in the asynchronous request must be defined as INPUT parameters in the EVENT-PROCEDURE.
The following is an example of how run and define parameters in asynchronous requests:
DEFINE VARIABLE hServer AS HANDLE NO-UNDO.
DEFINE VARIABLE hProcess AS HANDLE NO-UNDO.
DEFINE VARIABLE param1 AS CHARACTER NO-UNDO INITIAL "Initial Value".
DEFINE VARIABLE param2 AS CHARACTER NO-UNDO INITIAL "Initial Value".
DEFINE VARIABLE param3 AS CHARACTER NO-UNDO INITIAL "Initial Value".
DEFINE VARIABLE lServer AS LOGICAL NO-UNDO.
CREATE SERVER hServer.
ASSIGN lServer = hServer:CONNECT("-AppService sports2000 -H SomeHost -S 5162") NO-ERROR.
IF lServer = FALSE THEN
ASSIGN hServer = SESSION:HANDLE.
IF VALID-HANDLE(hServer) = FALSE THEN
DO:
MESSAGE "No server connected.." VIEW-AS ALERT-BOX.
RETURN ERROR.
END.
RUN async1.p ASYNCHRONOUS
SET hProcess
EVENT-PROCEDURE "endasync" IN THIS-PROCEDURE
ON SERVER hServer (INPUT param1, OUTPUT param2, INPUT-OUTPUT param3).
WAIT-FOR "PROCEDURE-COMPLETE" OF hProcess.
MESSAGE "param1: " param1 SKIP
"param2: " param2 SKIP
"param3: " param3
VIEW-AS ALERT-BOX INFORMATION.
PROCEDURE endasync:
DEFINE INPUT PARAMETER value2 AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER value3 AS CHARACTER NO-UNDO.
ASSIGN param2 = "Value Changed in event-procedure"
param3 = value3.
END PROCEDURE.
/********************************************************/
/* Procedure async1.p to be run as asynchronous request */
/********************************************************/
DEFINE INPUT PARAMETER param1 AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER param2 AS CHARACTER NO-UNDO.
DEFINE INPUT-OUTPUT PARAMETER param3 AS CHARACTER NO-UNDO.
ASSIGN param3 = "Value changed in Async procedure"