COBOLアプリケーションについて説明します。
COBOLアプリケーションの形態について説明します。
アプリケーションの形態
バッチアプリケーションの形態は、COBOLアプリケーションの副プログラムです。バッチアプリケーションは、COBOLアプリケーションの副プログラムとして設計します。
PROGRAM-IDに設定できるプログラム名の先頭は半角英文字です。
PROGRAM-IDに設定できるプログラム名の最大長は140バイトです。
パラメタは、すべて入力パラメタであり、かつデータ型を限定しています。
STOP RUN文を使用してバッチアプリケーションを終了しないでください。バッチアプリケーションの動作を保証しません。COBOLアプリケーションの終了は、必ずEXIT文、またはEXIT PROGRAM文を使用してください。
ENTRY文を使用した二次入口点は、バッチアプリケーションの呼び出し用の入口点として使用できません。
アプリケーションからのライブラリ呼出し
バッチアプリケーションからCOBOLや他言語で作成したライブラリを呼び出すことができます。バッチアプリケーションから呼び出すライブラリの設計は、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実行基盤インタフェース生成ツール実行時にエラーになることを示します。
バッチアプリケーションのパラメタは最大32個です。
パラメタ名は、英数字、“-”(ハイフン)、および“_”(アンダースコア)を使用してください。パラメタ名に日本語は使用できません。
バッチ実行基盤では、パラメタ名の英小文字、英大文字は区別しません。
バッチ実行基盤では、“-”(ハイフン)と“_”(アンダースコア)は同一の文字として取り扱います。
英数字項目(PIC X(n))の最大長は、1,024文字です。
数字項目の最大長は、19文字です。
パラメタ名にFILLER、および無記名項目を使用できません。
COBOL登録集に手続きを含むことはできません。
部、節、段落の見出しを含むことはできません。
翻訳エラーとなる記述を含むことはできません。
COBOLのマニュアルに記載している予約語のほかに、バッチ実行基盤の予約語として以下がありますので、使用しないでください。
INVALID-MARKER
“APFW_”で始まるすべての文字列
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”を使用して、次のように判定します。
英数字項目の場合
IF FUNCTION LENG(IN-PARAM) > FUNCTION LENG(INVALID-MARKER) AND IN-PARAM(1:FUNCTION LENGTH(INVALID-MARKER)) NOT = INVALID-MARKER THEN 《入力パラメタ設定時の処理》 ELSE 《入力パラメタ未設定時の処理》 END-IF. |
■復帰コード
バッチアプリケーションの復帰コードを決定します。
また、バッチ実行基盤で使用できるユーザアプリケーションの復帰コードは、ジョブのジョブステップ終了コードとジョブ終了コードにもなります。
復帰コードのデータ型
バッチ実行基盤で使用できるユーザアプリケーションの復帰コードのデータ型は、以下のとおりです。ユーザアプリケーションでデータ型を定義する必要はありません。
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のマニュアルを参照してください。
■環境変数
バッチアプリケーションで使用する環境変数です。
バッチアプリケーションが使用できる環境変数には以下があります。
バッチアプリケーション定義の環境変数
バッチワークユニットの環境変数
バッチアプリケーション定義の環境変数については、“バッチアプリケーションに渡す環境変数”を参照してください。
バッチアプリケーション実行時に使用できる環境変数の詳細、およびバッチワークユニットの環境変数については、“Interstage Job Workload Server セットアップガイド”の“環境変数の設定指針”を参照してください。
バッチアプリケーション定義の環境変数、およびジョブ定義の環境変数を使用したバッチアプリケーション間の、環境変数によるデータの引継ぎはできません。
■ファイル資源の割当て
ファイル管理機能が、バッチジョブ定義に設定した資源名とファイルの物理的なパスの対応関係を環境変数に設定しバッチアプリケーションに通知します。これにより、バッチアプリケーションに直接、物理的なパスを記述しないでファイルをアクセスできます。
以下にファイルのアクセス方法について示します。(例でのパス名などは、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 ファイルパスの論理化機能”を利用することでバッチジョブ定義およびバッチアプリケーションの汎用性が高くなります。
NetCOBOLの注意事項のほかに、バッチ実行基盤で実行するCOBOLアプリケーションを開発する場合は、以下の注意事項を踏まえたうえで設計を行います。
NetCOBOLの注意事項については、NetCOBOLのマニュアルを参照してください。
プロセスの操作について
バッチアプリケーション内で、子プロセスの生成、監視などのプロセスに関する操作を行わないでください。
プロセスの操作を行った場合、ジョブの動作は保証しません。
スレッドの操作について
バッチアプリケーション内で、スレッドの生成、監視などのスレッドに関する操作を行わないでください。
スレッドに関する操作を行った場合、ジョブの動作は保証しません。
SIGTERMなどのシグナルハンドラについて
バッチアプリケーションからシグナルに関する処理を行わないでください。
シグナルに関する操作を行った場合、ジョブの動作は保証しません。
標準出力/標準エラー出力への出力について
バッチアプリケーションからDISPLAY文などを使用して標準出力(stdout)/標準エラー出力(stderr)に大量データを出力しないでください。標準出力/標準エラー出力へ出力できるデータの量は、以下に示す上限があるため、上限を超えて出力した分のデータは、切り捨てられます。
標準出力/標準エラー出力に出力できるデータ量の上限
標準出力/標準エラー出力 あわせて1ジョブあたり2メガバイト |
ただし、標準出力/標準エラー出力には、バッチ実行基盤からジョブの実行に関するデータを出力するため、実際にバッチアプリケーションから標準出力/標準エラー出力に出力できるデータ量は、上記の上限以下となります。
また、バッチアプリケーション間で、標準出力/標準エラー出力を利用したデータの引継ぎはできません。
上限を超えて出力した分のデータは切り捨てられます。すべてのデータ出力は保障されないため、バッチアプリケーションから、標準出力/標準エラー出力に業務データ等の重要なデータを出力しないでください。
業務用データベースのトランザクション制御について
バッチ実行基盤では、バッチアプリケーションが使用する業務用データベースのトランザクション制御を行いません。バッチアプリケーション内でトランザクション制御を行ってください。
IPC資源について
バッチ実行基盤では、バッチアプリケーションでのIPC資源の利用を管理しないため、プロセスダウン等が発生した場合、IPC資源が回収されません。
入力要求を求めるアプリケーションの実行
バッチアプリケーション内で、標準出力/標準エラー出力にプロンプトを出力して入力要求を求めるような処理はできません。
“FROM指定に機能名CONSOLEに対応付けた呼び名を指定したACCEPT文”で、Systemwalker Centric Managerのコンソールからデータを入力するCOBOLアプリケーションを実行することはできません。
文字コードについて
バッチ受付サービス、バッチ実行サービス、バッチワークユニット、バッチアプリケーション、引継ぎファイルなどで扱うデータの文字コードは、すべて同じ文字コードに統一してください。
文字コードの設計については、“Interstage Job Workload Server セットアップガイド”の“文字コードの設計”を参照してください。