最近次のような障害を聞くことがある。
①1回目のILE-RPGプログラム実行では正しいのだが
続けて2回目を実行すると障害が発生したり
2回目の実行がうまく行かないことが多い。
②1回目のILE-RPGプログラム実行の速度と
2回目の実行の速度がかなりちがう。
というような障害が発生しているらしい。
このほとんどの原因はILE-RPGのコンパイルの方法が
間違っていることに原因がある。
活動化グループの指定が誤っている
[誤まったコンパイルの方法]
CRTBNDRPG OBJLIB/MYPGM SRCFILE(MYSRCLIB/QRPGLESRC)
…このコンパイルでは省略時の活動化グループが
IBM が定める QILE という明示的な名前の活動化グループとして
コンパイルされてしまう。
結果的にどうなるかというとこのプログラムでいくら
SETON LR して終了してもプログラムはCPUノメモリーに
残ったままであり次回に呼び出されると *INZSR ルーチンは
実行されることがなく動作を始めてしまう。
従って2回目の実行では *INZSR で記述されているロジックは
実行されないので期待とは異なる動きになってしまう。
米国ではこのことはIBMユーザーに雑誌などで
よく知られているが日本のユーザーでは
まだまだ知っている人は少ないようだ。
[正しいコンパイルの方法]
CRTBNDRPG PGM(OBJLIB/MYPGM) SRCFILE(MYSRCLIB/QRPGLESRC) DFTACTGRP(*NO)
ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)
[解説]
活動化グループの指定は必ず
DFTACTGRP(*NO) ACTGRP(*NEW)
を明示的に指定すること。
ソース・デバッグを可能にするためには
DBGVIEW(*SOURCE)
にする必要がある。
権限に制限されないように
AUT(*ALL)
も必要である。
これが正しいILE-RPGのコンパイル手法である。