COBOL プログラムの入力と出力のパラメーターを記述する、 プログラム呼び出しマークアップ言語 (PCML) ソース・ファイルを使用して、 COBOL プログラムを Java アプリケーションから呼び出すことができます。 Java アプリケーションは、PCML ソース・ファイルを参照して、 ProgramCallDocument オブジェクトを作成することによって、PCML を使用できます。 Java で PCML を使用する方法の詳細については、 http://www.ibm.com/eserver/iseries/infocenter の iSeries Information Center で、 『プログラミング』->『Java』->『IBM Toolbox for Java』->『プログラム呼び出しマークアップ言語』を参照してください。 PCML は、COBOL 形式と Java 形式間のデータ・タイプ変換を行います。
生成された PCML を受け取る IFS 出力ファイルの名前を指定するための INFOSTMF コンパイラー・パラメーターと一緒に PGMINFO(*PCML) コンパイラー・パラメーター を指定すると、ILE COBOL コンパイラーは、COBOL プログラムの PCML ソースを生成します。 PCML は、COBOL プログラムの、Procedure Division の USING と GIVING/RETURNING の句の内容、 および LINKAGE セクションの内容に基づいて、生成されます。 表 13 は、PCML での COBOL データ・タイプ に対するサポートを示しています。
COBOL データ・タイプ | COBOL の形式 | PCML でサポート されている | PCML データ・タイプ | 長さ | 精度 | カウント |
文字 | X(n) | はい | 文字 | n | ||
A(n) | はい | 文字 | n | |||
X(n) OCCURS DEPENDING ON M | はい | 構造体 | m | |||
A(n) OCCURS DEPENDING ON m | はい | 構造体 | m | |||
数字 | 9(n) DISPLAY | はい | ゾーン 10 進数 | n | 0 | |
S9(n-p)V9(p) DISPLAY | はい | ゾーン 10 進数 | n | p | ||
はい | パック 10 進数 | n | p | |||
はい | パック 10 進数 | n | p | |||
はい | 整数 | 2 | 16 | |||
はい | 整数 | 2 | 15 | |||
はい | 整数 | 4 | 32 | |||
はい | 整数 | 4 | 31 | |||
はい | 整数 | 8 | 63 | |||
サポートなし。 | ||||||
USAGE COMP-1 | はい | float | 4 | |||
USAGE COMP-2 | はい | float | 8 | |||
UCS2 | はい | UCS-2/グラフィック | n | |||
はい | 構造体 | m | ||||
グラフィック | G(n) | はい | UCS-2/グラフィック | n | ||
G(n) OCCURS DEPENDING ON M | はい | 構造体 | m | |||
指標 | USAGE INDEX | はい | 整数 | 4 | 31 | |
ブール | 1 | サポートなし。 | ||||
日付 | FORMAT DATE | サポートなし。 | ||||
時刻 | FORMAT TIME | サポートなし。 | ||||
タイム・スタンプ | FORMAT TIMESTAMP | サポートなし。 | ||||
ポインター | USAGE POINTER | サポートなし。 | ||||
プロシージャー・ポインター | PROCEDURE POINTER | サポートなし。 |
PROCEDURE DIVISION ヘッダーの USING 句で指定するすべてのパラメーター に対して、PCML が生成されます。このヘッダーの GIVING/RETURNING 句で指定するパラメーター に対して、PCML が生成されます。GIVING/RETURNING 項目が 4 バイトのバイナリー整数 でない場合は、エラーが出ます。生成された PCML で「inputoutput」として定義 された、USING 句で指定した項目は、情報を呼び出し側プログラムに戻すために使用できます。TYPE 文節で定義されている項目は、PCML エラーを受け取ります。 呼び出しプログラム (JAVA プログラムなど) が、RETURN-CODE 特殊レジスターの内容を見るには、 PROCEDURE DIVISION ヘッダーの USING 句で、RETURN-CODE 特殊レジスターを 指定する必要があります。OCCURS DEPENDING ON (ODO) のサブジェクト・ データ項目に対して PCML が正しく生成されるためには、 ODO のオブジェクト・データ項目が linkage section で定義され、 PROCEDURE DIVISION ヘッダーの USING 句でパラメーターとして指定されていなければなりません。
名前変更または再定義された項目には PCML は生成されません。
CRTCBLMOD を使用し、サービス・プログラムを作成する場合は、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");
CRTCBLMOD を使用し、サービス・プログラム以外のプログラムを作成する場合は、PCML からエントリー・ポイント属性を除去する必要があります。この属性は、サービス・プログラムを呼び出す場合にのみ必要だからです。
以下に、COBOL ソース・プログラムの例、およびこのプログラムに対して生成された 対応する PCML を示します。
5722WDS V5R4M0 060210 LN IBM ILE COBOL TESTLIB/MYPCML ISERIES1 06/02/15 12:09:25 ページ 2
ソ ー ス
STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN S コピー名 変更日付
1 000100 IDENTIFICATION DIVISION.
2 000200 PROGRAM-ID. MYPGM4.
000300
3 000400 DATA DIVISION.
4 000500 WORKING-STORAGE SECTION.
5 000600 01 RETN-VAL PIC 9(8) USAGE COMP-4.
000700
6 000800 LINKAGE SECTION.
7 000900 01 PARM-LIST.
8 001000 05 EMPL OCCURS 5 TIMES.
9 001100 10 NAMES PIC A(20).
10 001200 10 ADDRESSES PIC X(60).
11 001300 10 PHN-NUM PIC 9(11) DISPLAY.
12 001400 05 NUM-1A PIC S9(5)V9(3) PACKED-DECIMAL.
13 001500 05 NUM-2A PIC 9(5)V9(3) COMP.
14 001600 05 TAB-NUM-3A PIC S9(5)V9(3) COMP OCCURS 10 TIMES.
15 001700 05 NUM-4A PIC 9(5)V9(3) COMP-3.
16 001800 05 NUM-5A PIC S9(5)V9(3) COMP-3.
17 001900 05 NUM-6A PIC 9(4) BINARY.
18 002000 05 NUM-7A COMP-1.
19 002100 05 NUM-8A COMP-2.
20 002200 05 INTLNAME PIC N(10) NATIONAL.
002300
002400***************************************************************
002500* Test PCML for arrays of basic supported types.
002600***************************************************************
21 002700 PROCEDURE DIVISION USING BY REFERENCE PARM-LIST
002800 GIVING RETN-VAL.
002900 MAIN-LINE.
22 003000 MOVE 1 TO RETN-VAL.
23 003100 DISPLAY "THIS PGM TO BE CALLED BY A JAVA PGM".
24 003200 STOP RUN.
* * * * * ソ ー ス 仕 様 の 終 わ り * * * * *
以下に、CRTBNDCBL コマンドに、PGMINFO(*PCML) と INFOSTMF('/dirname/mypgm4.pcml') の オプションを指定してプログラムをコンパイルしたときに生成される PCML の例を示します。
<pcml version="4.0"> <!-- COBOL program: MYPCML --> <!-- created: 02/03/21 12:09:25 --> <!-- source: TESTLIB/QCBLLESRC(MYPCML) --> <programname="MYPCML" path="/QSYS.LIB/TESTLIB.LIB/MYPCML.PGM" returnvalue="integer"> <struct name="PARM-LIST" usage="inputoutput"> <struct name="EMPL" usage="inherit" count="5"> <data name="NAMES" type="char" length="20" usage="inherit"> <data name="ADDRESSES" type="char" length="60" usage="inherit"> <data name="PHN-NUM" type="zoned" length="11" precision="0" usage="inherit"> </struct> <data name="NUM-1A" type="packed" length="8" precision="3" usage="inherit"> <data name="NUM-2A" type="packed" length="8" precision="3" usage="inherit"> <data name="TAB-NUM-3A" type="packed" length="8" precision="3" count="10" usage="inherit"> <data name="NUM-4A" type="packed" length="8" precision="3" usage="inherit"> <data name="NUM-5A" type="packed" length="8" precision="3" usage="inherit"> <data name="NUM-6A" type="int" length="2" precision="16" usage="inherit"> <data name="NUM-7A" type="float" length="4" usage="inherit"> <data name="NUM-8A" type="float" length="8" usage="inherit"> <data name="INTLNAME" type="char" length="10" chartype="twobyte" ccsid="13488" usage="inherit"> </struct> <data name="RETN-VAL" type="int" length="4" precision="32" passby="value" usage="output"> </program></pcml>
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.