HANDLER(プログラムまたはプロシージャー { : 通信域)})
HANDLER キーワードは、ファイルがオープン・アクセス・ファイルであることを示します。 装置が DISK、PRINTER、SEQ、または WORKSTN のファイルに対して指定できます。
最初のパラメーターは、ファイルに対する入力命令および出力命令を処理する プログラムまたはプロシージャーを指定します。次のように指定できます。
- プログラムまたはライブラリー修飾プログラムの名前を含んでいる
文字リテラル。名前は大文字小文字が区別されます。
'MYPGM' '*LIBL/MYPGM' 'MYLIB/MYPGM'
例えば、次のファイルのハンドラーは プログラム *LIBL/MYPGM です。DCL-F myfile HANDLER('MYPGM');
- サービス・プログラム内のプロシージャーの名前を含んでいる
文字リテラル。最初に、サービス・プログラムが、単にサービス・プログラム名として、
または、ライブラリーで修飾されたサービス・プログラム名として指定されます。
サービス・プログラムの後に、括弧で囲ったプロシージャー名が続きます。
名前は大文字小文字が区別されます。
'MYSRVPGM(myProcecedure)' '*LIBL/MYSRVPGM(myProcedure)' 'MYLIB/MYSRVPGM(myProcedure)'
例えば、次のファイルのハンドラー は、サービス・プログラム MYLIB/MYSRVPGM 内のプロシージャー MyProc です。DCL-F myfile HANDLER('MYLIB/MYSRVPGM(MyProc)');
- プログラムの名前またはサービス・プログラム内のプロシージャーの名前を含んでいる
文字変数。例えば、次のファイルのハンドラーは、 文字変数 handlerName です。このファイル は異なるハンドラーで 2 回オープンされます。
DCL-F myfile HANDLER(handlerName) USROPN; DCL-S handlerName CHAR(50); handlerName = 'MYLIB/MYPGM'; OPEN myfile; READ myfile; CLOSE myfile; handlerName = 'MYLIB/MYSRVPGM(myHandler)'; OPEN myfile; READ myfile; CLOSE myfile;
- プロシージャー・ポインター。例えば、次のファイルの ハンドラーは、プロシージャー・ポインター handlerPointer です。このファイル は異なるハンドラーで 2 回オープンされます。
DCL-F myfile HANDLER(handlerPointer) USROPN; DCL-S handlerPointer POINTER(*PROC); handlerPointer = %PADDR('proc_a'); OPEN myfile; READ myfile; CLOSE myfile; handlerPointer = %PADDR('proc_b'); OPEN myfile; READ myfile; CLOSE myfile;
- プロトタイプ名。例えば、次のファイルのハンドラーは、 プロトタイプ myHandler です。
DCL-F myfile HANDLER(myproc); /COPY QOAR/QRPGLESRC,QRNOPENACC DCL-PR myproc; parm LIKEDS(QrnOpenAccess_T); END-PR;
注:
- 最初のパラメーターが変数の場合、その変数はファイルがオープンされる前に 設定されている必要があります。
- ハンドラー・プロシージャーがオープン・アクセス・ファイルと同じモジュール内に ある場合、ファイルは USROPN キーワードを指定して定義されている必要があります。
2 番目のパラメーターは任意指定です。これは、 RPG プログラムが追加情報をハンドラーと直接共有できるように するためにハンドラーに渡される変数を指定します。
次の例では、ハンドラーは、通信域が、10 文字の option サブフィールドのあるデータ構造
であると予期します。
注: ハンドラーが予期しているように通信域変数を定義するのは、
RPG プログラマーの責任です。通常、コピー・ファイルを使用して、通信域用のデータ構造のテンプレート
を定義します。RPG プログラムとハンドラーが通信域に同じ定義を
確実に使用するようにするためのコピー・ファイルの使用方法を
示すオープン・アクセス・ファイルの完全な例については、オープン・アクセス・ハンドラーの例を参照してください。
DCL-F myfile HANDLER('MYPGM' : options) USROPN;
DCL-DS options QUALIFIED;
detail CHAR(10);
END-DS;
options.detail = 'FULL';
OPEN myfile;
. . .
CLOSE myfile;
options.detail = 'NONE';
OPEN myfile;
. . .