RPG

112. エラー・メッセージ表示のテクニック (1)

DSPF上でのエラー・メッセージの表示の方法についていくつか紹介する。

意外と多くの開発者が、ユーザー独自の通常のフィールドをメッセージ用に割り当てて

エラー・メッセージとして表示していることに驚く。

DSPFには非常に便利なメッセージの表示機能が提供されているのでこれを使わない手はない。

DSPF には ERRMSG, ERRMSGID, SFLMSG および SFLMSGID キーワードの4つが
用意されている。

SFLMSGKEY もあるが CLP などによる外部呼出しが必要となるので
使用はあまりお奨めできない。

DSPF のこれらのキーワードを使用する理由は、

  • エラー・メッセージを 24行目に表示するためメッセージ・フィールドの領域が必要でない。
  • フイールドを反転させたりカーソルを位置づける処理が不要。
  • エラー・メッセージの表示と同時に画面を入力禁止にすることができる。
  • 操作が OS400の操作と統一することができる。
  • 外部メッセージ・ファイルを使用することによってメッセージの保守や外国語対応が容易となる。

ことが挙げられる。

まず最初にこれらのキーワードの基本的な使用方法を紹介して、

次に少し変わったメッセージの利用方法を次の章で紹介しよう。

【 ERRMSG の使い方 】

SFLMSG は 基本的には ERRMSGキーワードと同じ使用方法であるが

SFLMSGSFLCTLレコードにのみ定義する。

     A                                      MSGLOC(24)
     A          R DSPHEAD 
                   :
     A            JUDATE         6Y 0B  3 73TEXT(' 受注日 ')         
     A  64                                  ERRMSG(' 受注日の誤りです。' 64)

この例では標識 64*ON になって表示されるとエラー・メツセージは 24行目に表示されて

DSPF は入力禁止となる。

操作員がリセット・キーを押すと、

ERRMSG(' 受注日の誤りです。' 64) 

に標識 64 が記述されているので 標識 64 は、このリセット操作と同時に *OFF に設定される。

RPG で標識 64*OFF にする記述は必要でない。

【 ERRMSGID の使い方 】

SFLMSGID は 基本的には ERRMSGIDキーワードと同じ使用方法であるが

SFLMSGIDSFLCTLレコードにのみ定義する。

     A            JUDATE         6Y 0B  3 73TEXT(' 受注日 ')         
     A  64                                  ERRMSGID(MSG0007 MYLIB/MYMSGF 64)

この記述はライブラリー MYLIB のメッセージ・ファイル MYMSGF のメッセージ識別 MSG0007

エラー・メッセージとして出力することを意味している。

メッセージ・ファイルは CRTMSGF コマンドで作成して、WRKMSGD コマンドによって簡単に保守

することができる。

言語によっては OVRMSGF を使用すると日本語用のメッセージ・ファイルの使用と

英語のメッセージ・ファイルの使用を実行時に簡単に切り替えることができる。

メッセージ・ファイルの利点はまだある。

どうせなら「入力した xxxxx は正しくありません。」のように操作員の入力した値も

合わせて動的なメッセージとして表示すれば、よりわかりやすいものとなるであろう。

データ・ベースのフィールド値を表示してもよい。

     A            JUDATE         6Y 0B  3 73TEXT(' 受注日 ')         
     A  64                                  ERRMSGID(MSG0007 MYLIB/MYMSGF 64 &MSGDTA)
        :
     A            MSGDTA         6A  P

とすれば &MSGDTA をメッセージの中に埋め込むことができる。

メッセージは

     '入力した &N は正しくありません。' 

のように定義しておけばよい。

【 サブ・ファイル・レコードへのメッセージ 】

SFL に対するメッセージは SFLCTL レコード上に SFLMSG または SFLMSGID で定義

するとともにエラー行のフィールドを下記のように示す必要がある。

      A          R SFREC01                   SFL
                    :
      A            SHSCOD         4A  B  8 58TEXT(' 品種 コード')
      A  63                                  DSPATR(PC RI)     
                    :
      A          R SFCTL01                   SFLCTL(SFREC01)            
      A                                      TEXT(' SFLコントロール ')
                     :
      A  63                                  SFLMSG(' 品種 コード の誤りです。' 63)