プログラム状況データ構造

プログラム状況データ構造 (PSDS) を定義して、プログラム例外/エラー情報を RPG IV プログラムに対して使用可能にすることができます。PSDS はメイン・ソース・セクションに定義されていなければなりません。したがって、1 つのモジュールにつき PSDS は 1 つだけです。

データ構造は、データ構造ステートメントの 23 桁目の S によって PSDS として 定義されます。 PSDS には事前定義サブフィールドが含まれ、発生したプログラム例外/エラーに 関する情報が提供されます。 PSDS 内のサブフィールドの位置は、特殊なキーワードによってか、または事前に 定義された開始位置および終了位置によって定義されます。 サブフィールドにアクセスするためには、各サブフィールドに名前を割り当てま す。 キーワードは、26 から 39 桁目に左寄せして指定しなければなりません。

PSDS からの情報は、定様式ダンプによっても提供されます。 しかし、PSDS がコーディングされていなかったり、PSDS の長さにそれらのフィ ールドが含まれていなかった場合には、PSDS のフィールドに関する情報は定様式 ダンプに含まれていないことがあります。 たとえば、PSDS の長さが 275 バイト だけであった場合には、 時刻および日付または実行中のプログラムの情報 は 276 バイトから始まるため、それらの情報はダンプ に *N/A* (適用されません) として表示されることになります。 詳細については、DUMP (プログラム・ダンプ)を参照 してください。

ヒント:

PSDS の 80 バイトより後を埋めるための情報の一部は入手にコストが かかるため、PSDS を指定しないか、あるいは PSDS を 80 バイトより 長くしないことによって、LR をオンにした呼び出しパフォーマンスを改善できる可能性があります。

表 1 にデータ構造のサブフィールドのレイアウト、およびサブ フィールドの事前に定義された開始および終了位置が示されているので、これを 使用してこのデータ構造内の情報にアクセスすることができます。

表 1. プログラム状況データ構造の内容

開始位置

(26 から
32 桁目)

終了位置

(33 から
39 桁目)

 

フォーマット

 

長さ

 

キーワード

 

情報

1 10 文字 10 *PROC CRTRPGMOD を使用してモジュールをコンパイルした場合には、作成されたモジュールの名前になります。 CRTBNDRPG を使用してプログラムを作成した場合には、作成されたプログラムの名前になります。 サイクル・メイン・モジュールの場合には、メイン・プロシージャーの名前になります。
11 15 ゾーン 10 進数 5、0 *STATUS 状況コード。 これらのコードの説明については、プログラム状況コードを参照してください。
16 20 ゾーン 10 進数 5、0   前の状況コード。
21 28 文字 8   RPG IV ソース・リスト行番号またはステートメント番号。ソース・リスト 行番号は、OPTION(*SRCSTMT) が OPTION(*NOSRCSTMT) の代わりに 指定されている場合、ソース・リスト・ステートメント番号に 置き換えられます。そのステートメント番号がルート・ソース・メンバーに適用される 場合、ステートメント番号全体が組み込まれます。 ステートメント番号が 6 桁を超える場合 (すなわち、ゼロ以外のソース ID を組み込んでいる場合)、8 バイト・フィードバック域の最初の 2 桁は、ステートメン ト番号の残りの部分が 354 から 355 桁目に保管されることを示す "+" になります。
29 36 文字 8 *ROUTINE 例外またはエラーが起こった RPG IV ルーチンの名前。このサブフィールドは RPG IV ルーチンの開始時点、または *STATUS サブフィールドがゼロ以外の値によって更新される場合にのみ、プログラム呼び出しの後に更新されます。次の名前によってルーチンが識別されます。
*INIT
プログラム初期化
*DETL
明細行
*GETIN
入力レコードの入手
*TOTC
合計演算
*TOTL
合計行
*DETC
明細演算
*OFL
オーバーフロー行
*TERM
プログラム終了
*ROUTINE
呼び出されたプログラムまたはプロシージャーの名前 (最初の 8 文字)
注: 通常の RPG IV サイクルを使用していない場合には、*ROUTINE は有効でありません。プログラムが通常の RPG IV サイクルからはみ出してしまうような論理では、*ROUTINE が正しい値を反映しない場合があります。
37 39 ゾーン 10 進数 3、0 *PARMS 呼び出し側プログラムからこのプログラムに渡されたパラメーターの数。この値は、%PARMS によって戻り値と同じです。 使用可能な情報がない場合には、-1 が戻されます。
40 42 文字 3   例外タイプ (オペレーティング・システムの例外の場合には CPF、またはマシン例外の場合には MCH)。
43 46 文字 4   例外番号。 CPF 例外の場合には、このフィールドには CPF メッセージ番号が 入れられます。 マシン例外の場合には、マシンの例外番号が入れられます。
47 50 文字 4   未使用。
51 80 文字 30   メッセージ用の作業域。 この区域は、ILE RPG コンパイラーが内部で使用するための専用区域です。情 報の編成は、常に一定であるとは限りません。 この区域は、ユーザーが表示する ことができます。
81 90 文字 10   プログラムが入っているライブラリーの名前。
91 170 文字 80   検索された例外データ。 位置 *STATUS に 09999 が入っている場合に、CPF メッ セージがこのサブフィールドに入れられます。
171 174 文字 4   通知される RNX9001 例外の原因となった例外の識別。
175 184 文字 10   ファイル操作が最後に行われたファイルの名前 (エラーが起こった場合にのみ 更新されます)。 この情報には、常に完全なファイル名が 含まれています。
185 190 文字 6   未使用。
191 198 文字 8   ジョブがシステムに入力された日付 (*DATE 形式)。バッチ・ジョブが夜間処理として 投入された場合、真夜中を過ぎた時間帯に実行 されるバッチ・ジョブは翌日の日付になります。 この値は、ジョブ日付から 導出され、年は 4 桁に拡張されます。 この値によって表される日付は、270 から 275 桁目で表される日付と同じ日付です。
199 200 ゾーン 10 進数 2,0   4 桁の年の先頭の 2 桁。*YEAR の先頭の 2 桁と同じ。このフィールド は、270 から 275 桁目の日付の世紀部分に適用されます。 たとえば、日付が 1999-06-27 の場合、UDATE は 990627 で、この世紀フィールド は 19 になります。 270 から 275 桁目の値とこのフィールドの値を合わせると、191 から 198 桁目にある値の 結合情報になります。
注: この世紀フィールドは、276 から 281 桁目、または 288 から 293 桁目の 日付には適用されません。
201 208 文字 8   ファイル操作が最後に行われたファイルの名前 (エラーが起こった場合にのみ 更新されます)。 長いファイル名が使用されている場合、このファイル名は切り捨て られます。 長いファイル名の情報については、175 から 184 桁目を参照してください。
209 243 文字 35   最後に使用されたファイルの状況情報。この情報には、状況コード、RPG IV 命令コード、RPG IV ルーチン名、ソース・リスト行番号またはステートメント番号、およびレコード名が 含まれます。これはエラーが起こった場合にのみ更新されます。
注: 命令コード名は INFDS の *OPCODE と同じ形式になっています。
ソース・リスト 行番号は、OPTION(*SRCSTMT) が OPTION(*NOSRCSTMT) の代わりに 指定されている場合、ソース・リスト・ステートメント番号に 置き換えられます。そのステートメント番号がルート・ソース・メンバーに適用される 場合、ステートメント番号全体が組み込まれます。 ステートメント番号が 6 桁を超える場合 (すなわち、ゼロ以外 のソース ID を組み込んでいる場合)、8 バイト・フィードバック域の 最初の 2 桁は、ステートメント番号の残りの部分が 356 から 357 桁目に保管される ことを示す "+" になります。
244 253 文字 10   ジョブ名。
254 263 文字 10   ユーザー・プロファイルからのユーザー名。
264 269 ゾーン 10 進数 6、0   ジョブ番号。
270 275 ゾーン 10 進数 6、0   プログラムの実行がシステムで開始された日付 (UDATE 形式) (UDATE はこの 日付から導出されます)。UDATE の説明について は、ユーザー日付の特殊語を参照してください。これは、一般に「ジョブ日付」と 呼ばれています。 この値によって表される日付は、191 から 198 桁目で表される日付と同じ日付です。
276 281 ゾーン 10 進数 6、0   プログラム実行の日付 (UDATE 形式のシステム日付)。 この値の年の部分 が 40 から 99 の間の場合、この日付は 1940 から 1999 の間になります。 それ以外の場合、この日付は 2000 から 2039 の間になります。 199 から 200 桁目の「世紀」値は、このフィールドには適用されません。
282 287 ゾーン 10 進数 6、0   プログラム実行の時刻 (hhmmss 形式)。
288 293 文字 6   プログラムがコンパイルされた日付 (UDATE 形式)。 この値の年の部分 が 40 から 99 の間の場合、この日付は 1940 から 1999 の間になります。 それ以外の場合、この日付は 2000 から 2039 の間になります。 199 から 200 桁目の「世紀」値は、このフィールドには適用されません。
294 299 文字 6   プログラムがコンパイルされた時刻 (hhmmss 形式)。
300 303 文字 4   コンパイラーのレベル。
304 313 文字 10   ソース・ファイル名。
314 323 文字 10   ソース・ライブラリー名。
324 333 文字 10   ソース・ファイル・メンバー名。
334 343 文字 10   プロシージャーが入っているプログラム。
344 353 文字 10   プロシージャーが入っているモジュール。
354 355 2 進数 2   ソース ID は、21 から 28 桁目からのステートメント番号と突き合わせ られます。
356 357 2 進数 2   ソース ID は、228 から 235 桁目からのステートメント番号と突き合わせ られます。
358 367 文字 10   現行ユーザー・プロファイル名。
368 371 整数 10,0   外部エラー・コード
372 379 整数 20,0   操作により設定された XML 要素
380 429 文字 50   未使用。