PCML の使用による Java からの RPG プログラムの呼び出し

Java™ から RPG プログラムまたはプロシージャーを呼び出す場合には、RPG プログラムまたはプロシージャーのパラメーターを記述したプログラム呼び出しマークアップ言語 (PCML) ソース・ファイルを使用することができます。Java アプリケーションは、PCML ソース・ファイルの参照を持つ ProgramCallDocument オブジェクトを作成することで PCML を使用することができます。

ILE RPG コンパイラーは、 コマンドまたは制御仕様書で PGMINFO(*PCML) コンパイラー・パラメーターを指定する場合、 ILE RPG プログラムまたはモジュール用に PCML 情報を生成します。コマンドで PGMINFO パラメーターの Location 部分に *STMF または *ALL を指定する場合、 PCML 情報をストリーム・ファイルに生成することができます。 INFOSTMF コマンド・パラメーターでストリーム・ファイルの名前を指定します。コマンドで PGMINFO パラメーターの Location 部分に *MODULE または *ALL を指定する場合、 または制御仕様書で PGMINFO キーワードを指定する場合、 PCML 情報をモジュールに直接生成できます。この情報は、後で QBNRPII API を使用して取り出すことができます。

CRTBNDRPG の場合、PCML は *ENTRY PLIST つまりメイン・プロシージャーの「プロシージャー・インターフェース」の内容に基づいて生成されます。CRTRPGMOD の場合も、PCML はエクスポート・サブプロシージャー (Java 固有のメソッドは除く) の「プロシージャー・インターフェース」に基づいて生成されます。

CRTRPGMOD を使用し、サービス・プログラムを作成する場合は、ProgramCallDocument クラスの setPath(String) メソッドを使用して、Java コードでサービス・プログラムを指定します。 次に、例を示します。
     AS400 as400;
     ProgramCallDocument pcd;
     String path = "/QSYS.LIB/MYLIB.LIB/MYSRVPGM.SRVPGM";
     as400 = new AS400 ();
     pcd = new ProgramCallDocument (as400, "myModule");
     pcd.setPath ("MYFUNCTION", path);
     pcd.setValue ("MYFUNCTION.PARM1", "abc");
     rc = pcd.callProgram("MYFUNCTION");
変更の始まり

PCML での大/小文字混合名の獲得

制御仕様書の PGMINFO キーワードのパラメーターの 1 つとして *DCLCASE を指定した場合、PCML は、プログラム内のコーディングで使用されたケース (大/小文字) と同じケースの名前で生成されます。例えば、以下のソースの場合、PGMINFO(*DCLCASE) が指定されているため、PCML 内の名前は "myFunction" および "parm1" になります。
     CTL-OPT PGMINFO(*DCLCASE) NOMAIN;
     DCL-PROC myFunction export;
        DCL-PI *N;
           parm1 CHAR(10);
        END-PI;
     END-PROC;
Java コードは、以下のように、それらの名前に同じケース (大/小文字) を使用します。
     AS400 as400;
     ProgramCallDocument pcd;
     String path = "/QSYS.LIB/MYLIB.LIB/MYSRVPGM.SRVPGM";
     as400 = new AS400 ();
     pcd = new ProgramCallDocument (as400, "myModule");
     pcd.setPath ("myFunction", path);
     pcd.setValue ("myFunction.parm1", "abc");
     rc = pcd.callProgram("myFunction");
変更の終わり