as400 RPGLE 等待输入

as400 RPGLE wait for input

我有一个 RPG 程序,它使用命令 DSPLY 打印数据。

当我调用程序时,

我可以看到出现了几毫秒的印刷品, 但它立即关闭。

除了使用显示文件,原生RPG有没有办法让程序等待输入?

是的,您需要为 DSPLY 操作添加一个响应参数:

/free
dou (response = 'Q');
   // dsply 'Q = Quit' '*EXT' response;
   // Better to let the RPG runtime determine
   // whether to use *EXT (for interactive jobs)
   // or QSYSOPR (for batch jobs).
   dsply 'Q = Quit' '' response;
   if (response <> 'Q');
      // your code here
      dsply yourvar;
   endif;
enddo;
*inlr = *on;
/end-free

请注意 - 我目前无法对此进行测试,我只是在此处直接输入代码。

*经过编辑以纳入 Barbara 的精彩观点。

Benny 走在正确的轨道上,但他遗漏了响应参数。

您只需要:

dsply wMessage *EXT wResponse;

程序将等待输入响应。从技术上讲,因为任何响应都需要按下回车键。用户只需输入即可响应。

使用发送用户消息 (SNDUSRMSG) 并提供默认值 [默认回复值 (DFT)] 的 CL 过程可以启用允许暂停的查询,只需按 Enter 键即可继续。 IIRC,即使没有指定默认值,字符串值 *N 也会因用户缺少任何输入而被 returned,当然 return 值小于两个字符return 只有星号;尽管取决于其他设置,这可能不是仅使用 Enter 的效果,而是只能通过 F11=用户查询的删除 [或 F13=清除] 才能看到。或者做 same 代码,使用任何 message-feature API 效果相似;当 运行 作为批处理与交互式时,决定将消息发送到哪里,可能需要代码使用 API 与编码使用内置该功能的 SNDUSRMSG。
注意:这种用法当然会受到作业的查询消息回复处理 (INQMSGRPY) 设置的影响;例如该工作可以设置为默认自动回复,这样查询就不会出现,但这对 consistency/expectation.

来说可能是件好事