如何在 progress 4GL 上使用异步方法从 window 应用程序调用过程部分?
How do I call the procedure section from window application using asynchronous method on progress 4GL?
我想使用异步方法,但问题是当我编写如下查询时程序只读主块和定义部分,它没有进入过程部分。我也想看。
DEFINE VARIABLE hAsynCall AS HANDLE NO-UNDO.
ASSIGN cPgmTest = Test.p
RUN VALUE(cPgmTest) ON SERVER gshAstraAppserver ASYNCHRONOUS
SET hAsynCall (INPUT 'Csv') NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
MESSAGE ERROR-STATUS:GET-MESSAGE(1).
END.
DO WHILE NOT hAsynCall :COMPLETE:
PROCESS EVENTS.
IF hAsynCall :COMPLETE THEN
MESSAGE "completed"
VIEW-AS ALERT-BOX INFORMATION.
ELSE /* Async result not ready, so do something else. */
MESSAGE "Not yet ..." VIEW-AS ALERT-BOX INFORMATION.
END.
/* Test.p*/
/* Definition*/
/*Main Block*/
DEFINE INPUT PARAMETER cData AS CHARACTER NO-UNDO.
PAUSE 5.
/*Procedure*/
/*Function*/
正如您在上面看到的,程序被读取到主块,但是如果我从主块中剪切查询并粘贴到过程块中,那么它就不会被输入。
您需要运行您的 AppServer 过程持久然后运行其中的异步调用。
类似于:
DEFINE VARIABLE hp AS HANDLE NO-UNDO.
RUN test.p PERSISTENT SET hp.
RUN whatever IN hp ASYNCRHONOUS SET hasync ( "csv" ).
FINALLY:
DELETE OBJECT hp.
END FINALLY.
请注意,此模式会引发两次额外的 AppServer 调用,可以使用代理存根来防止这种情况。
我想使用异步方法,但问题是当我编写如下查询时程序只读主块和定义部分,它没有进入过程部分。我也想看。
DEFINE VARIABLE hAsynCall AS HANDLE NO-UNDO.
ASSIGN cPgmTest = Test.p
RUN VALUE(cPgmTest) ON SERVER gshAstraAppserver ASYNCHRONOUS
SET hAsynCall (INPUT 'Csv') NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
MESSAGE ERROR-STATUS:GET-MESSAGE(1).
END.
DO WHILE NOT hAsynCall :COMPLETE:
PROCESS EVENTS.
IF hAsynCall :COMPLETE THEN
MESSAGE "completed"
VIEW-AS ALERT-BOX INFORMATION.
ELSE /* Async result not ready, so do something else. */
MESSAGE "Not yet ..." VIEW-AS ALERT-BOX INFORMATION.
END.
/* Test.p*/
/* Definition*/
/*Main Block*/
DEFINE INPUT PARAMETER cData AS CHARACTER NO-UNDO.
PAUSE 5.
/*Procedure*/
/*Function*/
正如您在上面看到的,程序被读取到主块,但是如果我从主块中剪切查询并粘贴到过程块中,那么它就不会被输入。
您需要运行您的 AppServer 过程持久然后运行其中的异步调用。
类似于:
DEFINE VARIABLE hp AS HANDLE NO-UNDO.
RUN test.p PERSISTENT SET hp.
RUN whatever IN hp ASYNCRHONOUS SET hasync ( "csv" ).
FINALLY:
DELETE OBJECT hp.
END FINALLY.
请注意,此模式会引发两次额外的 AppServer 调用,可以使用代理存根来防止这种情况。