如何从进度 4GL 的内部过程持续调用外部过程?
How to call an external procedure persistently from an internal procedure on progress 4GL?
如何持久调用外部过程获取输出值。如果我在主块代码部分调用它,那么它只调用一次并给出一次输出。在这种情况下,你能帮我举个例子吗?我是新来的。任何帮助都会很棒。
main.p
DEFINE VARIABLE hp AS HANDLE NO-UNDO.
DEFINE VARIABLE cc AS CHARACTER NO-UNDO.
RUN foo.p PERSISTENT SET hp. // persistent keeps it, SET hp makes it accessible
RUN bar IN hp ( OUTPUT cc ).
DELETE OBJECT hp.
MESSAGE cc.
foo.p
PROCEDURE bar:
DEFINE OUTPUT PARAMETER cc AS CHARACTER NO-UNDO.
cc = "see sea":u.
END PROCEDURE.
https://abldojo.services.progress.com:443/#/?shareId=5d1f239e4b1a0f40c34b8bd3
对于如何使用持久性过程可能有些困惑。您不要重复调用外部过程。您使用 "persistent" 选项调用一次外部过程,以便将其保存在内存中。然后,您可能会重复调用持久过程的内部过程,以完成任务。
有点像调用对象的方法。
如果您希望避免处理持久过程句柄,您可以将持久过程安装为 "session super-procedure"。然后内部过程可以是 运行 而无需引用特定句柄。 (只要你有唯一的内部过程名称并且不想做像 "overloading" 这样的事情,这就很好并且不会混淆。)
main.p:
/* main.p
*/
define variable i as integer no-undo.
run pp.p persistent.
do while lastkey <> asc('q'):
run random1to10( output i ).
message i.
readkey.
end.
pp.p:
/* pp.p
*/
/* Install self as a session super-procedure */
session:add-super-procedure( this-procedure ).
return.
procedure random1to10:
define output parameter x as integer no-undo.
x = random( 1, 10 ).
end.
如何持久调用外部过程获取输出值。如果我在主块代码部分调用它,那么它只调用一次并给出一次输出。在这种情况下,你能帮我举个例子吗?我是新来的。任何帮助都会很棒。
main.p
DEFINE VARIABLE hp AS HANDLE NO-UNDO.
DEFINE VARIABLE cc AS CHARACTER NO-UNDO.
RUN foo.p PERSISTENT SET hp. // persistent keeps it, SET hp makes it accessible
RUN bar IN hp ( OUTPUT cc ).
DELETE OBJECT hp.
MESSAGE cc.
foo.p
PROCEDURE bar:
DEFINE OUTPUT PARAMETER cc AS CHARACTER NO-UNDO.
cc = "see sea":u.
END PROCEDURE.
https://abldojo.services.progress.com:443/#/?shareId=5d1f239e4b1a0f40c34b8bd3
对于如何使用持久性过程可能有些困惑。您不要重复调用外部过程。您使用 "persistent" 选项调用一次外部过程,以便将其保存在内存中。然后,您可能会重复调用持久过程的内部过程,以完成任务。
有点像调用对象的方法。
如果您希望避免处理持久过程句柄,您可以将持久过程安装为 "session super-procedure"。然后内部过程可以是 运行 而无需引用特定句柄。 (只要你有唯一的内部过程名称并且不想做像 "overloading" 这样的事情,这就很好并且不会混淆。)
main.p:
/* main.p
*/
define variable i as integer no-undo.
run pp.p persistent.
do while lastkey <> asc('q'):
run random1to10( output i ).
message i.
readkey.
end.
pp.p:
/* pp.p
*/
/* Install self as a session super-procedure */
session:add-super-procedure( this-procedure ).
return.
procedure random1to10:
define output parameter x as integer no-undo.
x = random( 1, 10 ).
end.