ページの先頭行へ戻る
Interstage Business Application ServerV10.1.0 COBOLアプリケーション開発リファレンス
Interstage

3.4.2 繰返し項目の操作

繰返し項目を、以下のようにsequenceデータ型にマッピングします。

表3.5 繰返し項目のマッピング

次元数

オブジェクト指向COBOL

1次元

sequence型(固定長)

2次元~5次元

使用できません

繰り返し定義のIDLファイルへの展開

ここでは、繰り返し定義のIDLファイルへの展開について説明します。

1次元の場合

1次元の場合は、sequence型にマッピングします。

オブジェクト指向COBOLの場合

データ型に4バイト整数、型名にa、繰り返し数に10を指定した場合の展開について示します。

    typedef sequence<long, 10> a ;

繰返し項目の操作

ここでは、繰返し項目の操作について説明します。

1次元の場合(オブジェクト指向COBOL)

繰返し項目の操作を以下に示します。以下のIDLファイルをコンパイルした場合、sequence型は、シーケンスクラスにマッピングされます。

IDLファイル
module ODsample {
      typedef sequence<long,10> sampleseq;
      interface seqtest {
               sampleseq op1(in sampleseq param1,
                        out sampleseq param2,
                        inout sampleseq param3);
      };
};

シーケンスクラスのファクトリメソッド、オブジェクトメソッド、プロパティを以下に示します。

表3.6 シーケンスクラス

カテゴリ

メソッド名/プロパティ名

機能

ファクトリメソッド

NEW-WITH-LENGTH

指定の長さでシーケンスクラスを作成します。

オブジェクトメソッド

GET-VALUE

指定番号の要素の値を取得します。

SET-VALUE

指定番号の要素に値を設定します。

CLONE

シーケンスクラスを複製します。

プロパティ

SEQ-MAXIMUM

シーケンス最大長の値を取得します。

SEQ-LENGTH

シーケンス長の値の取得/設定を行います。

繰返し項目の使用例
 METHOD-ID. OP1 AS "OP1" OVERRIDE.
* <IDL-INFO-START>
* sampleseq op1(in sampleseq param1,out sampleseq param2,inout sampleseq param3)
* <IDL-INFO-END>
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 SEQ-VALUE TYPE  CORBA-LONG.
 01 I         TYPE  CORBA-UNSIGNED-LONG.

 LINKAGE SECTION.
 01 復帰値  TYPE ODSAMPLE-SAMPLESEQ.
 01 PARAM1  TYPE ODSAMPLE-SAMPLESEQ.
 01 PARAM2  TYPE ODSAMPLE-SAMPLESEQ.
 01 PARAM3  TYPE ODSAMPLE-SAMPLESEQ.
 PROCEDURE DIVISION
         USING 
                   PARAM1
                   PARAM2
                   PARAM3
         RETURNING 復帰値 
                   .

*  IN PARAMETER
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
       INVOKE PARAM1 "GET-VALUE" USING I RETURNING SEQ-VALUE
     END-PERFORM.
     
*  OUT PARAMETER
     INVOKE SEQUENCE-LONG-10 "NEW" RETURNING PARAM2.
     MOVE 10 TO SEQ-LENGTH OF PARAM2.
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
       COMPUTE SEQ-VALUE = I * 100
       INVOKE PARAM2 "SET-VALUE" USING I SEQ-VALUE
     END-PERFORM.

*  INOUT PARAMETER
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
       INVOKE PARAM3 "GET-VALUE" USING I RETURNING SEQ-VALUE
       COMPUTE SEQ-VALUE = SEQ-VALUE * 100
       INVOKE PARAM3 "SET-VALUE" USING I SEQ-VALUE
     END-PERFORM.

*  RESULT
     INVOKE SEQUENCE-LONG-10 "NEW" RETURNING 復帰値.
     MOVE 10 TO SEQ-LENGTH OF 復帰値.
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
       COMPUTE SEQ-VALUE = I * 10000
       INVOKE 復帰値 "SET-VALUE" USING I SEQ-VALUE
     END-PERFORM.
                   
 END METHOD OP1.

ポイント

inモードまたはinoutモードのパラメタの場合は、実際のデータ領域はすでに存在するため新たに確保する必要はありません。outモードのパラメタまたは復帰値の場合には実際の領域をサーバアプリケーションで確保する必要があります。