ページの先頭行へ戻る
Interstage Job Workload Server V9.2.0 バッチ開発ガイド

2.5.2 COBOLアプリケーション

COBOLアプリケーションについて説明します。


2.5.2.1 COBOLアプリケーションの形態

COBOLアプリケーションの形態について説明します。

アプリケーションの形態

バッチアプリケーションの形態は、COBOLアプリケーションの副プログラムです。バッチアプリケーションは、COBOLアプリケーションの副プログラムとして設計します。

アプリケーションからのライブラリ呼出し

バッチアプリケーションからCOBOLや他言語で作成したライブラリを呼び出すことができます。バッチアプリケーションから呼び出すライブラリの設計は、COBOLプログラムの開発と同じです。

2.5.2.2 COBOLアプリケーションのインタフェース

バッチジョブ定義で設定した入力パラメタを、バッチアプリケーション(COBOLアプリケーション)に渡すことができます。また、バッチアプリケーションからの復帰コードは、ジョブステップの終了コードになります。これにより、バッチアプリケーションからの復帰コードで、後続ジョブステップを実行するかを制御できます。
バッチジョブ定義とバッチアプリケーションの入力パラメタ、および復帰コードの関係を以下に示します。

バッチアプリケーションには、以下のインタフェースがあります。


COBOL登録集の詳細は、NetCOBOLのマニュアルを参照してください。


入力パラメタ

入力パラメタについて説明します。

入力パラメタの構成

バッチジョブ定義のジョブステップ定義のバッチアプリケーション定義にあるパラメタに設定した値が、バッチアプリケーションの入力パラメタとして渡されます。入力パラメタのデータ型は、COBOL登録集に設定します。
COBOL登録集は、1バッチアプリケーションにつき、1つ作成します。なお、入力パラメタがない場合は、入力パラメタを設定するCOBOL登録集の作成は不要です。

バッチジョブ定義に設定したパラメタの値が、バッチアプリケーションのパラメタに渡されるイメージは以下のとおりです。


バッチアプリケーションのパラメタが存在する場合

バッチアプリケーションのパラメタが存在する場合、バッチアプリケーションのすべてのパラメタを1つのCOBOL登録集に記述します。バッチアプリケーションには、パラメタを記述したCOBOL登録集のファイル名を記述します。

バッチアプリケーション

COBOL登録集(“PARM.CBL”)

バッチアプリケーションのパラメタが存在しない場合

バッチアプリケーションのパラメタが存在しない場合は、LINKAGE SECTIONを記述しません。

バッチアプリケーション


COBOL登録集の設定項目

COBOLアプリケーションに入力パラメタを渡す場合は、COBOL登録集が必要になります。入力パラメタが必要ない場合は、COBOL登録集は必要ありません。入力パラメタが複数個ある場合は、1つのCOBOL登録集にまとめます。

バッチアプリケーションのCOBOL登録集は、01または77のレベル番号を持つ基本項目をパラメタとして記述できます。

* 01-LEVEL BASIC ITEM
 01 PARM01           PIC X(10).
* 77-LEVEL BASIC ITEM
 77 PARM77           PIC X(9).

基本項目に設定できるデータ項目は以下のとおりです。

COBOLデータ型

PIC S9(n):符号付き整数の数字項目

PIC 9(n):符号なし整数の数字項目

PIC X(n):英数字項目

バッチアプリケーションの入力パラメタに設定した基本項目に指定できる句は、バッチ実行基盤では以下とおりに取り扱います。

句名

記述可否

意味

備考

BLANK WHEN ZERO句

×

データ項目の値がゼロのとき、値を空白に置き換えます。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

CHARACTER TYPE句

×

印字するときの文字の形式を指定します。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

EXTERNAL句

×

レコードに外部属性を与えます。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

GLOBAL句

データ名が大域名であることを指定します。

指定できますが、指定した場合、無効になります。

JUSTIFIED句

×

受取り側データ項目の右端に合わせて転記することを指定します。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

OCCURS句

×

繰り返し項目を定義します。

バッチアプリケーション実行時にパラメタの値が正しく設定されません。

PICTURE句

基本項目の形式を指定します。

PRINTING POSITION句

×

印字するときの横方向の印字位置を指定します。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

REDEFINES句

×

同じ記憶領域に異なるデータ項目を定義します。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

RENAME句

×

いくつかの基本項目をまとめたものに名前を付けます。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

SIGN句

符号部の形式を指定します。

外部10進項目だけ有効になります。

SYNCHRONIZED句

×

計算機の記憶装置の固有の境界にしたがって、基本項目を配置することを指定します。

指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになります。

USAGE句

データ項目の用途を指定します。

VALUE句

データ項目の初期値を指定します。

指定できますが、指定した場合、無効になります。

[記述可否の記号]
○:指定できることを示します。
△:指定できますが、指定しても、無効、または指定どおりに設定されないことを示します。
×:指定した場合、COBOL実行基盤インタフェース生成ツール実行時にエラーになることを示します。


COBOL実行基盤インタフェース生成ツールについては、“6.1.2 COBOL実行基盤インタフェース生成ツールの実行”を参照してください。


入力パラメタのデータ変換規則

バッチ実行基盤では、COBOLアプリケーションを呼び出すときに、バッチジョブ定義に設定した値を、COBOLアプリケーションのデータ型に対応するように変換します。
このデータ交換時の規則は、以下のとおりです。

数字項目

バッチ実行基盤では、COBOLアプリケーションのデータ項目の桁数に合わせて、桁落としや0詰めが行われます。

以下に例を示します。

  

バッチジョブ定義に設定した値

COBOLアプリケーション

定義

PIC S9(8)

+123456789

+23456789

+12345678

+12345678

+123456

+00123456

符号の整形については、COBOLアプリケーションのデータ型が符号をもつか、SIGN句が指定されているかによって決定します。
COBOLアプリケーションのデータ型が符号付きである場合は、必要に応じて以下のように符号を補います。

  

バッチジョブ定義に設定した値

COBOLアプリケーション

定義

PIC S9(8)

+12345678

+12345678

-12345678

-12345678

12345678

+12345678

COBOLアプリケーションのデータ型が符号なしである場合は、以下のように符号を削除します。

  

バッチジョブ定義に設定した値

COBOLアプリケーション

定義

PIC 9(8)

+12345678

12345678

-12345678

12345678

12345678

12345678

英数字項目

バッチ実行基盤では、COBOLアプリケーションのデータ項目の大きさに合わせて、末尾に半角空白文字を挿入したり、文字列を削除したりします。

  

バッチジョブ定義に設定した値

COBOLアプリケーション

定義

PIC X(10)

ABC■12

ABC■12■■■■

1234567890AB

1234567890

(表中の“■”は半角空白文字を示します)


入力パラメタの未設定データの判定

バッチ実行基盤では、バッチアプリケーション定義にバッチアプリケーションへ渡すパラメタの値を設定せずに、バッチアプリケーションを呼び出すことがあります。この未設定のパラメタに対して、値が設定されていないことを判定できます。
入力パラメタの長さが2バイト未満の場合、本機能は使用できません。


入力パラメタの未設定データの判定を行うには、バッチワークユニットの環境変数に“APFW_PARAM_COMPLEMENT_MODE=ON”を設定する必要があります。


バッチワークユニットの環境変数の設定方法については、“Interstage Job Workload Server セットアップガイド”の“バッチワークユニットの設定変更”および“Environment Variable:環境変数”を参照してください。

これらの未設定データの判定のために、COBOL登録集“INVALID_MARKER.cbl”を提供しています。必要に応じてCOBOL開発環境に取り込んでください。
COBOL登録集“INVALID_MARKER.cbl”は“Interstage Job Workload Server 開発環境パッケージ”の以下に示すディレクトリに格納されています。

Interstage Job Workload Serverのインストールディレクトリ\BAS\copy\

COBOL登録集“INVALID_MARKER.cbl”は、以下に示すようにデフォルトの値として“7FFF”が定義されています。
ほかの値に変更する場合は、“INVALID_MARKER.cbl”の定義を変更してください。
変更できるのは値のみです。長さは変更しないでください。

01 INVALID-MARKER       PIC X(2) VALUE X"7FFF".
01 INVALID-MARKER2  REDEFINES INVALID-MARKER PIC N(1).

未設定データの判定処理は未設定であることを識別するための値をあらかじめ定義し、バッチアプリケーション内でこの値とパラメタの値を比較します。このため、判定に使用する値は実行時にパラメタの値として使用されない値でなければなりません。バッチアプリケーション実行時にパラメタとして使用されない値を決定できない場合は、未設定データ判定処理を使用できません。未設定データの判定を行う場合、バッチアプリケーションは、次のようにCOPY文でCOBOL登録集“INVALID_MARKER.cbl”を取り込んでください。

WORKING-STORAGE SECTION.
      COPY INVALID_MARKER.

入力パラメタが未設定かどうかをバッチアプリケーションが判定するためには、この登録集で設定したデータ名“INVALID-MARKER”を使用して、次のように判定します。

復帰コード

バッチアプリケーションの復帰コードを決定します。
また、バッチ実行基盤で使用できるユーザアプリケーションの復帰コードは、ジョブのジョブステップ終了コードとジョブ終了コードにもなります。

復帰コードのデータ型

バッチ実行基盤で使用できるユーザアプリケーションの復帰コードのデータ型は、以下のとおりです。ユーザアプリケーションでデータ型を定義する必要はありません。

COBOLデータ型

PIC S9(9) COMP-5 [PROGRAM-STATUS]


復帰コードの範囲と値

バッチ実行基盤で実行するユーザアプリケーションの復帰コードの範囲は、以下のとおりです。

復帰コードの範囲

-999999999~999999999


バッチ実行基盤とSystemwalker Operation Managerを連携する場合、バッチアプリケーションの復帰コードを0~200の範囲にしてください。バッチアプリケーションの復帰コードがこの範囲以外の場合には、Systemwalker Operation Managerの仕様にしたがいます。


PROGRAM-STATUSに復帰コードを設定せずに終了した場合、バッチアプリケーションの復帰コードは、0になります。バッチアプリケーションでエラーが発生した場合、PROGRAM-STATUSにNetCOBOLのエラーコードが設定されることがあります。詳細は、NetCOBOLのマニュアルを参照してください。


環境変数

バッチアプリケーションで使用する環境変数です。
バッチアプリケーションが使用できる環境変数には以下があります。


バッチアプリケーション定義の環境変数、およびジョブ定義の環境変数を使用したバッチアプリケーション間の、環境変数によるデータの引継ぎはできません。


ファイル資源の割当て

ファイル管理機能が、バッチジョブ定義に設定した資源名とファイルの物理的なパスの対応関係を環境変数に設定しバッチアプリケーションに通知します。これにより、バッチアプリケーションに直接、物理的なパスを記述しないでファイルをアクセスできます。
以下にファイルのアクセス方法について示します。(例でのパス名などは、SolarisおよびLinuxの形式で記載しています。)


バッチジョブ定義で資源名“COB1”を設定します。資源名“COB1”は“/data/2006/”に割り当てられているファイル“file1”です。バッチアプリケーションでは、資源名“COB1”を指定してファイルをアクセスしますが、環境変数に“COB1”に該当する物理ファイル名とファイルの割当て場所が取り込まれるため、“/data/2006/”に割り当てられているファイル“file1”をアクセスできます。

NetCOBOL EE V10.0以降で動作するCOBOLアプリケーションの場合、ファイル管理機能が資源名とファイルのパスを環境変数を介さずにCOBOLランタイムシステムに設定します。
以下にNetCOBOL EE V10.0以降で動作するCOBOLアプリケーションの場合のファイルのアクセス方法について示します。(例でのパス名などは、SolarisおよびLinuxの形式で記載しています。)


ファイル管理機能からCOBOLランタイムシステムに“COB1”に該当する物理ファイル名とファイルの割当て場所を設定します。これによりバッチアプリケーションでは、資源名“COB1”を指定して“/data/2006/”に割り当てられているファイル“file1”をアクセスできます。


ファイルの物理的なパスを変更する場合は、“2.4.3 ファイルパスの論理化機能”を利用することでバッチジョブ定義およびバッチアプリケーションの汎用性が高くなります。

2.5.2.3 COBOLアプリケーションの注意事項

NetCOBOLの注意事項のほかに、バッチ実行基盤で実行するCOBOLアプリケーションを開発する場合は、以下の注意事項を踏まえたうえで設計を行います。


NetCOBOLの注意事項については、NetCOBOLのマニュアルを参照してください。

プロセスの操作について

バッチアプリケーション内で、子プロセスの生成、監視などのプロセスに関する操作を行わないでください。
プロセスの操作を行った場合、ジョブの動作は保証しません。


スレッドの操作について

バッチアプリケーション内で、スレッドの生成、監視などのスレッドに関する操作を行わないでください。
スレッドに関する操作を行った場合、ジョブの動作は保証しません。


SIGTERMなどのシグナルハンドラについて

バッチアプリケーションからシグナルに関する処理を行わないでください。
シグナルに関する操作を行った場合、ジョブの動作は保証しません。


標準出力/標準エラー出力への出力について

バッチアプリケーションからDISPLAY文などを使用して標準出力(stdout)/標準エラー出力(stderr)に大量データを出力しないでください。標準出力/標準エラー出力へ出力できるデータの量は、以下に示す上限があるため、上限を超えて出力した分のデータは、切り捨てられます。

標準出力/標準エラー出力に出力できるデータ量の上限

標準出力/標準エラー出力 あわせて1ジョブあたり2メガバイト

ただし、標準出力/標準エラー出力には、バッチ実行基盤からジョブの実行に関するデータを出力するため、実際にバッチアプリケーションから標準出力/標準エラー出力に出力できるデータ量は、上記の上限以下となります。
また、バッチアプリケーション間で、標準出力/標準エラー出力を利用したデータの引継ぎはできません。


上限を超えて出力した分のデータは切り捨てられます。すべてのデータ出力は保障されないため、バッチアプリケーションから、標準出力/標準エラー出力に業務データ等の重要なデータを出力しないでください。


業務用データベースのトランザクション制御について

バッチ実行基盤では、バッチアプリケーションが使用する業務用データベースのトランザクション制御を行いません。バッチアプリケーション内でトランザクション制御を行ってください。


IPC資源について

バッチ実行基盤では、バッチアプリケーションでのIPC資源の利用を管理しないため、プロセスダウン等が発生した場合、IPC資源が回収されません。


入力要求を求めるアプリケーションの実行

バッチアプリケーション内で、標準出力/標準エラー出力にプロンプトを出力して入力要求を求めるような処理はできません。

“FROM指定に機能名CONSOLEに対応付けた呼び名を指定したACCEPT文”で、Systemwalker Centric Managerのコンソールからデータを入力するCOBOLアプリケーションを実行することはできません。


文字コードについて

バッチ受付サービス、バッチ実行サービス、バッチワークユニット、バッチアプリケーション、引継ぎファイルなどで扱うデータの文字コードは、すべて同じ文字コードに統一してください。


文字コードの設計については、“Interstage Job Workload Server セットアップガイド”の“文字コードの設計”を参照してください。