Enterprise Server では、COBOL での MFS 入力メッセージ フィールドおよびセグメント出口の使用がサポートされており、COBOL プログラムから MFS セグメントおよびフィールド データを編集できます。これはメインフレーム機能のエミュレーションです。
- 呼び出し
- MFS 入力メッセージの出口は、実行時に自動的に呼び出されます。
- コーディング要件
- MFS 入力メッセージの出口は、標準の MFS 構文を使用して指定されます。IMS アプリケーションに MFS 入力メッセージ セグメントおよびフィールド出口を含めるには、次のコーディング標準に従います。
- すべての入力メッセージ セグメントおよびフィールド出口を COBOL で記述する。これは、セグメントおよびフィールドの出口がアセンブラーで記述される IMS/ESA とは異なります。
- 次のように IMS/ESA 命名規則を使用する。
DFSMEnnn
ここで nnn は、000 から 127 までの 3 桁の 10 進数で表される出口番号です。たとえば、フィールドの出口番号がゼロの場合は、DFSME000 という名前を使用します。
- セグメントおよびフィールド出口は ASCII データを受け取る。出口プログラムが EBCDIC 用に書かれている場合は、ASCII で受け取った IMS データを ASCII から EBCDIC に変換し、終了する前に EBCDIC のデータを
ASCII に戻す必要があります。
- セグメントが無効なものとしてレンダリングされるように変更されていない。セグメントが無効な場合、ランタイム エラーが発生することがあります。
- ストレージ サービスや制御ブロック サービスを含む IMS 呼び出し可能サービスを呼び出すために出口を使用していない。
注: 存在していない出口が MFS ソースによって参照される場合、プログラムは MFS に出口がコーディングされていないかのように動作します。出口によって戻された例外条件は、サーバー コンソール ログに書き込まれます。
- ランタイム要件
- IMS セグメントおよびフィールド出口のランタイム要件は次のとおりです。
- すべてのセグメントおよびフィールド出口をコンパイルする。
- コンパイルされたコードを、ES_IMS_EXITPATH 環境変数または COBPATH 環境変数で指定されたディレクトリに置く。Enterprise Server は、セグメントおよびフィールド出口をこの順序で検索し、最初に一致する出口を使用します。
- ランタイム動作
- IMS セグメントおよびフィールド出口のランタイム動作は次のとおりです。
- 例
- 指定するサンプル セグメントおよびフィールド出口は、オプション 1 および 2 の形式を使用する MFS ソースでのみサポートされます。サンプルはすべて、デフォルトで %PUBLIC%\Documents\Micro Focus\Enterprise Developer\Samples\Mainframe\IMS\Classic\Examples (Windows) または
$COBDIR/demo/ims/examples(UNIX) にあります。
- フィールド出口ルーチン
- フィールド出口ルーチンを含むサンプル プログラム DFSME000.cbl が用意されています。これは、IMS/ESA 製品で提供される DFSME000 アセンブラー MFS フィールドの編集出口ルーチンの COBOL 実装です。このプログラムには、入力メッセージ フィールド出口の使用方法の詳細を説明するコメントが含まれています。次のコードは、DFSME000.cbl の連絡節からの抜粋であり、パラメーター リスト形式を示しています。
01 FIELDEXIT-PARMS.
05 FLDFLAG PIC X(01).
05 FILLER PIC X(01).
05 FLDELTH PIC X(01) COMP-X.
05 FLDVECT PIC X(01) COMP-X.
05 FLDLTH PIC X(04) COMP-X.
05 FLDADDR USAGE POINTER.
- セグメント出口ルーチン
- セグメント出口ルーチンを含むサンプル プログラム DFSME127.cbl が用意されています。これは、IMS/ESA 製品で提供される DFSME127 アセンブラー MFS セグメントの編集出口ルーチンの COBOL 実装です。次のコードは、DFSME127.cbl の連絡節からの抜粋であり、パラメーター リスト形式を示しています。
01 DFSME-PARM.
05 DFSME-FLAG PIC X(01).
05 FILLER PIC X(01).
05 FILLER PIC X(01).
05 DFSME-VECTOR PIC X(01) COMP-X.
05 DFSME-LTH PIC X(04) COMP-X.
05 DFSME-ADDR POINTER.
05 DFSME-FLDEXIT-RC PIC X(04) COMP-X.
05 DFSME-NEXT-MODNAME PIC X(08).
*> NEXT FIELD IS IN COBOL PARM BLOCK ONLY
05 DFSME-R1-RETURN PIC X(04) COMP-X.
- トラブルシューティング
- セグメント出口およびフィールド出口により、トラブルシューティングに役立つトレース エントリを生成できます。
- トレースの有効化
- 次の手順に従い、Enterprise Server Administration からセグメントおよびフィールド出口トレース エントリの生成を有効にします。
- Enterprise Server のホーム ページで、アプリケーションを実行するエンタープライズ サーバーを起動します。
- 開始したエンタープライズ サーバーの [Edit] をクリックします。
- [Server > Control > ES Monitor & Control] をクリックします。
- [Control] をクリックします。
- [Trace Points > Server] で [exits] にチェック マークを入れます。
- トレース エントリの表示
- MSS は Trace 診断 A および B データセットのトレース情報をそれぞれ casauxta.rec および casauxtb.rec ファイルに書き込みます。デフォルトでは、どちらのファイルも System ディレクトリの %USERPROFILE%\Documents\Micro Focus User\Enterprise Developer\WORKAREA\es-name にあります (es-name はエンタープライズ サーバーの名前です)。ただし、[Display] をクリックすると、リアルタイムでトレース エントリを表示できます (C/x トレース情報を含む)。
- トレース ID
- トレース エントリは、次のように 6 桁の 16 進数 ID を使用してエントリと出口のペアで生成されます。
- 1 桁目および 2 桁目は 39 です。これらは、エントリが MFS 用であることを示します。
- 3 桁目および 4 桁目は、発行元のモジュールに固有の数字です。
- 5 桁目は 0 (ゼロ) です。
- 6 桁目は、次のようにトレース エントリのタイプを示します。
MFS トレース ID とその重要度、およびそれぞれの変数の内容を次に示します。
x'390103', Segment exit entry, exit number, vector
x'390204', Segment exit exit, return code, segment number
x'390303', Field exit entry, exit number, vector
x'390404', Field exit exit, return code, max return code
x'390509', Segment exit missing, exit number, intended vector
x'390609', Field exit missing, exit number, intended vector
- 例
- この例では、最初のフィールド出口は出口番号 100 およびベクトル 100 用です。しかし、Enterprise Server はモジュールをロードできませんでした。この場合、エラーは単純に記録され、処理は続行されます。2 番目のトレース エントリは、出口 5 にベクトル 5 の制御が与えられたことを示しています。3 番目のトレース エントリは、戻りコードおよびフィールド出口の実行最大戻りコードを、出口
5 の戻り時に記録します。処理は引き続き、セグメント出口 126 がベクトル 14 で呼び出された最後のトレース エントリの次に移ります。セグメント出口からの戻り値は 0 (ゼロ) で、現在のセグメントは 1 です。
注: トレース出力では、トレース ID には、エントリが casmfs.dll からのものであることを示す番号「39」が先頭に含まれ、5 桁目は 0 (ゼロ) ではなく 8 と表示されます。
Seq Task-Nbr ProcessID +---ID--+ hhmmsshh
mfsFldExitER( 100 )v( 100 ) 654 6652 12312 39 390689 22105958
mfsFldExit( 5 )v( 5 ) 655 6652 12312 39 390383 22105958
mfsFldExitRC( 0 )max( 0 ) 656 6652 12312 39 390484 22105958
mfsFldExit( 5 )v( 1 ) 657 6652 12312 39 390383 22105958
mfsFldExitRC( 8 )max( 0 ) 658 6652 12312 39 390484 22105958
mfsFldExit( 5 )v( 1 ) 659 6652 12312 39 390383 22105958
mfsFldExitRC( 0 )max( 8 ) 660 6652 12312 39 390484 22105958
mfsFldExit( 5 )v( 1 ) 661 6652 12312 39 390383 22105958
mfsFldExitRC( 0 )max( 8 ) 662 6652 12312 39 390484 22105958
mfsSegExit( 126 )v( 14 ) 663 6652 12312 39 390183 22105958
mfsSegExitRC( 0 )seg( 1 ) 664 6652 12312 39 390284 22105958