CRTPGM コマンドの使用

プログラムの作成 (CRTPGM) コマンドは、前に作成した 1 つ以上のモジュール、 および必要な場合には 1 つ以上のサービス・プログラムから プログラム・オブジェクトを 作成します。ILE モジュール作成コマンド、CRTRPGMOD、CRTCMOD、 CRTCBLMOD、または CRTCLMOD のいずれかによって作成したモジュールを バインドすることができます。

注:
必要なモジュールまたはサービス・プログラム (あるいはその両方) は、 CRTPGM コマンドを使用する前に作成しておかなければなりません。

CRTPGM コマンドを使ってプログラム・オブジェクトを作成する前に、以下のこ とを実行しなければなりません。

  1. プログラム名を決める。
  2. 1 つ以上のモジュールと、必要であれば、プログラム・オブジェクトにバインドしたい サービス・プログラムを識別する。
  3. 入り口モジュールを識別する。

    どのモジュールにプログラム入力プロシージャーが入っているかを、CRTPGM の ENTMOD パラメーターによって指示します。デフォルト値は ENTMOD(*FIRST) であり、MODULE パラメーターのリストで見つかった最初のプログラム入力プロシージャーを含むモジュールが入り口モジュールであることを意味しています。

    メイン・プロシージャーのモジュールが 1 つだけあるとします。すなわち、 1 つを除いてすべてのモジュールに NOMAIN が指定されていると仮定し、 ユーザーはデフォルト値 (*FIRST) を受け入れることができるとします。 二者択一的にユーザーは (*ONLY) を指定することができます。 この場合には、実際に 1 つだけのモジュールがメイン・プロシージャーを持っていることがチェックされます。 例えば、次の両方の状況において ENTMOD(*ONLY) を指定することができます。

    注:
    メイン・プロシージャーに複数の ILE RPG モジュールをバインドしている場合には、プログラムが呼び出された時に制御を受け取りたいモジュールの名前を指定する必要があります。 また、メイン・プロシージャーのモジュールが MODULE パラメーターに指定さ れたリストのメイン・プロシージャーのその他のモジュールに先行する場合に は、*FIRST を指定することができます。
  4. プログラムを使用する活動化グループを識別する。

    ユーザーのプログラムに特殊な要件がないか、 あるいは使用するグループが確定していない場合には、 活動化グループ QILE を指定してください。 一般に、アプリケーションをそれ自身の活動化グループで実行するのが望ましいことです。 したがって、アプリケーション・プログラムの名前を付けた後に活動化グループの名前を付けることができます。

    CRTPGM のデフォルトの活動化グループが *NEW であることに注意してください。 これはプログラムがその自身の活動化グループで実行され、 活動化グループはプログラムが終了する時に終了することを意味します。LR を設定してもしなくても、 プログラムは次に呼び出された時にデータの新しいコピーをもちます。 活動化グループの詳細については、活動化グループの指定を参照してください。

CRTPGM コマンドを使ってプログラム・オブジェクトを作成するには、 次のステップを行ってください。

  1. CRTPGM コマンドを入力する。
  2. コマンド・パラメーターに適切な値を入力する。

表 23 は CRTPGM コマンドのパラメーターとそれらのデフォルト値をリストしたものです。CRTPGM コマンド およびそのパラメーターについての全般的な説明は、Web サイト http://www.ibm.com/eserver/iseries/infocenteriSeries Information Center の中の『プログラミング』カテゴリーの『CL および API』の節を参 照してください。

表 23. CRTPGM コマンドのパラメーターとそのデフォルト値
パラメーター・グループ パラメーター (デフォルト値)
識別
PGM(ライブラリー名/プログラム名)
MODULE(*PGM)
プログラム・アクセス ENTMOD(*FIRST)
バインド
BNDSRVPGM(*NONE)
BNDDIR(*NONE)
実行時 ACTGRP(*NEW)
その他
OPTION(*GEN *NODUPPROC *NODUPVAR *WARN *RSLVREF)
DETAIL(*NONE)
ALWUPD(*YES)
ALWRINZ(*NO)
REPLACE(*YES)
AUT(*LIBCRTAUT)
TEXT(*ENTMODTXT)
TGTRLS(*CURRENT)
USRPRF(*USER)

CRTPGM コマンドを入力すると、システムは以下の処置を行います。

  1. リストされたモジュールをプログラム・オブジェクトになるものにコピー し、サービス・プログラムをこのプログラム・オブジェクトに連係する。
  2. プログラム入力プロシージャーが入っているモジュールを指定し、 このモジュールの最初のインポートを見つける。
  3. リストされている順序にモジュールをチェックし、最初のインポートを モジュール・エクスポートと突き合わせる。
  4. 最初のモジュールに戻り、次のインポートを見つける。
  5. 最初のモジュール内のすべてのインポートを分析解決する。
  6. 次のモジュールへ続け、すべてのインポートを分析解決する。
  7. すべてのインポートの分析解決が終わるまで、後続の各モジュール内のすべて のインポートを分析解決する。
  8. いずれかのインポートがエクスポートによって解決できない場合は、プログラム・オブジェクトを 作成せずにバインド処理は打ち切られる。
  9. すべてのインポートが解決されるとバインド処理は完了し、プログラム・オブジェクトが 作成される。

注:
変数またはプロシージャーをエクスポートするよう (EXPORT キーワードを使用して ) 指定した場合には、この変数またはプロシージャーの名前を、バインド済み プログラム・オブジェクト内の別のプロシージャーの変数またはプロシージャ ーと同じにすることが可能です。 この場合に予期しない結果となることが あります。 この状況の処理方法についての情報は、「ILE 概念」を参照して ください。

複数モジュールのバインド

この例では CRTPGM コマンドを使って 2 つの ILE RPG モジュールをプログラム TRPT にバインドする方法を 示します。このプログラムでは、以下のことを行います。

TRANSRPT、TRANSSVC、および TRNSDTA のソース・ステートメントは それぞれ、図 38図 36、および 図 39 に示されています。

  1. 最初にモジュール TRANSRPT を作成する。以下のとおり入力してください。
    CRTRPGMOD MODULE(MYLIB/TRANSRPT)
  2. 次に、以下のとおり入力して、モジュール TRANSSVC を作成する。
    CRTRPGMOD MODULE(MYLIB/TRANSSVC)
  3. プログラム・オブジェクトを作成するために、以下のとおり入力する。
    CRTPGM PGM(MYLIB/TRPT) MODULE(TRANSRPT TRANSSVC)
           ENTMOD(*FIRST) ACTGRP(TRPT)

CRTPGM コマンドは、ライブラリー MYLIB にプログラム・オブジェクト TRPT を作成します。

TRANSRPT が MODULE パラメーターに最初にリストされることに注意してくださ い。 ENTMOD(*FIRST) では、プログラム入力プロシージャーのある最初のモジュールを検索します。2 つのモジュールのうちプログラム入力プロシージャーを持っているのは 1 つだけですから、2 つのモジュールをいずれを先に入力しても構いません。

プログラム TRPT は指定の活動化グループ TRPT 内で実行します。 プログラムは、 他のプログラムがその資源に影響を与えないことを確実にするために指定の グループ内で実行します。

図 41 は、TRPT が実行される時に作成させる出力ファイルを示したものです。

図 41. TRPT のファイル QSYSPRT
Product name                    Quantity        Income
------------------------------  --------        ------------
Large                                245          330,750.00
Super                                 15           52,500.00
Super Large                            0                 .00
Super Jumbo                          123        2,952,000.00
Incredibly Large Super Jumbo          15          912,000.00
***Unknown***                         12                 .00
Total:         4,247,250.00