RPG

245. エラー・メッセージと MSGLOC

先の「244. POPUPウインドウを表示すると親ウィンドウが消えてしまう ?!」でも
説明したように本来、i5/OS にある機能を使えていない例が非常に多い。
十分、技術に精通しているIBM i のユーザー(開発者)なら何だ、いまさらそんなことを ?!
とお思いになると思うがエラー・メッセージを出力する機能(ERRMSG, SFLMSG )が
十分に使い切れていないケースが非常に多い。

23 〜24行目にフィールドにメッセージを出力して
エラー・フィールドにカーソルを位置づけて反転イメージに変更する、といった具合で
これを「これをうちではエラー・メッセージと呼んでいます。」という開発者もいる。

ここで敢えてエラー・メッセージの出力方法を紹介するのは、
エラー・メッセージの出力方法を学習してもらいたいからである。

フィールドによるエラー出力
 A            JUTKCD    R    4A  B  4 17
 A 61                                   DSPATR(RI)
 A 61                                   DSPATR(PC)
                 :
 A 99         ERRMSG        80A  O  23 2
 A 99                                   DSPATR(RI)
 A 99                                   DSPATR(HI)

この方法はプログラムの中でフィールド ERRMSG にメッセージを MOVE しなければならない。
またキー・ボードはロックされずに RESET も行わない。
これはIBM i の一般的なエラー・メッセージではないし、リセット操作もない。

ERRMSG キー・ワードによるエラー出力
 A            JUTKCD    R    4A  B  4 17
 A  61                                  ERRMSG('得意先コードの誤りです' 61)

たったこれだけである。SFLMSG のときも大差はない。
どちらが簡単だろうか ?
この場合、エラー・メッセージは通常のエラー・メッセージと同じように出力され
カーソルの位置づけ(DSPATR(PC)) や反転イメージ(DSPATR(RI)) も i5/OSによって自動的に行われる。
エラーが発生するとキー・ポードがロックされて RESET キーを押す必要もある。
つまり IBM i の標準的なエラー処理と同等なものとなる。
独自のエラー処理にしてしまうとIBM i のユーティリティーとは異なった操作を
エンド・ユーザーに強いることになってしまう。

一般的な企業のシステム室による開発のほうが SSO に比べてはるかに技術力も高く
MSGF や SFLMSG によるメッセージよる出力の例も珍しくない。
なお 23行目にメッセージを出したいのであれば
ファイル・レベル・キーワードとして MSGLOC を MSGLOC(23) として CRTDSPF すれば
エラー・メッセージは 23行目に出力される。
MSGLOC は飾りではない。

GUI化や Web化を唱える前に IBM i の正規の使用方法をぜひ学んで頂きたい。