Ibm midrange 在DSPF中具有MSGID的动态文本

Ibm midrange 在DSPF中具有MSGID的动态文本,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我正在修改一个交互式程序,使用带有输出字段的DSPF: MSGERR 80A O 24 2MSGID(&§MSGID FILE_MSG) 我将一个ID传递到MSGID,它就可以正常工作了 现在我有这样一个信息: VALUE CAN BE: &1, &2, &3 A* ======================================================================== A* Message Su

我正在修改一个交互式程序,使用带有输出字段的DSPF:

MSGERR        80A  O 24  2MSGID(&§MSGID FILE_MSG) 
我将一个ID传递到MSGID,它就可以正常工作了

现在我有这样一个信息:

VALUE CAN BE: &1, &2, &3
 A* ========================================================================
 A* Message Subfile
 A* ------------------------------------------------------------------------
 A          R MSGSFL                    SFL
 A                                      SFLMSGRCD(24)
 A            MSGKEY                    SFLMSGKEY
 A            PGMQ                      SFLPGMQ
 A* ------------------------------------------------------------------------
 A* Message Subfile - Control forrmat
 A* ------------------------------------------------------------------------
 A          R MSGCTL                    SFLCTL(MSGSFL)
 A                                      OVERLAY
 A                                      SFLINZ
 A                                      SFLPAG(1)
 A                                      SFLSIZ(2)
 A                                      SFLDSP SFLDSPCTL
 A  52
 AON52                                  SFLEND(*PLUS)
 A            PGMQ                      SFLPGMQ
我需要用文本替换&1、&2和&3

是否可以使用当前的方法?
因为我不能直接在RPGLE上的MSGERR上操作,因为它不可见。

不,你不能。我更喜欢消息子文件,而不是使用MSGID、ERRMSGID等。看起来是这样的:

VALUE CAN BE: &1, &2, &3
 A* ========================================================================
 A* Message Subfile
 A* ------------------------------------------------------------------------
 A          R MSGSFL                    SFL
 A                                      SFLMSGRCD(24)
 A            MSGKEY                    SFLMSGKEY
 A            PGMQ                      SFLPGMQ
 A* ------------------------------------------------------------------------
 A* Message Subfile - Control forrmat
 A* ------------------------------------------------------------------------
 A          R MSGCTL                    SFLCTL(MSGSFL)
 A                                      OVERLAY
 A                                      SFLINZ
 A                                      SFLPAG(1)
 A                                      SFLSIZ(2)
 A                                      SFLDSP SFLDSPCTL
 A  52
 AON52                                  SFLEND(*PLUS)
 A            PGMQ                      SFLPGMQ
要使用它,您将消息发送到程序消息队列,然后将MSGCTL作为屏幕事务的一部分写入。因此,如果您的屏幕上通常有一个名为record的单一记录格式,您可以执行以下操作:

pgmq = <Program Name>;
write msgctl;
exfmt record;
我有qmhsndpm和qmhrmvpm的原型,但是您可以很容易地在文档中查找它们和错误代码参数的格式

在事务开始时,调用SendDspfgMsg发送消息,调用ClearDspfMsg清除消息队列。PGMQ对于所有这些部分都应该具有相同的值,并且它将正常工作


注意:这不适用于RPG,因为您没有访问子过程的权限。如有必要,将程序转换为RPGLE,它将正常工作。或者在这种情况下使用子程序而不是子过程。

不,您不能。我更喜欢消息子文件,而不是使用MSGID、ERRMSGID等。看起来是这样的:

VALUE CAN BE: &1, &2, &3
 A* ========================================================================
 A* Message Subfile
 A* ------------------------------------------------------------------------
 A          R MSGSFL                    SFL
 A                                      SFLMSGRCD(24)
 A            MSGKEY                    SFLMSGKEY
 A            PGMQ                      SFLPGMQ
 A* ------------------------------------------------------------------------
 A* Message Subfile - Control forrmat
 A* ------------------------------------------------------------------------
 A          R MSGCTL                    SFLCTL(MSGSFL)
 A                                      OVERLAY
 A                                      SFLINZ
 A                                      SFLPAG(1)
 A                                      SFLSIZ(2)
 A                                      SFLDSP SFLDSPCTL
 A  52
 AON52                                  SFLEND(*PLUS)
 A            PGMQ                      SFLPGMQ
要使用它,您将消息发送到程序消息队列,然后将MSGCTL作为屏幕事务的一部分写入。因此,如果您的屏幕上通常有一个名为record的单一记录格式,您可以执行以下操作:

pgmq = <Program Name>;
write msgctl;
exfmt record;
我有qmhsndpm和qmhrmvpm的原型,但是您可以很容易地在文档中查找它们和错误代码参数的格式

在事务开始时,调用SendDspfgMsg发送消息,调用ClearDspfMsg清除消息队列。PGMQ对于所有这些部分都应该具有相同的值,并且它将正常工作


注意:这不适用于RPG,因为您没有访问子过程的权限。如有必要,将程序转换为RPGLE,它将正常工作。或者在这种情况下使用子程序而不是子程序。

谢谢您的回复,但我无法修改此DSPF。我已解决通过显示消息的窗口呼叫Pgm的问题。感谢您的回复,但我无法修改此DSPF。我已经解决了通过显示消息的窗口调用Pgm的问题。