RPG

516. メッセージつきの画面を初期表示するには

DSPFのあるレコードをメッセージとともに表示する方法を紹介する。
例えば次のような表示である。
_

DFUのようにレコードを更新したとき
初期画面に戻って「1レコードを更新しました」と
メッセージを表示して初期画面に戻りたいとする。
読者はそれは簡単。ERRMSGまたはERMSGIDキー・ワードで
メッセージを表示すれはよいと思うかも知れないが
それはできない。
あるいはSFLMSGを使えば良いという人もいるかも知れないが
それもできない。
なぜならこれらのMSGキー・ワードはある表示レコードが
事前に表示されていて同じ表示レコードをERMSGキー・ワードで
表示するときだけ有効に働くからである。
このことはIBMマニュアルにもERRMSGキー・ワードの説明に
書かれている。
つまりもとの画面にメッセージを表示することはできても
いきなりメッセージさきの画面を始めて表示することは難しいのである。
意外とメッセージつきの表示画面をいきなり表示することは簡単ではないのだ。

_

それではどのようにすればこのメッセージつきの画面を
表示することができるのだろうか?

それには2つの条件が必要となる。

①表示レコードにOVERLAYキー・ワードが必要

②自分自身に状況メッセージ(*STATUS)で出力すること

状況メッセージとは「..を実行中です」のように進行状況を表示する
メッセージである。
例えば次のように表示する。

       DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)
        :
       CHGVAR &MSG VALUE('1レコードを追加しました。')
       SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&STSMSG) + 
             TOPGMQ(*EXT) MSGTYPE(*STATUS)    

このメッセージ表示を実行直後にOVERLAYを指定した表示レコードを
表示すると初めての表示であっても画面左下に
1レコードを追加しました。」とのメッセージが表示される。
このサンプルがCLPであることからわかるように RPGで同じことを実現するには
API または RPGの中で同じCLPコマンドを呼び出す必要がある。
後者のほうがやさしいだろう。
_