CRTBNDRPG
によるコンパイルの都度に結果がフラフラと異なるような不思議な
現象に悩まされたことはないだろうか ?
もしそのような現象に出くわしたとしたら多くの原因は活動化グループが
*NEW
ではなく *DFTACTGRP
になっていることに起因している可能性が高い。
ILE-RPGソースをコンパイルするときは CRTRPGMOD + CRTPGM
でコンパイルするか、または
多くは CRTBNDRPG
コマンドによってコンパイルするのが一般的である。
省略値によるコンパイルであれば
CRTBNDRPG PGM(MYLIB/MYPGM) SRCFILE(PGMRLIB/QRPGLESRC) AUT(*ALL)
のようにして コンパイルする。
ところがこのコンパイルの結果を DSPPGM
コマンドで確認してみると
プログラム情報の表示
画面
プログラム . . . . . . : TESTZERO ライブラリー . . . . . : TEST
所有者 . . . . . . . . : QTR
プログラム属性 . . . . : RPGLE
詳細 . . . . . . . . . : *BASIC
プログラム作成情報 :
プログラム作成日/時刻 . . . . . . . . . . . . : 14/10/18 14:19:34
プログラムのタイプ . . . . . . . . . . . . . . : ILE
プログラム入力プロシージャー・モジュール . . . : TESTZERO
ライブラリー . . . . . . . . . . . . . . . .. : QTEMP
活動化グループ属性 . . . . . . . . . . . . . . : *DFTACTGRP
共用活動化グループ . . . . . . . . . . . . . . : *NO
ユーザー・プロファイル . . . . . . . . . . . . : *USER
借用権限の使用 . . . . . . . . . . . . . . . . : *YES
コード化文字セット識別コード . . . . . . . . . : 65535
モジュールの数 . . . . . . . . . . . . . . . . : 1
のように 活動化グループ属性: *DFTACTGRP
となってしまい、*NEW
とすることができない。
*DFTACRGRP
という活動化グループは QILE
という活動化グループ であり
実行ジョブが完全に終了するまではプログラムは一旦、ロードすると
メモリーに留まり続けるのである。
これは RPG III での実行とは異なるので期待どおりの結果が得られない場合がある。
米国のユーザーは、このことはよく承知していて活動化グループは *NEW
で作成することが
暗黙の了解となっている。
それどころか *DFTACTGRP
としてコンパイルするとプロシージャーの定義そのものが
コンパイル・エラーを引き起こしてしまうのである。
となると *DFTACTGRP
でコンパイルすることは避けるべきとなる。
活動化グループが *NEW
であれば RPG III の終了と同じようにプログラムの終了とともに
プログラムはメモリから正しく削除される。
( 実際はメモリに残るのであるが、再ロードのときには、プログラムで使用しているすべての
変数やフィールドも初期化される。これに対して省略時の活動化グループ(QILE
) であれば
QILE
の終了まではプログラムは再ロードされると以前に使用されていた変数値やフィールド値も
そのまま再利用されてしまう。)
それでは一体 *NEW
としてコンパイルするには、どのように指定すればよいのだろうか ?
CRTBNDGRP
+ [F4キー] を押してから、省略時の活動化グループ(初期値:*YES
) を *NO
にして
実行キーを押すと次のように表示が変更される。
バインド RPG PGM の作成 (CRTBNDRPG) 選択項目を入力して,実行キーを押してください。 プログラム . . . . . . . . . . > MYPGM 名前 , *CTLSPEC ライブラリー . . . . . . . . > MYLIB 名前 , *CURLIB ソース・ファイル . . . . . . . QRPGLESRC 名前 , QRPGLESRC ライブラリー . . . . . . . . > MYSRCLIB 名前 , *LIBL, *CURLIB ソース・メンバー . . . . . . . *PGM 名前 , *PGM ソース・ストリーム・ファイル 生成重大度レベル . . . . . . . 10 0-20 テキスト ' 記述 ' . . . . . . . *SRCMBRTXT 省略時の活動化グループ . . . . > *NO *YES, *NO 活動化グループ . . . . . . . . QILE 名前 , QILE, *NEW, *CALLER BINDING ディレクトリー . . . . *NONE 名前 , *NONE ライブラリー . . . . . . . . 名前 , *LIBL, *CURLIB... 値の続きは+
この「活動化グループ」を QILE
から *NEW
に変更してコンパイルすると
作成されたプログラム・オブジェクトの活動化グループは次のように *NEW
としてオブジェクトを
作成することができるのである。
プログラム情報の表示
画面 7 の 1
プログラム . . . . . . : TESTZERO ライブラリー . . . . . : TEST.COM
所有者 . . . . . . . . : QTR
プログラム属性 . . . . : RPGLE
詳細 . . . . . . . . . : *BASIC
プログラム作成情報 :
プログラム作成日/時刻 . . . . . . . . . . . . : 14/10/18 14:13:39
プログラムのタイプ . . . . . . . . . . . . . . : ILE
プログラム入力プロシージャー・モジュール . . . : TESTZERO
ライブラリー . . . . . . . . . . . . . . . . : QTEMP
活動化グループ属性 . . . . . . . . . . . . . . : *NEW
共用活動化グループ . . . . . . . . . . . . . . : *NO
ユーザー・プロファイル . . . . . . . . . . . . : *USER
借用権限の使用 . . . . . . . . . . . . . . . . : *YES
コード化文字セット識別コード . . . . . . . . . : 65535
モジュールの数 . . . . . . . . . . . . . . . . : 1
したがって正しい CRTBNDRPG
によるコンパイル・コマンドとは
CRTBNDRPG PGM(TEST.COM/TESTZERO) SRCFILE(R540SRC/QRPGLESRC) DFTACTGRP(*NO) ACTGRP(*NEW) AUT(*ALL)
である。
これで ILE-RPG の動作結果が安定しない、という悩みから解放されるにちがいない。