メッセージおよび異常終了コード説明ユーザー出口

メッセージおよび異常終了コード説明ユーザー出口について、以下で説明します。

目的

この出口は、分析レポートのメッセージおよび異常終了コードの説明を提供できます。Message and Abend Code Explanation がメッセージの説明または異常終了コードの説明のいずれかが使用可能かどうかを判別した後で、分析レポートに説明を表示する前に、Fault Analyzerユーザー出口が制御を受け取ります。Fault Analyzer がソフトコピー・ブックまたはオーバーライド・データ・セットを使用して説明を検出した場合、「XPL.EXPLANATION_AVAILABLE」データ領域フィールドは「Y」設定されます。

データ域の詳細については、XPL - Message and Abend Code Explanationユーザー出口パラメーター・リストを参照してください。

Message and Abend Code Explanation ユーザー出口は、以下を行うことができます。
  • 何も行わずに使用可能な説明が検出された場合、これを保存する。
  • 説明が検出されなかった場合に説明を指定するか、または検出された説明を置換する。
メッセージの説明が Fault Analyzer によりフォーマットされている場合、以下の情報が XPL データ域に示されます。
  • 発行されたメッセージの実際のテキスト。

    このテキストは MESSAGE_TEXT1 から MESSAGE_TEXT10 までのフィールドに示されます。MESSAGE_TEXT1 はメッセージの最初の行または 1 行のみのメッセージを含むように初期化され、メッセージが複数行から構成される場合、MESSAGE_TEXT2 から MESSAGE_TEXT10 までが使用されます。

    注: 発行されたメッセージの実際のテキストが使用不可の場合、メッセージ ID のみが MESSAGE_TEXT1 フィールドに置かれます。
異常終了コードの説明が Fault Analyzer によりフォーマット設定されている場合、以下の情報が XPL データ域に示されます。
  • 異常終了コード。

    このコードはフィールド ABEND_CODE に示されます。このフィールドのコメントは異常終了タイプによって異なります。詳しくは下記を参照してください。

  • 異常終了理由コード。

    このコードは ABEND_REASON_CODE フィールドに 8 文字の 16 進値として示されます。

  • 異常終了モジュール名。

    この名前は ABEND_MODULE_NAME フィールドに示されます。

  • 異常終了タイプ。
    このタイプは ABEND_TYPE フィールドに示されます。ここには、以下のいずれかの値が含まれます。
    C
    CICS® トランザクション異常終了を示します。

    フィールド「ABEND_CODE」には、4 文字の CICS® 異常終了コードが含まれます。

    D
    CICS® ダンプ・コードを示します。

    フィールド「ABEND_CODE」には、4 文字の CICS® ダンプ・コードが含まれます。

    S
    システム異常終了を示します。

    フィールド ABEND_CODE には 3 文字の 16 進左寄せシステム異常終了コードが含まれます。

    U
    ユーザー異常終了を示します。

    フィールド「ABEND_CODE」には、4 文字の 10 進ユーザー異常終了コードが含まれます。

上記の情報に基づいて、ユーザー出口は不足していた説明を提供したり、Fault Analyzer により検出された説明の置換を行います。このプロビジョンは、XPL データ域経由で一度に 1 つの説明レコードを Fault Analyzer に渡すことによって行われます。

説明レコードを含む変数の名前が REXX EXEC の IDIWRITE コマンドで渡されない限り、説明データ・レコードを DATA_BUFFER フィールドに指定する必要があります。

XPL データ域をデータ・レコード情報で更新すると、Fault Analyzer にデータを渡すために出口タイプに応じて 2 つの異なる方法を使用できます。
REXX
Fault Analyzer 環境 IDIWRITE コマンドが使用されます。このコマンドを使用するには、REXX ステートメントを次のようにコーディングしてください。
ADDRESS FAULTA 'IDIWRITE [var-name]'

IDIWRITE コマンドの正常終了は、ゼロの戻りコードで示されます。

IDIWRITE コマンドの詳細情報については、IDIWRITE コマンドを参照してください。

ロード・モジュール
書き込みルーチンのアドレスは、ENV.WRITE_ROUTINE_EP データ域フィールドに 16 進数 31 ビット・アドレスで示されます。

このルーチンは、ENV データ域のアドレスを含むフルワードをポイントする R1 で 呼び出す必要があります。例えば、さまざまなプログラム言語で作成された以下のユーザー出口の コードを使用して、書き込みルーチンを呼び出すことができます。

アセンブラー:
ASMEXIT  CSECT
         …
         L     R2,0(,R1)
         USING ENV,R2
         L     R3,4(,R1)
         USING XPL,R3
         …
         L     R15,ENV_WRITE_ROUTINE_EP
         LA    R1,ENV_VERSION
         ST    R1,*+8
         BAL   R1,*+8
         DC    F'0'
         BALR  R14,R15
         …
         COPY  IDISXPLA
         …
C:
#include "SAMPLES(IDISXPLC)"
typedef void WRTN(ENV *pENV);
#pragma linkage(WRTN,OS)
int cexit(ENV *pENV, XPL *pXPL) {
  …
  WRTN *write_rtn;
  write_rtn = (WRTN *)pENV->WRITE_ROUTINE_EP;
  write_rtn(pENV);
  …
}
COBOL:
       …
       PROGRAM-ID. COBEXIT
       …
       LINKAGE SECTION.
           COPY IDISXPLB IN LIB.
       PROCEDURE DIVISION USING ENV, XPL.
       MAIN SECTION.
             …
             CALL WRITE-ROUTINE-EP USING ENV.
             …
       END PROGRAM COBEXIT.
PL/I:
 PLIEXIT: PROC (ENVPTR,XPLPTR)  OPTIONS(BYVALUE,FETCHABLE) ;
 Dcl (Envptr,Xplptr)     Pointer ;
 %include syslib(IDISXPLP) ;
 Dcl IDIWRITE         Entry Variable Options(Asm Byaddr) ;
   …
   Entryaddr(IDIWRITE) = Envptr->Write_Routine_EP ;
   Call IDIWRITE (Envptr->Env) ;
   …
 End PLIEXIT ;

書き込みルーチンからの戻りコードは、RC=8 (構文エラー) が戻されないことを除いて、IDIWRITE REXX コマンドからの戻りコードと同じです。IDIWRITE コマンドを参照してください。

メッセージまたは異常終了コードの説明を構成する文字の合計数が、次の数式の max-chars を超えてはなりません。
max-chars = 32752 - (num-recs * 2)
num-recs はレコードの合計数です。

文字の最大数が max-chars を超える原因となるレコードを渡そうとすると、IDIWRITE (またはロード・モジュール出口により使用される書き込みルーチン) によって RC=4 が戻され、レコードは無視されます。

Fault Analyzer ではテキストのフォーマットは行われません。すべてのレコードは、Message and Abend Code Explanationユーザー出口により指定されたとおりに分析レポートに示されます。

表示時にフォーマット幅を超える長さを持つレコードは、現行インデント (各レコード内の先頭ブランク文字数によって決定される) でラップされます。

複数のMessage and Abend Code Explanationユーザー出口が特定のメッセージまたは異常終了コードの説明を提供している場合は、 最後の説明のみが使用されます。

呼び出されるタイミング

この出口は、Fault Analyzer の実行モードにかかわらず分析レポートのフォーマットで呼び出されます。

パラメーター

パラメーターがどのように出口に渡されるかは、出口タイプ (REXX またはロード・モジュール) によって異なります。

Fault Analyzer は、Message and Abend Code Explanation ユーザー出口を呼び出す前に、特定の障害および有効な処理オプションの現行値を使用してパラメーター・リストを初期化します。

REXX

出口は、以下の 2 つのステムを使用できます。

定義された変数名は、フィールド名と同じです。例えば、ENV データ域のフィールド VERSION にアクセスするには、REXX 変数 ENV.VERSION を使用します。

ロード・モジュール

この出口へのエントリーで、R1 には以下の 2 つのフルワードを構成するパラメーター・リストの 31 ビット・アドレスが含まれます。

以下は、REXX で書かれたMessage and Abend Code Explanationユーザー出口の例です。
1. REXX メッセージおよび異常終了コード説明ユーザー出口の例
/* REXX */
if ENV.VERSION <> 5 then
  say 'Note: ENV data area version change - field usage review required!'
if XPL.VERSION <> 1 then
  say 'Note: XPL data area version change - field usage review required!'
parse var XPL.MESSAGE_TEXT1 msgid msgtext
if msgid = 'MYMSG01' then do
  rec = 'This message indicates that:'
  'IDIWRITE rec'
  rec = '  - A serious problem has occurred'
  'IDIWRITE rec'
  rec = '  - Any data produced should be ignored'
  'IDIWRITE rec'
end
上記のサンプル出口がデータ・セット X.Y.Z のメンバー ABC として存在する場合、IDICNFxx 構成メンバーまたは IDIOPTS ユーザー・オプション・ファイルのいずれかに次のオプションを指定すると、このサンプル出口が呼び出されます。
DataSets(IDIEXEC(X.Y.Z))
Exits(MSGXPL(REXX(ABC)))