EXEC TOOLS
文では、ユーザー・イグジットからの取得、設定および例外コールバックを処理する包括的な方法を提供することにより、基本的なOracle Toolset(Oracle Forms、Oracle ReportsおよびOracle Graphics)をサポートします。この後の説明はOracle Formsが中心になっていますが、Oracle ReportsおよびOracle Graphicsについても概念は同じです。
EXEC SQL、EXEC ORACLEおよびホスト言語文の他にも、次のEXEC TOOLS文を使用してOracle Formsユーザー・イグジットを記述できます。
SET
GET
SET CONTEXT
GET CONTEXT
MESSAGE
EXEC TOOLS
GET
文およびEXEC TOOLS SET
文は、SQL*Formsで使用されるEXEC IAF GET
文およびEXEC IAF PUT
文に相当します。IAF GETおよびIAF PUT
とは異なり、TOOLS
GET
およびTOOLS SET
はインジケータ変数を受け入れます。EXEC TOOLS
MESSAGE
文は、メッセージ処理関数のSQLIEMに相当します。EXEC TOOLS
SET
CONTEXT
文およびEXEC TOOLS GET
CONTEXT
文は新しく、SQL*Formsバージョン3にはありません。
注意:
COBOLおよびFORTRANにはポインタ・データ型がないため、Pro*COBOLまたはPro*FORTRANのプログラムでは、SET
CONTEXT
文およびGET
CONTEXT
文は使用できません。
EXEC TOOLS
SET
文は、ユーザー・イグジットからOracle Formsに値を渡します。具体的には、ホスト変数および定数の値をOracle Formsの変数および項目に割り当てます。これらの値は、ユーザー・イグジットからフォームに制御が戻った後に表示されます。
EXEC TOOLS
SET
文を記述するには、次の構文を使用します。
EXEC TOOLS SET form_variable[, ...] VALUES ({:host_variable[:indicator] | constant}[, ...]);
form_variableは、Oracle Formsのフィールド、パラメータ、システム変数、グローバル変数、またはこれらのうちの1つの名前を含むホスト変数(接頭辞としてコロンが付く)です。
次のPro*Cの例では、ユーザー・イグジットによって従業員名(オプションのインジケータ付き)がOracle Formsに渡されます。
EXEC SQL BEGIN DECLARE SECTION; ... char ename[20]; short ename_ind; EXEC SQL END DECLARE SECTION; ... strcpy(ename, "MILLER"); ename_ind = 0; EXEC TOOLS SET emp.ename VALUES (:ename:ename_ind);
この例で、emp.enameはOracle Formsのblock.fieldです。
EXEC TOOLS
GET
文は、Oracle Formsからユーザー・イグジットに値を渡します。具体的には、Oracle Formsの変数および項目の値を、ホスト変数に割り当てます。値が渡されるとすぐに、ユーザー・イグジットではそれらを任意の目的に使用できます。
EXEC TOOLS
GET
文を記述するには、次の構文を使用します。
EXEC TOOLS GET form_variable[, ...] INTO :host_variable[:indicator][, ...];
form_variableは、Oracle Formsのフィールド、パラメータ、システム変数、グローバル変数、またはこれらのうちの1つの名前を含むホスト変数です。
次の例では、Oracle Formsがblock.fieldのemp.enameからユーザー・イグジットに従業員名を渡します。
EXEC SQL BEGIN DECLARE SECTION; ... char ename[20]; EXEC SQL END DECLARE SECTION; ... EXEC TOOLS GET emp.ename INTO :ename;
EXEC TOOLS
SET
CONTEXT
文を使用すると、あるユーザー・イグジット・コールのコンテキスト情報を、別のユーザー・イグジット・コールのために保存できます。SET
CONTEXT
は、EXEC TOOLS
GET
CONTEXT
文で後から参照できるホスト言語のポインタ変数の名前を指定します。ポインタ変数は、コンテキスト情報が格納されているメモリーのブロックを指します。SET
CONTEXT
文を使用すれば、情報を保存するためにグローバル変数を宣言する必要はありません。
EXEC TOOLS
SET
CONTEXT
文を記述するには、次の構文を使用します。
EXEC TOOLS SET CONTEXT :host_pointer_variable [IDENTIFIED] BY context_name;
オプションのIDENTIFIEDキーワードは読みやすさを改善するために使用でき、context_nameは未宣言の識別子、またはコンテキスト領域を命名する文字ホスト変数です。
次の例では、ユーザー・イグジットで、後から使用するためのコンテキスト情報を保存します。
EXEC SQL BEGIN DECLARE SECTION; ... char context1[30]; EXEC SQL END DECLARE SECTION; ... strcpy(context1, "This is context1"); EXEC TOOLS SET CONTEXT :context1 BY my_app1;
この例では、コンテキスト名my_app1は未宣言の識別子です。C言語の場合、引数としてCHAR型の配列が使用されているとき、配列名はその配列に対するポインタと同じになります。
EXEC TOOLS
GET
CONTEXT
文は、ホスト言語のポインタ変数の値を取得して、ユーザー・イグジットに渡します。ポインタ変数は、コンテキスト情報が格納されているメモリーのブロックを指します。
EXEC TOOLS
GET
CONTEXT
文を記述するには、次の構文を使用します。
EXEC TOOLS GET CONTEXT context_name INTO :host_pointer_variable;
context_nameは、未宣言の識別子、またはコンテキスト領域を命名する文字ホスト変数です。
次のPro*Cの例では、ユーザー・イグジットは、前に保存されたコンテキスト情報に対するポインタを取得します。
EXEC SQL BEGIN DECLARE SECTION; ... char *ctx_ptr; EXEC SQL END DECLARE SECTION; ... EXEC TOOLS GET CONTEXT my_app1 INTO :ctx_ptr;
この例では、コンテキスト名my_app1は未宣言の識別子です。
EXEC TOOLS
MESSAGE
文は、ユーザー・イグジットからOracle Formsにメッセージを渡します。このメッセージは、ユーザー・イグジットからフォームに制御が戻った後に、Oracle Formsのメッセージ行に表示されます。
EXEC TOOLS
MESSAGE
文を記述するには、次の構文を使用します。
EXEC TOOLS MESSAGE message_text [severity_code];
message_textは引用符付き文字列または文字ホスト変数、オプションのseverity_codeは整定数またはホスト変数です。MESSAGE
文では、インジケータ変数は受け入れられません。
次のPro*Cの例では、ユーザー・イグジットからOracle Formsに、エラー・メッセージと重大度コードが渡されます。
EXEC TOOLS MESSAGE 'Bad field name! Please reenter.' 15;