付録A.1 TP1/COBOLアクセス用Bean生成時のCOBOL定義注意事項/制限事項
TP1/COBOLアクセス用Bean生成時は,COBOL SPP/MHP引数定義を別ファイルにして,入力用/出力用COBOLデータ定義として指定する必要があります。このCOBOLデータ定義において,変更が必要な項目を表A-1に示します。
なお,表A-1には制限事項も含めて記述しています。制限事項に該当する場合は,COBOL SPP/MHPの引数を変更してください。
項番 |
COBOL定義 |
該当バージョン |
回避方法詳細 |
---|---|---|---|
1 |
EXTERNAL句 |
全バージョン |
(1)に記載 |
2 |
GLOBAL句 |
全バージョン |
(2)に記載 |
3 |
BLANK WHEN ZERO句 |
全バージョン |
(3)に記載 |
4 |
SYNCHRONIZED句 |
全バージョン |
(4)に記載 |
5 |
JUSTIFIED句 |
全バージョン |
(5)に記載 |
6 |
VALUE句 |
全バージョン |
(6)に記載 |
7 |
RENAMES句 |
全バージョン |
(7)に記載 |
8 |
条件名 |
全バージョン |
(8)に記載 |
9 |
外部浮動小数点項目 |
全バージョン |
(9)に記載 |
10 |
外部ブール項目 |
全バージョン |
(10)に記載 |
11 |
OCCURS句(OCCURS 整数 TIMES[DEPENDING ON データ名]以外) |
全バージョン |
(11)に記載 |
12 |
位取り |
全バージョン |
(12)に記載 |
13 |
フリー形式の行内注記(*>) |
全バージョン |
(13)に記載 |
14 |
修飾 |
全バージョン |
(14)に記載 |
15 |
登録集原文中のCOPY文 (COPY{原文名|原文名定数}.以外) |
全バージョン |
(15)に記載 |
16 |
SAME AS句※ |
全バージョン |
(16)に記載 |
17 |
TYPE句およびTYPEDEF句※ |
全バージョン |
(17)に記載 |
18 |
翻訳指令※ |
全バージョン |
(18)に記載 |
19 |
入力情報エリアサイズ値の変更 |
02-02未満 |
(19)に記載 |
20 |
出力情報エリアサイズ値の変更 |
02-00未満 |
(20)に記載 |
21 |
内部10進項目 |
02-00未満 |
(21)に記載 |
22 |
内部ブール項目 |
02-00未満 |
(22)に記載 |
23 |
REDEFINES句 |
02-00未満 |
(23)に記載 |
24 |
01および77レベルの基本項目 |
02-00未満 |
(24)に記載 |
25 |
登録集原文中のCOPY文 (COPY{原文名|原文名定数}.) |
02-02未満 |
(25)に記載 |
26 |
OCCURS句(OCCURS 整数 TIMES [DEPENDING ON データ名]) |
02-05未満 |
(26)に記載 |
- 〈この項の構成〉
-
(1) EXTERNAL句
LINKAGE SECTIONで指定できないEXTERNAL句は削除してください。
Javaマッピングデータ属性は,EXTERNAL句の指定有無にかかわらず,EXTERNAL句がない場合と同じです。
(2) GLOBAL句
LINKAGE SECTIONで指定できないGLOBAL句は削除してください。
Javaマッピングデータ属性は,GLOBAL句の指定有無にかかわらず,GLOBAL句がない場合と同じです。
(3) BLANK WHEN ZERO句
数字項目の編集を指定するBLANK WHEN ZERO句は削除してください。また,数字項目に指定されたBLANK WHEN ZERO句である場合は,同じ領域長の英数字項目に変更してください。操作は数字編集項目と同様に,編集した値を設定し,受け取ったデータをJavaプログラムで数値に変換して使用します。
[例]
<変更前>
<変更後>
(4) SYNCHRONIZED句
計算機記憶の固有の境界に従った,基本項目の配置を指定するSYNCHRONIZED句は削除してください。また,SYNCHRONIZED句によって確保されていた暗黙のFILLERを明示的に定義してください。暗黙のFILLERについては,マニュアル「COBOL2002 言語 標準仕様編」のSHNCHRONIZE句の記述個所をご覧ください。
[例]
<変更前>
<変更後>
(5) JUSTIFIED句
けた寄せを表すJUSTIFIED句は削除してください。Javaマッピングデータ属性は,JUSTIFIED句の指定有無にかかわらず,JUSTIFIED句がない場合と同じです。
(6) VALUE句
初期値や条件名に対応する値を指定するVALUE句は削除してください。Javaマッピングデータ属性は,VALUE句の指定有無にかかわらず,VALUE句がない場合と同じです。
(7) RENAMES句
基本項目を組み合わせて新たな集団を作る(再命名項目)RENAMES句は指定できないので,66レベル項目から削除してください。再命名したデータ項目を使用する場合は,代わりに被再命名項目を使用するか,REDEFINES句と同様に登録集原文を別に作成して使用してください。
[例]
<変更前>
<変更後>
(8) 条件名
条件名を指定する88レベルは指定できないので,88レベル項目を削除してください。Javaマッピングデータ属性は,条件名の指定有無にかかわらず,条件名がない場合と同じです。
(9) 外部浮動小数点項目
外部浮動小数点項目は,英数字項目に変更してください。英数字項目のけた数は,外部浮動小数点項目の形式から算出してください。Javaプログラムでは,Stringデータを浮動小数点データに変換して使用してください。
[例]
<変更前>
<変更後>
(10) 外部ブール項目
外部ブール項目は,英数字項目に変更してください。英数字項目の桁数は,ブール項目のけた数と同じです。また,Javaプログラムでは,文字'0'と'1'を使用します。
[例]
<変更前>
<変更後>
(11) OCCURS句(OCCURS 整数 TIMES[DEPENDING ON データ名]以外)
「OCCURS 整数 TIMES」および「DEPENDING ON データ名」以外の指定は,削除してください。Javaマッピングデータ属性は,INDEXED指定,KEY指定の有無にかかわらず,INDEXED指定,KEY指定がない場合と同じです。DEPENDING ON指定は繰り返し回数が可変であることを表します。
[例]
<変更前>
<変更後>
(12) 位取り
PICTURE文字列に指定した文字'P'を削除してください。Javaプログラムでは,想定した位取りを意識した演算を行う必要があります。
[例]
<変更前>
<変更後>
上記の例で,COBOLプログラムでHTC-OUTDATAに12300という値が入っている場合,Javaプログラムで見るHTC-OUTDATAは123という値になります。
したがって,Javaプログラムでこの値を使用する場合は,100倍した値を使用する必要があります。
(13) フリー形式の行内注記(*>)
使用できません。削除してください。
(14) 修飾
基本項目のデータ名は,Beanのsetter/getterメソッド名称として使用されるので,修飾しなくても一意になっている必要があります。一意となっていない場合は,Bean生成ウィザードで別名を指定して,一意の名称にしてください。
(15) 登録集原文中のCOPY文(COPY { 原文名 | 原文名定数 } .以外)
COPY文で指定されたCOPY原文を登録集原文に展開し,COPY文を削除してください。
(16) SAME AS句
使用できません。削除してください。
(17) TYPE句およびTYPEDEF句
使用できません。削除してください。
(18) 翻訳指令
使用できません。削除してください。
(19) 入力情報エリアサイズ値の変更
- (02-02以降)
-
COBOLプログラム(SPP)に渡す入力情報エリアサイズをsetInLenFollowSetDataメソッドとそれに続くsetterメソッドにより変更することができます。詳細は「8.2.2 TP1/COBOLアクセス用BeanユーザインタフェースAPI」をご覧ください。
- (02-02未満)
-
入力情報エリアサイズを変更することはできません。
(20) 出力情報エリアサイズ値の変更
- (02-01以降,ただしTP1 Connectorが対応しているバージョンは02-02以降)
-
COBOLプログラム(SPP)で出力情報サイズを設定している場合に,取得しようとするデータが取得できない(出力情報サイズで指定された有効データに含まれない)ことがあります。データが取得できる場合と取得できない場合について,次にまとめます。
表A‒2 情報エリアサイズ変更時にデータ取得動作 データ項目
有効データに含まれない
有効データに一部分含まれる
有効データに全部含まれる
文字データ
(String)
例外発生
J2CByyy2051
データを取得する※
データを取得する
文字データ
(バイト配列byte[])
例外発生
J2CByyy2051
データを取得する
データを取得する
文字データ
以外
例外発生
J2CByyy2051
例外発生
J2CByyy2052
データを取得する
- 注※
-
文字データ(String)を一部分取得する場合,設定されているデータによって,コード変換ができない場合があります。変換できなかった場合,文字数が0文字のStringオブジェクトとなる場合があります。また,'?'に変換されることもあります。その場合は,「(1)COBOLプログラム(SPP)で設定している出力情報サイズを,設定したデータ値が十分に含まれるサイズで設定する」か,「(2)Unicodeにない文字を使っている場合は,文字を削除するかUnicodeに変換できる別の文字に変更する」ようにしてください。
補足:TP1/COBOL-Java連携では,COBOLプログラム(SPP)を呼び出す際,第4引数は,第3引数(出力情報定義エリア)サイズをもとに算出した値を設定しています。第3引数は,COBOLプログラム(SPP)を呼び出す際にデータ領域を確保しますが,確保した領域長と異なる長さをCOBOLプログラム(SPP)で第4引数に設定されると,上記のような動作となります。
また,第4引数(出力情報定義エリアサイズ)の取得はできません。
- (02-01未満)
-
COBOLプログラム(SPP)で出力情報サイズを設定している場合は,登録集原文で指定する引数の長さを設定値と一致するように変更し,Beanの生成を行ってください。
補足:TP1/COBOL-Java連携では,COBOLプログラム(SPP)を呼び出す際,第4引数は,第3引数(出力情報定義エリア)サイズをもとに算出した値を設定しています。第3引数は,COBOLプログラム(SPP)を呼び出す際にデータ領域を確保しますが,確保した領域長と異なる長さをCOBOLプログラム(SPP)で第4引数に設定されると,正常に動作しない場合があります。
(21) 内部10進項目(USAGE COMP-3/COMPUTATIONAL-3/PACKED-DECIMAL)
- (02-00以降)
-
この機能はVersion 2でサポートされました。
- (02-00未満)
-
使用できません。回避方法がありませんので,削除するか,COBOL SPP/MHP引数定義を変更してください。
(22) 内部ブール項目
内部ブール項目は,バイト配列にマッピングした英数字項目に変更してください。英数字項目の桁数は,内部ブール項目が占有するバイト数と同じです。また,Javaプログラムでは,バイト配列をビット操作して使用してください。なお,内部ブール項目で遊びビットが取られる場合は,Javaプログラムで遊びビットを考慮してください。
[ 例 ]
<変更前>
<変更後>
(23) REDEFINES句
- (02-00以降)
-
この機能はVersion 2でサポートされました。
- (02-00未満)
-
異なるデータ属性で,同一の領域を示すREDEFINES句は使用できません。以下に示す方法で,COBOLデータ定義を変更してください。
-
再定義された(REDEFINES データ名で指定された)データ項目(被再定義項目)を使用したい場合は,「再定義項目のREDEFINES句だけを削除するのではなく,再定義項目と従属するデータ項目も削除する」ようにしてください。
-
再定義した(REDEFINES句指定のある)データ項目(再定義項目)を使用したい場合は,「被再定義項目及び使用しない再定義項目とそれらに従属するデータ項目を削除し,使用する再定義項目のREDEFINES句だけを削除する」ようにしてください。
-
異なるデータ属性で同一の領域を使用したい場合は,項番1,項番2で示した手順にそって必要な登録集原文を作成してください。この場合,複数個の登録集原文から対応したBeanを作成し,一つのJavaプログラムから用途に応じて呼び分けてください。
- [ 例 ]
-
<変更前>
<変更後>
-
被再定義項目を使用する場合
-
再定義項目を使用する場合
- 再定義項目1を使用する場合 -
- 再定義項目2を使用する場合 -
-
異なるデータ属性で同一の領域を使用する場合
例については項番1,項番2をご覧ください。
-
(24) 01および77レベルの基本項目
- (02-00以降)
-
記述できます。
- (02-00未満)
-
指定したい基本項目のレベル番号を下位のレベル番号(02〜49)に変更し,上位に01レベルの集団項目を作成してください。
- [ 例 ]
-
<変更前>
<変更後>
ただし,COBOLプログラムで引数として01レベル基本項目を受け取り,作業場所節の集団項目に転記後,集団項目内の基本項目で参照するような場合,作業場所節の集団項目を登録集原文として使用した方が良い場合もあります。
<変更前>
<変更後>
(25) 登録集原文中のCOPY文(COPY { 原文名 | 原文名定数 } .)
- (02-02以降)
-
記述できます。
- (02-02未満)
-
COPY文で指定されたCOPY原文を登録集原文に展開し,COPY文を削除してください。
(26) OCCURS句(OCCURS 整数 TIMES[DEPENDING ON データ名])
- (02-05以降)
-
OCCURS 整数 TIMES[DEPENDING ON データ名]が記述できます。DEPENDING ON指定は繰り返し回数が可変であることを表します。
- (02-05未満)
-
OCCURS 整数 TIMES以外は指定できません。
「OCCURS 整数 TIMES」以外の指定は,削除してください。Javaマッピングデータ属性は,INDEXED指定,KEY指定の有無にかかわらず,INDEXED指定,KEY指定がない場合と同じです。
後続のデータ項目の開始位置が,繰り返し回数によって変わる場合は使用できません。項目の開始位置が,繰り返し回数に依存しない場合は,DEPENDING ON指定を削除して使用してください。
- [例]
-
<変更前>
<変更後>