Apdesigner プログラマーズガイド
目次 索引 前ページ次ページ

第2部 アプリケーション開発編> 第8章 CORBAサーバアプリケーションを開発する> 8.4 留意事項

8.4.2 繰返し項目の操作

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

[繰返し項目のマッピング]

次元数

オブジェクト指向COBOL

1次元

sequence型(固定長)

2次元〜5次元

使用できません

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

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

++1次元の場合、sequence型にマッピング

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);
      };
};

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

[シーケンスクラスクラス]

カテゴリ

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

機能

ファクトリメソッド

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モード、復帰値の場合には実際の領域をサーバアプリケーションで確保する必要があります。
sequence型と同様に、in、 inoutモードの場合は、データ領域は呼び出し側にあるため確保する必要はありませんが、out、復帰値の場合には、データ領域をサーバアプリケーションに確保する必要があります。

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 1998-2006