最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

9.10.対話型画面でのメッセージの扱い

[ Previous ] [ HOME ] [ Upper ] [ Next ]


RPGの対話型画面で、皆さんはメッセージをどのように出していますか。

例えば、「ここは入力必須です。」といったエラーメッセージや、「コード4114を登録しました。」といった通知メッセージの類です。

プログラムの作成中はメッセージは二の次ですが、実際ユーザーにとっては、プログラムで何をしているかはメッセージに結構頼ります。作った本人はデバッグをいやほどするので、分かりきっていることでも、他のプログラマーの作ったプログラムは、実行するのがおっくうでしょう?そんな時、ちゃんとメッセージが出てくると安心しませんか?最近のPCのソフトでも不親切なソフトも多いです。PC5250の転送で、「このデータは不適切?(忘れた)」とか出てくるのですが、どのレコードか分かりません。昔のPCサポートのころは、確かレコード番号が出ていたようで、すこしはましだったのに。

さて、ではどうやってメッセージを出しましょうか。以下のようなことがしたいのです。

  • メッセージは事前に定義して、誰でも照会でき、内容印刷も可能な、オブジェクトに入れる。
  • メッセージを簡単に取り出せること。
  • プログラム内の固有の文字と、合成できること。
  • RPGだけではなくCLPでも利用できること。

いろいろ手段はあると思いますが、私は、

メッセージファイルを作成して(CRTMSGF)、そこにメッセージ記述を登録しています。そして、取り出しプログラムも作成しています。

取り出しプログラムが重要です。RPGでは、メッセージ検索サブルーチン (SUBR23R3)を特殊サブルーチンとして準備していますが、これはあまり使えません。メッセージの合成が出来ないのです。そこで、以下のプログラムを汎用の外部サブルーチンとして、作成します。

メッセージid(*char 7)と合成したいデータ(*char 70)を渡し、合成されたメッセージ(*char 78)とSEVレベル(*char 2)を受け取ります。
合成したいデータは70バイトの文字タイプです。また、このSEVレベルはDDSのキーワードALARMを鳴らすか否かを判定しています。00なら鳴らさず、それ以外は鳴らすのです。(実は古いPCでなんとアラーム音のボリュームが無いものがあり、ビービーうるさいのでこのような措置にしました。)合成と取り出しは一つのコマンドRTVMSGで出来ます。後は、受け取ったメッセージを、画面の適当なところに出します。

例えば、MSGF USERMSGにメッセージID MNG0001で 「コード &1 を登録しました。」を登録したとします。データ入力プログラムは、データの書き出し後、メッセージ取り出し外サブに、MNG0001と1010をパラメータで渡します。外サブは、MNG0001と1010を元に、RTVMSGをして、合成されたメッセージ、「コード 1010 を登録しました。」を取り出し、再び、パラメータとして返します。データ入力プログラムはこのメッセージを画面に表示して(MNG0001というメッセージIDも表示するとデバッグに役立つ)、オペレータに登録完了を知らせる。

また、CLPでは、MSGF USERMSGにMSG0001「&1の処理準備中です。」MSG0002「&1の処理中です...」MSG0003「&1の処理完了しました。」を登録して、特別に作成したMSGQに、処理単位に送ってやると、そのMSGQをDSPMSGすれば、状況確認に利用できます。例えば、大きな更新処理で、いくつもの処理を含む場合に有効です。

このように、メッセージIDを利用すれば、メンテナンスも楽だし、リストも出来るし、CLPでも利用できます。便利ですよ!


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送