RPG/DDS:同一页面显示子文件与消息队列子文件,能否合并单步操作?
RPG/DDS:合并子文件与消息队列子文件的单步交互
可以实现单步操作,核心是将两个子文件的显示与输入处理合并到同一个屏幕周期,仅执行一次输入操作即可完成交互。具体修改如下:
程序逻辑调整
将原有的两个独立子过程合并,一次性完成两个子文件控制记录的写入,随后仅对主数据子文件的控制记录执行exfmt(推荐使用exfmt而非read,因为它能同时处理屏幕输出与输入捕获),用户只需按一次回车即可完成所有操作。
修改后的RPG代码:
begsr DspCombinedSbf; // 初始化并显示主数据子文件 eval *In62 = *On; eval *In63 = *On; write SFL_CTL; write SFL_FOOT; // 写入消息子文件控制记录 write Msg_Ctl; // 单次EXFMT操作完成输出与输入 exfmt SFL_CTL; endsr;
DDS配置验证
确保消息子文件控制记录MSG_CTL的OVERLAY属性已正确设置,这样消息子文件会叠加显示在主数据子文件之上,无需单独的屏幕周期。同时确认:
MSG_CTL已启用SFLDSP和SFLDSPCTL属性,保证消息子文件正常显示- 主数据子文件控制记录
SFL_CTL作为输入触发载体,通过exfmt它可以捕获整个屏幕的输入事件
核心原理
exfmt操作会先输出所有已写入的屏幕记录,随后等待用户输入;用户提交输入后,系统会一次性返回所有屏幕字段的更新,包括两个子文件的相关数据与消息队列交互结果,从而避免了两次read带来的两次回车操作。
内容的提问来源于stack exchange,提问作者mortimer
相关产品推荐
相关产品推荐

