メッセージおよび異常終了コード説明ユーザー出口
メッセージおよび異常終了コード説明ユーザー出口について、以下で説明します。
目的
この出口は、分析レポートのメッセージおよび異常終了コードの説明を提供できます。Message and Abend Code Explanation がメッセージの説明または異常終了コードの説明のいずれかが使用可能かどうかを判別した後で、分析レポートに説明を表示する前に、Fault Analyzerユーザー出口が制御を受け取ります。Fault Analyzer がソフトコピー・ブックまたはオーバーライド・データ・セットを使用して説明を検出した場合、「XPL.EXPLANATION_AVAILABLE」データ領域フィールドは「Y」設定されます。
データ域の詳細については、XPL - Message and Abend Code Explanationユーザー出口パラメーター・リストを参照してください。
- 何も行わずに使用可能な説明が検出された場合、これを保存する。
- 説明が検出されなかった場合に説明を指定するか、または検出された説明を置換する。
- 発行されたメッセージの実際のテキスト。
このテキストは MESSAGE_TEXT1 から MESSAGE_TEXT10 までのフィールドに示されます。MESSAGE_TEXT1 はメッセージの最初の行または 1 行のみのメッセージを含むように初期化され、メッセージが複数行から構成される場合、MESSAGE_TEXT2 から MESSAGE_TEXT10 までが使用されます。
注: 発行されたメッセージの実際のテキストが使用不可の場合、メッセージ ID のみが MESSAGE_TEXT1 フィールドに置かれます。
- 異常終了コード。
このコードはフィールド 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 フィールドに指定する必要があります。
- 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 = 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
- ENV.
ENV データ域内のすべてのフィールドに対して定義されたシンボルが含まれます (ENV - 共通出口環境情報を参照してください)。
- XPL.
XPL データ域内のすべてのフィールドに対して定義されたシンボルが含まれます (XPL - Message and Abend Code Explanationユーザー出口パラメーター・リストを参照してください)。
定義された変数名は、フィールド名と同じです。例えば、ENV データ域のフィールド VERSION にアクセスするには、REXX 変数 ENV.VERSION を使用します。
ロード・モジュール
- word 1 の 31 ビット ENV アドレス。
ENV データ域のアドレス (ENV - 共通出口環境情報を参照してください)。
- word 2 の 31 ビット XPL アドレス。
XPL データ域のアドレス (XPL - Message and Abend Code Explanationユーザー出口パラメーター・リストを参照してください)。
注: このパラメーターが渡される最後のパラメーターあることを示すため、高位ビットがオンになります。
例
/* 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
DataSets(IDIEXEC(X.Y.Z))
Exits(MSGXPL(REXX(ABC)))