出口

出口プログラムは、COBOL で記述し、Micro Focus 構文チェッカーでコンパイルする必要があります。これらの出口プログラムは、他の COBOL プログラムと同様に、普通に実行したりデバッグしたりできます。出口プログラムの記述およびテストの手順については、メインフレームのドキュメントを参照してください。

リンケージ領域

MFJSORT は、標準リンケージ領域を E15 および E35 出口プログラムに提供します。標準リンケージ領域は、メインフレーム ユーティリティと互換性があり、次のように定義する必要があります。
COBOL 文
RECORD-FLAGS PIC 9(8) COMP.
0 は、渡された最初のレコードを示します。4 は、渡された後続のレコードを示します。8 は、渡された最後のレコードを示します。
ENTRY-BUFFER PIC X(n).
入力レコードの内容。この領域は変更しないでください。
EXIT-BUFFER PIC X(n).
出口によって提供された新規または変更済みのレコードの内容。
UNUSED-ENTRY PIC 9(8) COMP.
未使用
UNUSED-ENTRY PIC 9(8) COMP.
未使用
ENTRY-RECORD-LENGTH PIC 9(8) COMP.
入力レコードの長さ。
EXIT-RECORD-LENGTH PIC 9(8) COMP.
出口によって提供された新規または変更済みのレコードの長さ。
UNUSED-ENTRY PIC 9(8) COMP.
未使用
EXIT-AREA-LENGTH PIC 9(4) COMP.
出口領域スクラッチパッドの長さ。このフィールドは変更しないでください。
EXIT-AREA PIC X(n).
出口プログラムの呼び出し間で変数を維持するために出口によって使用される出口領域スクラッチパッド。

リンケージ領域の初期化

連絡節で定義された出口領域は、バッチ SEP プロセスの開始時にのみ初期化され、E15/E35 ユーザー出口が初めて呼び出された際には初期化されません。つまり、E15/E35 ユーザー出口の後続の呼び出しにより、以前に呼び出された E15/E35 ユーザー出口で使用されたデータが取得される可能性があります。

E35 ユーザー出口の最初の呼び出しで出口領域が初期化されるようにするには、次の作業場所節項目を追加します。

01   WS-INIT-ACTION-FLAG       PIC X VALUE ‘Y’.

次に、手続き部で、次のコードを最初に処理するコードとして配置します。

PROCEDURE DIVISION.
MAIN SECTION.
              IF WS-INIT-ACTION-FLAG =’Y’
                   INITIALIZE EXIT-AREA
                   MOVE ‘N’ WS-INIT-ACTION-FLAG
              END-IF.

一部のお客様は、処理カウントおよびフラグを定義するために、次のように出口領域を再定義します。

        01  EXIT-AREA       PIC X(256).
01	USER-EXIT-AREA REDEFINES EXIT-AREA.
03 UXIT-COUNT     PIC 9(9).
03 UXIT-FLAG      PIC X.
03 UXIT-FILLER    PIC X(246)

出口領域を初期化すると、領域が空白文字で埋められますが、これは UXIT-COUNT では無効です。

これらのカウントおよびフラグを制御するには、個別に初期化する必要があります。

PROCEDURE DIVISION.
MAIN SECTION.
      IF WS-INIT-ACTION-FLAG =’Y’
         INITIALIZE EXIT-AREA
         INITIALIZE UXIT-COUNT   
         INITIALIZE UXIT-FLAG
         MOVE ‘N’ WS-INIT-ACTION-FLAG
      END-IF.

SORT プロセスの開始時に E15/E35 ユーザー出口がメモリにロードされるため、SORT が終了するまで、作業場所節は呼び出されるたびに使用可能なままになります。これにより、必要な制御で出口領域を 1 回だけ初期化し、E15/E35 ユーザー出口の後続の呼び出しごとにユーザー データを維持できます。

戻りコード

次の表に示すように、MFJSORT は出口プログラムから、メインフレーム ユーティリティと同じ戻りコードを認識します。
戻りコード 意味
0 操作は必要ありません。
4 現在のレコードを削除します。E15 の場合、レコードはソートされません。E35 の場合、レコードは出力データ セットに書き込まれません。
8 この出口を再度呼び出さないでください。出口処理は不要になっています。
12 現在のレコードを挿入します。E15 の場合、レコードはソート用に挿入されます。E35 の場合、レコードは出力データ セットに書き込まれます。
16 MFJSORT を終了させます。ジョブ ステップは、16 に設定された条件コードで終了します。
20 現在のレコードを変更します。E15 の場合、変更されたレコードはソートに渡されます。E35 の場合、変更されたレコードは出力データ セットに書き込まれます。