MFS 入力メッセージ出口

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 セグメントおよびフィールド出口のランタイム動作は次のとおりです。
  • エンタープライズ サーバーが起動すると、検出された出口の名前がサーバー コンソール ログに書き込まれます。次のサンプルは、典型的なサーバー コンソール ログのエントリです。
    120131 13172725 4684 IMSTEST CASTM5044I IMS TM exit programs loaded: 
    DFSME000.dll, DFSME127.dll 13:17:27
  • 入力メッセージ フィールド出口の場合、出口に渡されるパラメーター リストの形式は、IMS/ESA によって渡されるものと同じ形式です。
  • 入力メッセージ セグメント出口の場合、出口に渡されるパラメーター リストの形式は、制御ブロックの最後にある追加フィールド (DFSME-R1-RETURN) を除き、IMS/ESA によって渡されたものと同じ形式です。DFSME-R1-RETURN には、セグメント出口が戻りコード 12 を返してメッセージを取り消した場合に、ユーザー定義のエラー メッセージ番号が含まれます。
  • セグメント出口の戻りコード 16 はサポートされていません。16 の値を戻すセグメントは、入力デバイスにメッセージを送信しません。
指定するサンプル セグメントおよびフィールド出口は、オプション 1 および 2 の形式を使用する MFS ソースでのみサポートされます。サンプルはすべて、デフォルトで %PUBLIC%\Documents\Micro Focus\Enterprise Developer\Samples\Mainframe\IMS\Classic\Examples にあります。
フィールド出口ルーチン
フィールド出口ルーチンを含むサンプル プログラム 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 からセグメントおよびフィールド出口トレース エントリの生成を有効にします。
  1. Enterprise Serverホーム ページで、アプリケーションを実行するエンタープライズ サーバーを起動します。
  2. 開始したエンタープライズ サーバーの [Edit] をクリックします。
  3. [Server > Control > ES Monitor & Control] をクリックします。
  4. [Control] をクリックします。
  5. [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 は、次のようにトレース エントリのタイプを示します。
    3 エントリ
    4 出口
    9 エラー
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