Hitachi

TP1/COBOL adapter for Cosminexus ユーザーズガイド


2.2.3 DEPENDING ON データ名3を指定した可変長データだけの構文規則,一般規則

〈この項の構成〉

(1) 構文規則

  1. DEPENDING ON データ名3を指定すると,反復回数を可変とすることができます。

  2. データ名3は,OCCURS句が指定されたデータ項目を含む最上位項目の下位項目として定義しなければなりません。

    正しい例(最上位項目WKGRPの下位項目として,データ名3WKCNTを定義している)
    01   WKGRP.
     02  WKCNT   PIC 9(4).
     02  WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
    誤った例(最上位項目WKGRPの下位項目として,データ名3WKNOTFOUNDが定義されていない)
    01   WKGRP.
     02  WKITEM  OCCURS 10 DEPENDING ON WKNOTFOUND  PIC X.
  3. データ名3をOCCURS DEPENDING ONを指定したデータ項目のあとの文字位置を占める位置に定義してはなりません。

    正しい例(可変反復データ項目WKITEMより前にWKCNTを定義している)
    01   WKGRP.
     02  WKCNT   PIC 9(4).
     02  WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
    誤った例(可変反復データ項目WKITEMより後にWKCNTを定義している)
    01   WKGRP.
     02  WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
     02  WKCNT   PIC 9(4).
  4. また,接頭辞および接尾辞を指定したCOPY文で展開するために,定義したデータ名と異なるデータ名3を指定している場合は,Bean生成ウィザードで定義したデータ名の別名に,データ名3と同じ名称を指定してください。

(2) 一般規則

  1. DEPENDING ON データ名3が指定されたOCCURS句の繰り返し回数は,以下に示す時点で変更されます。変更されるまでは,OCCURS句に指定された最大繰り返し回数を繰り返し回数とします。

  2. JavaUAPからCOBOL SPP/MHPに渡す入力引数に定義されたデータ名3にsetterメソッドで値を設定したときの値を繰り返し回数とします。(※1)(※2)

    <入力引数の定義例>
    01  WKGRP.
     02 WKCNT   PIC 9(4).
     02 WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
    <JavaUAPの引数設定例>
    :
    bean.setWkcntI(new BigDecimal(4));     // 指定された4に,繰り返し回数を変更する
    bean.setWkitemI("A",1);              // WKITEMの1番目の要素に"A"を設定する
    :
    bean.setWkitemI("D",4);              // WKITEMの4番目の要素に"D"を設定する
    :
  3. COBOL SPP/MHPから出力引数を返された際に,データ名3の領域に格納されている値を繰り返し回数とします(※2)。なお,出力引数中の可変繰り返しデータの繰り返し回数をJavaUAPで変更することはできません。

    <出力引数の定義例>
    01  WKGRP2.
     02 WKCNT2  PIC 9(4).
     02 WKITEM2 OCCURS 10 DEPENDING ON WKCNT2 PIC X.
    <JavaUAPの引数参照例>
    :
    bean.call(…);            // COBOL SPPから受け取った出力引数中のWKCNT2に5が
                              // 入っていると,WKITEM2の繰り返し回数も5になる
    String item1 = (String)bean.getWkitemO(1); // WKITEM2の1番目の要素を取得する
    :
    String item5 = (String)bean.getWkitemO(5); // WKITEM2の5番目の要素を取得する
    :
  4. 添字を指定してデータの設定および参照を行う場合,1から繰り返し回数までの範囲の添字を指定できます。範囲外の添字を指定した場合,setterメソッドおよびgetterメソッドで例外が発生します。

注※1

COBOL SPP/MHPに渡す入力引数に定義されたデータ名3を再定義したデータ項目に,setterメソッドで値を設定しても,繰り返し回数は変更されません。

<入力引数の定義例>
01  WKGRP.
 02 WKCNT   PIC 9(4).
 02 WKCNTR  REDEFINES WKCNT  PIC 9(4).
 02 WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
<JavaUAPの引数設定例>
:
bean.setWkcntrI(new BigDecimal(8));  // DEPENDING ONに指定されたデータ名ではないため,
                                  // WKITEMの繰り返し回数は変更されない
bean.setWkcntI(new BigDecimal(3));   // DEPENDING ONに指定されたデータ名であるため,
                                  // WKITEMの繰り返し回数を指定された3に変更する
:

注※2

データ名3の値が,OCCURS句の整数までの範囲外の場合,COBOL SPP/MHPに渡す入力引数に定義されたデータ名3を再定義したデータ項目に,setterメソッドで値を設定しても,繰り返し回数は変更されません。

<入力引数の定義例>
01  WKGRP.
 02 WKCNT   PIC 9(4).
 02 WKITEM  OCCURS 10 DEPENDING ON WKCNT  PIC X.
<JavaUAPの引数設定例>
:
bean.setWkcntrI(new BigDecimal(13));  // DEPENDING ONに指定された繰り返し回数を超えて
                                      // いるため,WKITEMの繰り返し回数は変更されない
bean.setWkcntI(new BigDecimal(3));   // DEPENDING ONに指定された繰り返し回数の範囲内で
                                     // あるため,WKITEMの繰り返し回数を変更する
: