DSPF上でのエラー・メッセージの表示の方法についていくつか紹介する。
意外と多くの開発者が、ユーザー独自の通常のフィールドをメッセージ用に割り当てて
エラー・メッセージとして表示していることに驚く。
DSPFには非常に便利なメッセージの表示機能が提供されているのでこれを使わない手はない。
DSPF には ERRMSG
, ERRMSGID
, SFLMSG
および SFLMSGID
キーワードの4つが
用意されている。
SFLMSGKEY
もあるが CLP
などによる外部呼出しが必要となるので
使用はあまりお奨めできない。
DSPF のこれらのキーワードを使用する理由は、
- エラー・メッセージを 24行目に表示するためメッセージ・フィールドの領域が必要でない。
- フイールドを反転させたりカーソルを位置づける処理が不要。
- エラー・メッセージの表示と同時に画面を入力禁止にすることができる。
- 操作が OS400の操作と統一することができる。
- 外部メッセージ・ファイルを使用することによってメッセージの保守や外国語対応が容易となる。
ことが挙げられる。
まず最初にこれらのキーワードの基本的な使用方法を紹介して、
次に少し変わったメッセージの利用方法を次の章で紹介しよう。
【 ERRMSG の使い方 】
SFLMSG
は 基本的には ERRMSG
キーワードと同じ使用方法であるが
SFLMSG
は SFLCTL
レコードにのみ定義する。
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
キーワードと同じ使用方法であるが
SFLMSGID
は SFLCTL
レコードにのみ定義する。
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)