CL CALL コマンドを使用したパラメーターの受け渡し

ILE プログラムを実行する時にそのプログラムにパラメーターを渡すには、CL CALL コマンドの PARM オプションを使用します。

CALL PGM(program-name)
     PARM(parameter-1 parameter-2 ... parameter-n)

パラメーターは、次のようにキーワードを指定せずに入力することもできます。

CALL library/program-name (parameter-1 parameter-2 ... parameter-n)

各パラメーター値は、CL プログラム変数として、あるいは次の 1 つとして指定することができます。

ILE RPG プロシージャーがプログラム入力プロシージャーであるようなプログラムに対してパラメーターを渡す場合には、 そのプログラムには、唯一 *ENTRY PLIST が指定されていなければなりません。(PARM ステートメント中で) 後に続く パラメーターは、CALL コマンドを介して渡されるものに 1 対 1 の関係で対応していなければなりません。

パラメーターが処理される方法についての詳細な説明は、「CL プログラミング」 の『プログラム間のパラメーターの受け渡し』のセクションの CALL コマンドを参照してください。

例えば、最初の開始時にプログラム EMPRPT2 には、正しいパスワードが渡されなければなりません。 そうでない場合には、そのプログラムは実行しません。 図 47 はそのソースを示したものです。

  1. プログラムを作成するためには、次を入力してください。
    CRTBNDRPG PGM(MYLIB/EMPRPT2)
  2. プログラムを実行するためには、次を入力してください。
    CALL MYLIB/EMPRPT2 (HELLO)

    CALL コマンドが出されると、そのコマンドによって渡されたパラメーターの 内容が保管され、プログラム・パラメーター PSWORD がその位置を示します。 次にプログラムは PSWORD の内容がプログラムに保管された値 ('HELLO') と一致するかどうかを調べます。 この場合には、2 つの値が同じなので、プログラムは実行を続行します。

図 47. 実行時にパラメーターを要求する ILE RPG プログラム
      *===============================================================*
      * プログラム名:   EMPRPT2                                       *
      * 関連ファイル:   EMPMST   (物理ファイル)                       *
      *                 PRINT    (PRINTER ファイル)                   *
      * 説明:           このプログラムは、入力されたパスワードが      *
      *                 正しい場合に、ファイル EMPMST に保管されている*
      *                 社員情報を印刷します。コマンド行に            *
      *                 "CALL ライブラリー名/EMPRPT2 (パスワード)" を *
      *                 入力してプログラムを実行します。              *
      *                 ここで、このプログラムのパスワードは          *
      *                 'HELLO' です。                                *
      *===============================================================*
     FPRINT     O    F   80        PRINTER
     FEMPMST    IP   E           K DISK
     IEMPREC        01
      *-----------------------------------------------------------------*
      * 入力パラメーター・リストはこのプログラムの中で指定されます。    *
      * PSWORD というパラメーターが 1 つあり、これは                    *
      * 長さ 5 桁の文字フィールドです。                                 *
      *-----------------------------------------------------------------*
     C     *ENTRY        PLIST
     C                   PARM                    PSWORD          5
      *-----------------------------------------------------------------*
      * このプログラムのパスワードは 'HELLO' です。フィールド PSWORD    *
      * に 'HELLO' が入っているかチェックします。                       *
      * 入っていない場合には、最終レコード標識 (LR) と *IN99 がオンに   *
      * 設定されます。*IN99 はメッセージの印刷を制御します。            *
      *-----------------------------------------------------------------*
     C     PSWORD        IFNE      'HELLO'
     C                   SETON                                        LR99
     C                   ENDIF
     OPRINT     H    1P                     2  6
     O                                           50 'EMPLOYEE INFORMATION'
     O          H    1P
     O                                           12 'NAME'
     O                                           34 'SERIAL #'
     O                                           45 'DEPT'
     O                                           56 'TYPE'
     O          D    01N99
     O                       ENAME               20
     O                       ENUM                32
     O                       EDEPT               45
     O                       ETYPE               55
     O          D    99
     O                                           16 '***'
     O                                           40 'Invalid Password Entered'
     O                                           43 '***'

図 48 は、EMPRPT2 ソースによって参照される DDS を示したものです。

図 48. EMPRPT2 の DDS
     A*****************************************************************
     A* 説明:  これは物理ファイル EMPMST の DDS です。                *
     A*        これには 1 つのレコード様式 EMPREC が入っています。    *
     A*        このファイルには、会社の各社員ごとに 1 レコードが      *
     A*        入っています。                                         *
     A*****************************************************************
     A*
     A          R EMPREC
     A            ENUM           5  0       TEXT('EMPLOYEE NUMBER')
     A            ENAME         20          TEXT('EMPLOYEE NAME')
     A            ETYPE          1          TEXT('EMPLOYEE TYPE')
     A            EDEPT          3  0       TEXT('EMPLOYEE DEPARTMENT')
     A            ENHRS          3  1       TEXT('EMPLOYEE NORMAL WEEK HOURS')
     A          K ENUM