メールマガジン・バックナンバー

<<12-2月号の目次>>
*テクニカルヒントとQ&A
●実行時エラーのモニター
●HELP 機能キーの作成
●SQL プロシージャーの再作成
●プログラム・メッセージの表示
*障害と解決の実例
●PCOMM4.3にて平衡型接続時の問題
●CGUの文字イメージの編集でコピーすると間違った文字がコピーされる

テクニカルヒントとQ&A
実行時エラーのモニター
Q:
RPG の複数のバージョンで書かれたプログラムを使用する複合社内システムがあります。当社では、プログラムの作成に RPG IV を使い始めています。以前は、複合バッチの実行時に、メイン・ビジネス・プロセスにほとんど影響を与えずに、あるトランザクションの値を切り捨てることができました。これは、ユーザー検査と例外報告用に使用しているプロシージャーによって後で解決できます。今回、EVAL ステートメントを使用して同じコードを書くと、実行時エラーが発生します。新しいプログラムの EVAL ステートメント全部を、結果がオーバーフローしないようにコーディングしたわけではないので、障害が発生すると主要ビジネス・プロセスのリカバリーが難しくなる可能性があります。

IBM は従来の RPG 命令コードのコンパイル時に TRUNCNBR(*NO) の指定を許可していましたが、新しいバージョンでその逆 (TRUNCNBR(*YES)) が許可されないのは奇妙に思えます。一部の命令コードでは、(E) 拡張を使用して実行時エラーを発生時にトラップできることは知っていますが、マニュアルによれば EVAL の場合は当てはまらないようです。

結果フィールドの切り捨てを許容するプログラムの中で、こうしたタイプのエラーをモニターし、プログラムが次のステートメントに進むことができるようにするには、どうすればよいですか?



A:
IBM は、RPG に算術オーバーフローの処理を組み込んだことを後悔していると思います。 算術オーバーフローを処理することが決定されたのは、現在のようにプログラミング原理が確立されていない時代でした。RPG がオーバーフローを処理することで、ずさんなプログラミングが助長され、潜在的なパフォーマンスの問題が生じます。パフォーマンスの問題は、プログラムがオペレーティング・システムの例外処理ルーチンに制御を渡すときに起こります。例外ハンドラーはこのとき、その例外に対するハンドラーが存在するかどうかを判定する必要があります。存在する場合は、そのハンドラーに制御が渡されます。オーバーフローの処理には余分の命令が必要なので、特に同じプログラム内でこのことを繰り返し行うと、パフォーマンスに影響が及ぶ可能性があります。

オーバーフロー・エラーをトラップし、基本的に無視する ILE 条件ハンドラーを登録できます。また、障害を起こしているプログラムにオーバーフローが発生したことを通知するように、この条件ハンドラーを作成することも可能です。ただし、RPG による結果の高位切り捨て処理と同じことを RPG IV 内で行うのは困難です (不可能ではないかもしれませんが)。これは、オーバーフローが発生したときに、結果を条件ハンドラーが入手できないからです。


↑このページのトップへ


HELP 機能キーの作成
Q:
SDA 画面のフィールドについての Help 機能キーを作成することはできますか? SDA を使用して画面を作成するとき、SDA は作成した物理ファイルからのフィールドを使用します。画面上のフィールドを位置指定して、Help 機能キーを選択するとその特定のフィールドに関する情報を取り出せるようにするには、どうすればよいですか?



A:
DDS キーワード RTNCSRLOC (Return Cursor Location) を使用してその要件を満たすことができます。このキーワードは、ユーザーがディスプレイ・ファイル機能を実行するときに、プログラムにカーソル位置の情報を提供します。RTNCSRLOC を使用する形式としては、カーソルの行と列の検索と、カーソルが置かれているフィールド名の検索の 2 つを選択できます。

おそらくこのご質問では、フィールドに該当するヘルプ・ルーチンをプログラムが実行できるように、カーソルが置かれているフィールド名を検索する必要があります。キーワード RTNCSRLOC について詳しくは、「AS/400e シリーズ DDS 解説書」(SD88-5037) を参照してください。



SQL プロシージャーの再作成
Q:
SQL プロシージャーを初めて作成するときはうまくいくのですが、プロシージャーを再作成することができません。作成された *pgm を削除してみたのですが、create procedure は失敗して、次のメッセージが表示されます。 "Procedure ZDELCAN2 in MJV already exists."


A:
CREATE PROCEDURE を使用してプロシージャーを再作成する前に、DROP PROCEDURE を使用してプロシージャーを削除する必要があります。こうすれば、CREATE PROCEDURE を使用してプロシージャーを再作成できるようになります。


↑このページのトップへ


プログラム・メッセージの表示
Q:
ジョブ・スケジューラーを介してバッチ・ジョブ内で実行依頼されるプログラムがあります。このプログラムは、コマンド SNDPGMMSG MSG(&MSGDTA) によってメッセージを送信します。これらのメッセージはどこで見ることができるのでしょうか? DSPLOG QHST を使用してみましたが、ジョブの開始メッセージと終了メッセージが表示されるだけで、プログラムが送信したメッセージはありません。そのプログラムを対話式モードで実行すると、これらのメッセージはジョブ・ログに表示されます。



A:
メッセージはプログラム・メッセージ待ち行列に送信されており、ユーザーはジョブ・ログ内でメッセージを見ることができます。ジョブがアクティブである間は、DSPJOBLOG (ジョブ・ログの表示) コマンドを使用してこれらのメッセージを見ることができます。対話式の場合、ジョブはサインオフするまでアクティブになっています。バッチ・ジョブの場合は、ジョブが終了するとジョブはアクティブでなくなります。ジョブのロギング・レベルを適切に設定すれば、ジョブの終了時にジョブ・ログがスプールに入れられます。ジョブ・スケジューラーはバッチに従ってジョブを実行依頼するので、このロギング・レベルを設定して、ジョブの完了後にスプール・ファイル内にあるメッセージを見る必要があります。ロギング・レベルの制御は、ジョブ記述の LOG パラメーター、または SBMJOB コマンドによって行います。通常、ジョブの完了時に常にジョブ・ログをスプールに入れる場合は、LOG(4 0 *SECLVL) を使用します。



障害と解決の実例
PCOMM4.3にて平衡型接続時の問
PCOMM4.3(CSD1/2、V4.3.1も含む)にて平衡型接続をおこなった際、 PC側でセッションを切断してもAS/400側にSNAノード接続の信号が送られ続けるという現象が起こります。
その際、AS/400側でLINE・CTLの両方をOFFにしても信号が送られるためたえず活動状態になったままになります。
これは、CTL等を削除しても同じで自動構成の場合は、CTLが接続しにいった際の名前で作成されます。
例えば回復保留になった場合は、新規にXXXXX00のような名前で作成されます。 これはPCOMM4.3になった時にいくつかのパラメーターが追加されたせいで起こります。


回避方法としては、

1. セッションを終了した際、PCのDOSプロンプトより「csstop」の コマンドでSNAノード接続を止める。
2.セッションの構成ファイル(acgファイル)の中のPortセクション内の
RETRY_LINK_ON_DISCONNECT=1
RETRY_LINK_ON_FAILURE=1
となっているパラメーターを両方とも「0」に変更してください



↑このページのトップへ


CGUの文字イメージの編集でコピーすると間違った文字がコピーされる

(現象)
CGUの「ユーザー定義文字の作成または更新」で文字イメージの編集中に 「F14=コピー」の機能でx/4040〜x/55FE(標準の文字セット)からコピーしてくると、 正しくない文字がコピーされる場合があります。

(原因)
QSYS/QCGF2424のCCSIDが65535以外のコードページになっているためです。
(解決策)

CHGPFでCCSIDを65535に変更してください。


↑このページのトップへ
TOPPAGE

BELLDATA, Inc. Copyright reserved.