変更の始まり

オープン・アクセス・ハンドラー

オープン・アクセス・ハンドラーは、オープン・アクセス・ファイルに対するすべての命令 の処理を担当します。

ハンドラーは、ファイルがオープンされるとき、クローズされるとき、 および、ファイルに対する入出力命令が行われるときに呼び出されます。

ハンドラーに渡されるパラメーター

ハンドラーには単一のパラメーターが渡されます。 ファイル QOAR/QRPGLESRC 内のコピー・メンバー QRNOPENACC には、 データ構造テンプレート QrnOpenAccess_T が含まれていて、 それを LIKEDS キーワードで使用することでハンドラー内のパラメーターを定義できます。

ハンドラー・パラメーターには、他の構造をポイントする多くのポインター・サブフィールドが含まれています。 コピー・ファイルには、他にもデータ構造テンプレートが含まれていて、 これらの他の構造を定義するために使用できます。 例えば、キーワード LIKEDS(QrnPrtctl_T) を使用して定義される構造の 基底ポインターとして prtctl サブフィールドを使用できます。

コピー・ファイルには、ハンドラー内で使用できる名前付き定数もいくつか含まれています。 例えば、QrnOperation_OPEN など、名前が QrnOperation_ で始まる 名前付き定数がいくつかあり、 ハンドラー・パラメーターのサブフィールド rpgOperation とともに使用することができます。

サブフィールドは、必要な命令を実行するためにハンドラーが必要とするすべての情報を ハンドラーに提供します。 例えば、出力命令の場合、ファイルに書き込むデータを受け取ります。

また、ハンドラーは、サブフィールドを使用することで、命令の後に RPG によって必要とされるすべての情報を 戻すこともできます。 例えば、入力命令の場合、ハンドラーは入力データを戻したり、 ファイルの終わりに達したかどうかの情報を戻したりすることができます。

ハンドラーが RPG プログラマーと直接通信する必要がある場合、 ハンドラーの作成者は RPG プログラマーに、HANDLER キーワードの通信域 パラメーターを 指定するように依頼できます。 RPG プログラムおよびハンドラーの作成者は、 通信域パラメーターの定義がハンドラーと RPG プログラムで 同じであるように注意しなければなりません。 通常、ハンドラー作成者がコピー・ファイル内にテンプレート・データ構造を用意し、 それを RPG プログラマーが使用して通信域パラメーターを定義できるようにします。
注: 通信域はユーザー域 とも呼ばれます。 ハンドラー・パラメーター内の userArea サブフィールド は、RPG プログラム内で HANDLER キーワードに指定される通信域パラメーターを指す ポインターです。

ハンドラーは、ハンドラーのすべての呼び出しで使用可能な状態情報を保持する必要が ある場合、ハンドラー・パラメーター内 の stateInfo ポインター・サブフィールドを使用できます。 ある 1 回のハンドラー呼び出し中にこのサブフィールドにハンドラーがポインター値を 入れると、同じ値が、その特定のファイルに対するそれ以降のすべてのハンドラー呼び出しで 使用可能になります。 通常、ハンドラーは OPEN 命令を処理している間に状態情報のための記憶域を 割り振り、CLOSE 命令の処理中にその記憶域を割り振り解除します。

ハンドラーでのエラー

ハンドラーが未処理例外で失敗した場合、 RPG 命令はその命令に関連する状況コードで失敗 します。例えば、命令が OPEN または CLOSE の場合、 エラー状況は 1216 または 1217 のいずれかです。 他の命令の場合の状況は 1299 です。

ハンドラーがエラーを検出した場合、RPG プログラムに障害を知らせる手段として次の 2 つの方法があります。
  • 例外メッセージを送信する。これによって、ハンドラーは未処理の例外で終了します。 このメッセージはジョブ・ログに記録され、後続の RPG エラー・メッセージ はこのエラー・メッセージを参照します。

    この方法の利点は、ハンドラーは例外メッセージが送信されるとすぐに 終了し、したがって、ハンドラーは命令が失敗したかどうかを追跡する必要がないことです。

  • ハンドラー・パラメーターの rpgStatus サブフィールド を適切な RPG 状況コードに設定する。 これは、診断メッセージをジョブ・ログに送信するのにも役立ちます。

    この方法の利点は、正確な状況コードをハンドラーが選択できること です。例えば、WORKSTN に対する命令に関連付けられたいくつかの状況コードが あります。

オープン・アクセス・ハンドラーの作成については、トピック 『Rational Open Access: RPG Edition』を参照してください。

変更の終わり