プログラム状況データ構造 (PSDS) を定義して、プログラム例外/エラー情報を RPG IV プログラムに対して使用可能にすることができます。PSDS はメイン・ソース・セクションに定義されていなければなりません。したがって、1 つのモジュールにつき PSDS は 1 つだけです。
データ構造は、データ構造ステートメントの 23 桁目の S によって PSDS として 定義されます。 PSDS には事前定義サブフィールドが含まれ、発生したプログラム例外/エラーに 関する情報が提供されます。 PSDS 内のサブフィールドの位置は、特殊なキーワードによってか、または事前に 定義された開始位置および終了位置によって定義されます。 サブフィールドにアクセスするためには、各サブフィールドに名前を割り当てま す。 キーワードは、26 から 39 桁目に左寄せして指定しなければなりません。
PSDS からの情報は、定様式ダンプによっても提供されます。 しかし、PSDS がコーディングされていなかったり、PSDS の長さにそれらのフィ ールドが含まれていなかった場合には、PSDS のフィールドに関する情報は定様式 ダンプに含まれていないことがあります。 たとえば、PSDS の長さが 275 バイト だけであった場合には、 時刻および日付または実行中のプログラムの情報 は 276 バイトから始まるため、それらの情報はダンプ に *N/A* (適用されません) として表示されることになります。 詳細については、DUMP (プログラム・ダンプ)を参照 してください。
LR がオンによる呼び出しのパフォーマンスは、PSDS を指定しないか、 あるいは PSDS の 80 バイトより後に埋め込む一部の情報を入手するのに時 間を要するので、PSDS を 80 バイトより長くしないことによって大幅に改善され ます。
表 28 にデータ構造のサブフィールドのレイアウト、およびサブ フィールドの事前に定義された開始および終了位置が示されているので、これを 使用してこのデータ構造内の情報にアクセスすることができます。
開始位置 (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
サブフィールドがゼロ以外の値によって更新される場合にのみ、プログラム呼び出しの後に更新されます。次の名前によってルーチンが識別されます。
注:
通常の 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 | 未使用。 |