ヘッダーをスキップ

Oracle Applications開発者ガイド
リリース12
E06048-01
目次へ
目次
前のページへ
前へ
次のページへ
次へ

CUSTOMライブラリの使用

CUSTOMライブラリを使用したOracle Applicationsのカスタマイズ

CUSTOMライブラリを使用することにより、Oracle Applicationsのコードを変更せずにOracle Applicationsを拡張できるようになります。CUSTOMライブラリは、ズーム(別フォームへの移動および特定レコードの問合せなど)、ビジネス・ルールの規定(ベンダー名は必ず大文字、など)、およびサイトに適用しないフィールドの無効化などのカスタマイズに使用できます。

コードはCUSTOMライブラリで、提供されているプロシージャ・シェル内に作成します。ロジックはすべて、実行対象のフォームおよびブロックに基づいてブランチする必要があります。Oracle ApplicationsではイベントがCUSTOMライブラリに送信されます。カスタム・コードはこれらのイベントに基づいて機能します。

重要: CUSTOMライブラリは、Oracle Applicationsの顧客のみを対象に提供しています。Oracle Applications製品では、ここに説明したプロシージャ・シェル以外の事前定義済ロジックはCUSTOMライブラリに提供されません。

CUSTOMライブラリのコードの作成

CUSTOMライブラリは、Oracle Forms DeveloperのPL/SQLライブラリです。これにより、Oracle Forms Developerの全機能を最大限に活用し、Oracle Applicationsのコードを変更せずにコードを直接Oracle Applicationsに統合できるようになります。

出荷時のCUSTOMライブラリは、AU_TOP/resourceディレクトリ(またはプラットフォームの同等のディレクトリ)にあります。コードが機能するよう、変更するCUSTOMライブラリをAU_TOP/resourceディレクトリに置いてください。

CUSTOMプロシージャにコードを作成後、Oracle Formsを使用してライブラリをコンパイルおよび生成します。次にこのライブラリを$AU_TOP/resourceディレクトリ(またはプラットフォームの同等のディレクトリ)に置きます。その後Oracle Applicationsを起動すると、この新しいコードが実行されます。

警告: ライブラリに.plx(コンパイル済のコードのみ)が存在する場合、Oracle Forms Developerでは常に.pllではなく.plxが使用されます。したがって、.plxファイルを削除するか(コードが.pllファイルから直接実行されます)、Oracle Formsコンパイラを使用して自身の.plxファイルを作成してください。パフォーマンスは.pllファイルよりも.plxファイルを使用する方がよくなります。オペレーティング・システムによっては、Oracle Forms DeveloperのForm Builderを使用してコンパイルおよび保存する際に.plxが作成されない場合があります。このような場合は、(パラメータCOMPILE_ALLをYesに設定して)コマンドラインからOracle Forms Developerコンパイラを使用してライブラリを作成してください。

CUSTOMライブラリのCUSTOMパッケージの仕様は変更できません。CUSTOMライブラリに自身のパッケージを追加できますが、このライブラリに追加したパッケージは必ずCUSTOMパッケージの後に順序付ける必要があります。プログラム・ユニットがアルファベット順になった際、.pldファイルからの変換後もパッケージが必ずCUSTOMパッケージの後に順序付けられるようにするために、パッケージにC以降の文字で始まる名前(たとえば、USER_で始まる名前)を付けることをお薦めします。

注意: CUSTOMパッケージでは、パッケージ・ヘッダーで明示的に「AUTHID DEFINER」を指定する必要があります。「AUTHID DEFINER」がデフォルトであっても、CUSTOMパッケージ・ヘッダーで指定する必要があります。

コーディングの際に考慮する事柄および制限

Oracle Applicationsが稼動するオープン形式の環境を把握しておいてください。また、実行するフォームごとにデータベース接続が存在します。

次の考慮する事柄および制限は、CUSTOMライブラリおよびCUSTOMライブラリに連結する任意のライブラリに適用されます。

CUSTOMライブラリへの他のライブラリの連結

他のライブラリをCUSTOMライブラリに連結できます。ただし、再帰型問題が発生する場合があるため、APPCOREライブラリはCUSTOMライブラリに連結できません(CUSTOMはAPPCOREに連結されるため)。APPCORE2ライブラリをCUSTOMライブラリに連結できます。APPCORE2ライブラリは、次のパッケージを使用してほとんどのAPPCOREルーチンを複製します。

これらのパッケージには、対応するAPPCOREパッケージと同じルーチンが含まれています。対応するAPPCOREルーチンのドキュメントの説明に従ってください。ただし、パッケージ名に2を追加してください。たとえば、フォームでAPPCOREルーチンAPP_ITEM_PROPERTY.SET_PROPERTYをコールする箇所では、CUSTOMライブラリで対応するAPPCORE2ルーチンAPP_ITEM_PROPERTY2.SET_PROPERTYをコールできます。

CUSTOMライブラリは、すでにFNDSQFライブラリが連結された状態で提供されます。FNDSQFにより、Oracle Applicationsのルーチンに(フォームのオープンに対する)機能セキュリティ、フレックスフィールド、および他のユーティリティ・ルーチンが提供されます。

Oracle Applicationsコードの変更

CUSTOMロジックを使用するため、Oracle Applicationsのフォーム内のブロックおよび項目名が必要になる場合がよくあります。目的のフォームを実行中に、「ヘルプ」->「診断」メニューで使用可能な検査機能を使用すると、すべてのオブジェクト名に簡単にアクセスできます。Oracle Forms DeveloperでOracle Applicationsのフォームをオープンしてオブジェクト名を調べないでください。

CUSTOMロジックが起動されるフォームで項目の値またはプロパティを変更する際は注意してください。CUSTOMライブラリは、自分でOracleコードを補強するメカニズムです。CUSTOMライブラリを使用して実行時にOracleコードを変更すると、重要な妥当性チェックのロジックがバイパスされ、データの整合性が保たれなくなる場合があります。本番環境で使用する前に、CUSTOMライブラリに追加した全ロジックを完全にテストしてください。

CUSTOMライブラリでのコーディング標準の準拠

CUSTOMライブラリ内では、Oracle Applicationsのコーディング標準をすべて満たすかぎり、Oracle Forms Developerによりサポートされるほとんどすべてのコードを自由に作成できます。

通常APPCOREライブラリでOracle Applicationsルーチンを使用する箇所では、(CUSTOMライブラリのコピーを連結する)APPCORE2ライブラリで対応するルーチンを使用してください。

ズームまたはCUSTOMライブラリを使用して自分で開発したフォームを起動するには、フォームがOracle Applicationsのコーディング標準すべてに完全に準拠している必要があります。

重要: 別のフォームを起動するには、FND_FUNCTIONパッケージで機能セキュリティ・ルーチンを使用します。CALL_FORMビルトインはOracle Applicationsライブラリではサポートされていないため、使用しないでください。

CUSTOMライブラリへ渡されるイベント

CUSTOMライブラリでは、汎用と製品固有の2種類のイベントを受信します。汎用イベントはOracle Applicationsの全フォームに共通です。これらのイベントには次のようなものがあります。

WHEN-FORM-NAVIGATE、WHEN-NEW- BLOCK-INSTANCE、WHEN-NEW-RECORD-INSTANCEまたはWHEN-NEW-ITEM-INSTANCEに対して作成するロジックは、フォーム、ブロックまたは項目用のこれらのトリガーに存在する既存ロジックの後に起動されます。

WHEN-NEW-FORM-INSTANCEに対して作成するロジックは、APP_STANDARD.EVENTのコール中に起動されます。このコールは、フォームの既存のWHEN-NEW-FORM-INSTANCEロジック内の任意の箇所から行う場合があります。

WHEN-VALIDATE-RECORDに対して作成するロジックは、APP_STANDARD.EVENTまたはFND_FLEX.EVENTのコール中に起動されます。フォームの元々のコード方法によっては、これらのコールのいずれかが、フォームまたはブロックの既存のWHEN-VALIDATE-RECORDロジック内に存在する場合があります。

SPECIALn(nは数値)に対して作成するロジックは、既存のSPECIALnトリガーのロジックよりも先に起動されます(既存のロジックが存在する場合)。

ZOOMイベントは、ユーザーがメニュー(「表示」->「ズーム」)またはツールバーからズームを起動する際に発生します。EXPORTイベントは、エクスポート操作の完了後に発生します(「ファイル」->「エクスポート」)。

KEY-Fnイベント(nは1から8までの数値)に対して作成するロジックは、ユーザーが対応するファンクション・キーまたはキーの組合せを押す際に発生します。機能(F1からF8)に対応する実際のキーの組合せを決定するには、「ヘルプ」->「キーボード」コマンドを選択してください。現在のところ、Oracle ApplicationsではこれらのKEY-Fnイベントに関連付けたロジックは提供していません。

CUSTOMライブラリでは、製品のビジネス・ルールに関連付けられたいくつかの製品固有イベントも受信します(たとえば、Oracle Human ResourcesのNAVIGATEイベント)。CUSTOMライブラリに渡される製品固有イベント(存在する場合)については、ご使用のOracle Applications製品のオープン・インタフェース・マニュアルを参照してください。

CUSTOMライブラリを使用する場合

CUSTOMライブラリを使用してロジックを作成する主要なケースがいくつかあります。それぞれのケースに応じたコードを作成してください。

ズームのコーディング

ズームを使用することにより、ユーザー起動のロジックをブロック・ベースで追加できます。たとえば、ユーザーが「発注の入力」フォームのPOヘッダー・ブロックを使用中は、同じフォームから「ベンダー」フォームにアクセスすることを許可できます。そのブロックに対してのみズームを有効化し、ユーザーがズームを起動すると「ベンダー」フォームがオープンするようにします。

ズーム機能を使用するのはOracle Applicationsの顧客のみです。Oracle Applications製品には事前定義済のズーム・ロジックは同梱されていません。

ズームは次のように動作します。

CUSTOMライブラリにズームのコードを作成する手順

次の手順に従って、CUSTOMライブラリにズームのコードを作成します。

  1. ユーザーがズームを起動できるフォームおよびブロックを指定するCUSTOM.ZOOM_AVAILABLEファンクションにブランチを追加します。

  2. ZOOMイベントのCUSTOM.EVENTプロシージャにブランチを追加します。

    そのブランチ内に、ユーザーがズームを起動できるフォームおよびブロックを指定します。ユーザーがズームを起動した際に起動するロジックを追加します。

ブロックに対する複数ZOOMイベントのサポート

Oracle Applicationsでは、TEMPLATEフォーム(カスタム・フォームを含む)を使用して作成された全フォームに、ズームの参照値リスト(LOV)および対応する参照パラメータが用意されています。具体的には、次のようなものです。

値リストおよびパラメータを使用して、ユーザーに特定ブロックからのズームが1つ以上ある値リストを提供します。

CUSTOMライブラリにズーム値リストのコードを作成する手順:

CUSTOMライブラリで次のようにします(ZOOMイベント・コード内)。

  1. レコード・グループを作成し、ブロックの使用可能なズームの名前および値とともに移入します。

  2. レコード・グループをAPPCORE_ZOOM値リスト(LOV)に連結します。

  3. 値リストをユーザーに対して表示するため、show_lovをコールします。

  4. ユーザーがズームを選択した場合、値がフォームのAPPCORE_ZOOM_VALUEパラメータに返されます。

  5. パラメータ値を取得し、それに従ってズーム・コードにブランチを追加します。

コード例

次の例では、3つの選択肢を含むズーム値リストを設定します。

procedure event(event_name varchar2) is
 form_name      varchar2(30) :=

                   name_in('system.current_form');

    block_name     varchar2(30) :=

                   name_in('system.cursor_block');

    zoom_value varchar2(30);

    group_id recordgroup;

    col_id   groupcolumn;

begin

 IF (event_name = 'ZOOM') then

 if (form_name = 'FNDSCAUS' and

              block_name = 'USER') then



      -- set up the record group

      group_id := find_group('my_zooms');

      if id_null(group_id) then

        group_id := create_group('my_zooms');

        col_id := add_group_column(group_id,

                    'NAME', char_column, 30);

        col_id := add_group_column(group_id,

                    'VALUE', char_column, 30);

        set_lov_property('APPCORE_ZOOM',

                     GROUP_NAME, 'my_zooms');

      else

        Delete_Group_Row( group_id, ALL_ROWS );

      end if;

 Add_Group_Row( group_id, 1);

      Set_Group_Char_Cell('my_zooms.NAME', 1,

                   'Personal Profiles Form');

      Set_Group_Char_Cell('my_zooms.VALUE', 1, 'FNDPOMSV');

 Add_Group_Row( group_id, 2);

      Set_Group_Char_Cell('my_zooms.NAME', 2,

                   'System Profiles Form');

      Set_Group_Char_Cell('my_zooms.VALUE', 2, 'FNDPOMPV');

 Add_Group_Row( group_id, 3);

      Set_Group_Char_Cell('my_zooms.NAME', 3,

                   'Responsibilities Form');

      Set_Group_Char_Cell('my_zooms.VALUE', 3, 'FNDSCRSP');



      -- test the LOV results and open different forms

      if show_lov('APPCORE_ZOOM') then

        zoom_value := name_in(

                  'parameter.APPCORE_ZOOM_VALUE');



        if zoom_value = 'FNDPOMPV' then

          fnd_function.execute(

                   FUNCTION_NAME=>'FND_FNDPOMPV',

                   OPEN_FLAG=>'Y',

                   SESSION_FLAG=>'Y');

        elsif zoom_value = 'FNDSCRSP' then

          fnd_function.execute(

                   FUNCTION_NAME=>'FND_FNDSCRSP',

                   OPEN_FLAG=>'Y',

                   SESSION_FLAG=>'Y');

        elsif zoom_value = 'FNDPOMSV' then

          fnd_function.execute(

                   FUNCTION_NAME=>'FND_FNDPOMSV',

                   OPEN_FLAG=>'Y',

                   SESSION_FLAG=>'Y');

        end if;

      end if;

 end if;  -- end of form branches within Zoom event branch

 END IF;   -- end of branches on EVENT_NAME

end event;

----------------------------------------------------------

汎用フォーム・イベントのコーディング

特定のフォームに対して起動するロジック、および特定のフォーム・イベントでブロックのコードを作成できます。次のイベントに対してロジックのコードを作成できます。

Oracle Human Resourcesのほとんどのフォームなど、Oracle Applicationsの一部のフォームでは、CUSTOMライブラリをコールする追加イベントを提供しています。これらの追加イベントは、フォームを所有する製品のドキュメントにリストされています。汎用フォーム・イベントと同じ方法で、このようなイベントに対するロジックのコードをCUSTOMライブラリに作成できます。

CUSTOMライブラリに汎用フォーム・イベントに対するロジックのコードを作成する手順:

特定のイベントに対するCUSTOM.EVENTプロシージャにブランチを追加します。

そのブランチ内に、ロジックを起動するフォームおよびブロックを指定します。ユーザー指定のフォームおよびブロックに対してイベントが起動した際に実行するロジックを追加します。

コード例

次の例では、様々なフィールド・プロパティおよびプロンプトを変更します。また、カスタム視覚属性(CUSTOM1)の設定および適用も行い、ブロックに対して挿入および更新が実行されるのを防ぎます。

procedure event(event_name varchar2) is



 form_name      varchar2(30) :=

                   name_in('system.current_form');

    block_name     varchar2(30) :=

                   name_in('system.cursor_block');

begin

 if (event_name = 'WHEN-NEW-FORM-INSTANCE') then

 if (form_name = 'FNDSCAUS') then

      --

      -- Hide the Fax field, force the E-mail

      -- field to be uppercase,

      -- make the description field required,

      -- change the person field

      -- color to magenta, change the Supplier

      -- field prompt.

      --

      app_item_property2.set_property('user.fax',

             DISPLAYED, PROPERTY_OFF);

      app_item_property2.set_property(

             'user.email_address',

             CASE_RESTRICTION, UPPERCASE);

      app_item_property2.set_property('user.description',

             REQUIRED,

             PROPERTY_ON);

      app_item_property2.set_property('user.employee_name',

             BACKGROUND_COLOR, 'r255g0b255');

      app_item_property2.set_property(

             'user.supplier_name',

             PROMPT_TEXT, 'Vendor Name');

 --

      -- Set up CUSTOM1 visual attribute as bright yellow.

      --

      set_va_property('CUSTOM1', BACKGROUND_COLOR,

             'r255g255b0');

 -- apply CUSTOM1 visual attribute to fields

      -- (color will override

      -- gray of disabled fields, but will not

      -- override pale yellow

      -- of required fields)

      --

      app_item_property2.set_property('user.supplier_name',

             VISUAL_ATTRIBUTE, 'CUSTOM1');

      app_item_property2.set_property('user.email_address',

             VISUAL_ATTRIBUTE, 'CUSTOM1');

 ELSIF (event_name = 'WHEN-NEW-BLOCK-INSTANCE') then

    IF (form_name = 'FNDSCAUS' and

          block_name = 'USER_RESP') THEN

      -- prevent users from adding

      -- responsibilities

      set_block_property(block_name, insert_allowed,

                property_false);

      set_block_property(block_name, update_allowed,

                property_false);

    END IF;

 END IF;   -- end of branches on EVENT_NAME

end event;

----------------------------------------------------------

製品固有イベントのコーディング

CUSTOMライブラリに渡される製品固有イベントについては、Oracle Applications製品のオープン・インタフェース・マニュアルまたはユーザーズ・ガイドを参照してください。Oracle Application Object Libraryによって渡される製品固有イベントについては、「Oracle Application Object Libraryの製品固有イベント」を参照してください。

CUSTOMライブラリに製品固有イベントに対するロジックのコードを作成する手順:

  1. 特定の製品固有イベントに対するCUSTOM.EVENTプロシージャにブランチを追加します。

    そのブランチ内に、その特定の業務機能に対するロジックを追加します。

  2. カスタム実行スタイルがこの製品固有イベントでサポートされている場合、製品固有イベント・ロジックの実行スタイル(前、後、オーバーライド、標準)を指定するCUSTOM.STYLEファンクションにブランチを追加します(多くの製品固有イベントではカスタム実行スタイルをサポートしていません)。その製品固有イベントでサポートしているスタイルのいずれか1つのみを指定できます。

サポートおよびアップグレード

カスタマイズを管理し、アップグレード時の注意点に対処するために、次のガイドラインに従ってください。

CUSTOMライブラリを使用したフォーム操作でのトラブル

フォームが正常に動作せず、そのフォームにCUSTOMライブラリまたはズーム・ロジックのコードを作成している場合は、メニュー(「ヘルプ」->「診断」->「カスタム・コード」->「オフ」)を使用してCUSTOMライブラリ・コードを一時的に無効にし、問題がカスタマイズまたはOracle Applicationsコードのいずれから生じているのか判断します。

アップグレード

Oracle Applicationsをアップグレードすると、通常CUSTOMライブラリのデフォルト(出荷時)のバージョンを含む新規ディレクトリ構造が作成されるため、追加する変更とともにCUSTOMライブラリのバックアップ・コピーを保持します。アップグレード後、CUSTOMライブラリのカスタム・バージョンをAU_TOP/resourceディレクトリに置きます。アップグレードの一部として、CUSTOM.plxファイルのアップグレードまたは再生成(あるいはその両方)が必要になる場合があります。

Oracle Applicationsのパッチには、新規CUSTOMライブラリは含まれません。

Oracle Applicationsのアップグレードまたはパッチ適用後、フォームおよびブロック名が変わることがあるので注意してください。本番環境で使用する前に、定義したカスタム・ロジックが正常に機能するかテストしてください。

Oracle Application Object Libraryの製品固有イベント

Oracle Application Object Libraryは、CUSTOMライブラリを使用してアクセスできる製品固有イベントを提供します。

WHEN-LOGON-CHANGEDイベント

WHEN-LOGON-CHANGEDイベントを使用して、カスタム検証を取り込んだり、取り込んだカスタム検証が、ユーザーが別のユーザーとしてログ・オンするためデフォルト・メニューの「ファイル」->「別のユーザーでログ・オン」コマンドを使用した後(ユーザーが新規ユーザーとしてサインオンし、「接続」ボタンまたはリターン・キーを押した後)すぐに起動するかを監査します。このルーチンは、Oracle Forms Developerベースのフォームに対してのみ適用可能です。HTMLまたはJavaベースのフォーム(Oracle Self-Service Web Applications)には適用できません。

新規ユーザー名および他のプロファイル値には、FND_PROFILE.GETプロシージャを使用してアクセスできます。離れたサインオン・セッションからユーザー名または情報にはアクセスできません。

なんらかの理由でコードがこのイベントに対してform_trigger_failureを呼び出した場合、ユーザーは、正しくないユーザー名またはパスワードを入力したときのように、サインオン画面に戻されます。

この製品固有イベントでは、カスタム実行スタイルはサポートされません。

関連項目: ユーザー・プロファイルの実装

WHEN-RESPONSIBILITY-CHANGEDイベント

WHEN-RESPONSIBILITY-CHANGEDイベントを使用して、カスタム検証を取り込んだり、取り込んだカスタム検証が、ユーザーが職責を切り替えるためデフォルト・メニューの「ファイル」->「職責の切替」コマンドを使用した後すぐに起動するかを監査します。このルーチンは、Oracle Forms Developerベースのフォームに対してのみ適用可能です。HTMLまたはJavaベースのフォーム(Oracle Self-Service Web Applications)には適用できません。

新規職責名および他のプロファイル値には、FND_PROFILE.GETプロシージャを使用してアクセスできます。離れた職責セッションから職責または情報にはアクセスできません。

なんらかの理由でコードがこのイベントに対してform_trigger_failureを呼び出した場合、ユーザーは、無効な職責を選択したときのように、職責値リストに戻されます。

この製品固有イベントでは、カスタム実行スタイルはサポートされません。

関連項目: ユーザー・プロファイルの実装

CUSTOMパッケージ

CUSTOMパッケージには、次のファンクションおよびプロシージャが含まれます。

CUSTOM.ZOOM_AVAILABLE

変数 説明
要約 ファンクションcustom.zoom_availableは、ブールを戻します。
説明 ズームがこのブロックに対して有効になっている場合はTRUEを返し、それ以外の場合はFALSEを返します。フォームおよびブロック名を常にテストします。コードおよびブランチのフォーム名およびブロック名のSYSTEM変数を適宜参照します。フォームのモジュール名はフォームのファイル名に一致する必要があります。
デフォルトでは、このルーチンはFALSEを返す必要があります。

コード例

次の例では、次の箇所でズームを有効にします。

フォーム: FNDSCAUS、ブロックUSER、および

フォーム: FNDCPMCP、ブロックPROCESS

FUNCTION zoom_available RETURN BOOLEAN IS

  form_name  VARCHAR2(30) := NAME_IN('system.current_form');

  block_name VARCHAR2(30) := NAME_IN('system.cursor_block');

BEGIN

  IF (form_name = 'FNDSCAUS' AND block_name = 'USER') OR

     (form_name = 'FNDCPMCP' AND block_name = 'PROCESS')THEN

     RETURN TRUE;

  ELSE

     RETURN FALSE;

  END IF;

END zoom_available;

CUSTOM.STYLE

変数 説明
要約
function custom.style(event_name varchar2) return integer;
説明 このファンクションを使用すると、カスタム実行スタイルが製品固有イベントでサポートされる場合に、その製品固有イベントの実行スタイルを決定できます(多くの製品固有イベントではカスタム実行スタイルをサポートしていません)。

自分で作成したコードをOracle Applicationsに提供されているコードの前後、またはOracle Applicationsのコードのかわりに実行できます。このインタフェースを介して使用できるイベントのリストは、Oracle Applications製品のユーザーズ・ガイドを参照してください。一部の製品固有イベントでは実行スタイルすべてをサポートしない場合があるので注意してください。CUSTOM.STYLEは汎用フォーム・イベントまたはズームに影響を与えません。

スタイルを返すcustom.standard以外のイベントには、指定の時間に実行されるcustom.event内に対応するコードが必要です。

戻り値として、次のパッケージ変数を使用する必要があります。

デフォルトでは、このルーチンはcustom.standardを返す必要があります(これは、カスタム実行スタイル・コードがないことを意味します)。

重要: オラクル社では、このルーチンに渡すevent_nameの値を追加する権利を保持しています。したがって、すべてのコードは、渡された特定のevent_nameでブランチするように作成する必要があります。

コード例

次の例は、MY_PRICING_EVENTイベントに「オーバーライド」実行スタイルを設定します。

 begin

    if event_name = 'MY_PRICING_EVENT' then

      return custom.override;

    else

      return custom.standard;

    end if;

  end style;

CUSTOM.EVENT

重要: オラクル社では、このルーチンに渡すevent_nameの値を追加する権利を保持しています。したがって、すべてのコードは、渡された特定のevent_nameでブランチするように作成する必要があります。

変数 説明
要約
procedure custom.event(event_name varchar2);
説明 このプロシージャを使用すると、特定のイベントでコードを実行できます。常にイベント名についてテストしてから、そのイベント内のフォームおよびブロック名をテストします。コードとブランチのフォーム名およびブロック名についてのSYSTEM変数をそれぞれ参照してください。フォームのモジュール名はフォームのファイル名に一致する必要があります。
デフォルトでは、このルーチンはnull;を実行する必要があります。

コード例

次の例には、ズームのロジック、製品固有イベント、および汎用フォーム・イベントが含まれています。

ZOOMイベントがフォームの新規セッションを開き、パラメータ値を新規セッションに渡します。パラメータは開かれたフォームにすでに存在し、フォーム機能はすでに定義されていてメニューに追加済です(プロンプトなしのため、ナビゲータには表示されません)。

procedure event(event_name varchar2) is



    form_name      varchar2(30) := name_in('system.current_form');

    block_name     varchar2(30) := name_in('system.cursor_block');

    param_to_pass1 varchar2(255);

    param_to_pass2 varchar2(255);

  begin

 if (event_name = 'ZOOM') then

      if (form_name = 'DEMXXEOR' and block_name = 'ORDERS') then

        /* The Zoom event opens a new session of a form and

        passes parameter values to the new session.  The

        parameters already exist in the form being opened:*/

        param_to_pass1 := name_in('ORDERS.order_id');

        param_to_pass2 := name_in('ORDERS.customer_name');

        fnd_function.execute(FUNCTION_NAME=>'DEM_DEMXXEOR',

                             OPEN_FLAG=>'Y',

                             SESSION_FLAG=>'Y',

                             OTHER_PARAMS=>'ORDER_ID="'||

                             param_to_pass1||

                             '" CUSTOMER_NAME="'||

                             param_to_pass2||'"');

         /* all the extra single and double quotes account for

         any spaces that might be in the passed values */

      end if;



 elsif (event_name = 'MY_PRICING_EVENT') then

       /*For the product-specific event MY_PRICING_EVENT, call a

         custom pricing routine */

      get_custom_pricing('ORDERS.item_id', 'ORDERS.price');



 elsif (event_name = 'WHEN-VALIDATE-RECORD') then

      if (form_name = 'APXVENDR' and block_name = 'VENDOR') then

        /* In the WHEN-VALIDATE-RECORD event, force the value of

           a Vendor Name field to be in uppercase letters */

        copy(upper(name_in('VENDOR.NAME')), 'VENDOR.NAME');

      end if;



 else

      null;

    end if;

  end event;

end custom;



フォームの新規セッションを開く際は、常にFND_FUNCTION.EXECUTEを使用してください。CALL_FORMまたはOPEN_FORMは使用しないでください。フォーム機能は、Oracle Application Object Libraryを使用してすでに定義されており、メニューに追加済である必要があります(ナビゲータに表示しない場合は、プロンプトなしにしてください)。

CUSTOMライブラリを使用するズームの実装例

(CUSTOMライブラリで)ズーム機能を使用して行うことができる簡単なカスタマイズの例を示します。

注意: このズームのデモまたは例は、(Oracle Universityの)クラス「機能拡張: AOL」で使用される研修用クラス・フォームDEMXXEORに基づいています。

DEMXXEORフォームは注文入力用の非常に簡単なフォームです。この例では、フォーム起動時にズームから使用可能にできるフォームに、2つのパラメータ(ORDER_IDおよびCUSTOMER_NAME)を追加します。次にフォームは、パラメータのいずれかに値がある場合は、パラメータに基づく自動問合せを発行します。

ズームそのものについては、同じフォームの最初のブロックから使用可能にします。ユーザーは「受注番号」フィールドおよび「顧客名」フィールドのいずれか(あるいはその両方)に値を指定します。「ズーム」ボタンをクリックすると、ズームにより同じフォームの別のセッションが開かれ、基準に一致する既存の注文が自動的に問い合せされます。

このズームの仕組みと実装方法が理解できたら、他のフォームにも同じアプローチを取ることができるようになります(必ずしも同じフォームの別セッションにズームする必要はありません)。

フォームの変更

Oracle Forms Designerを使用し、ズーム・コードからパラメータを受け取ることができるように「受注デモ」フォーム(DEMXXEOR.fmb)を変更します。

注意: クラス「機能拡張: AOL」のDEMXXEORフォームには、すでにこれらの変更が追加されています。

  1. パラメータORDER_IDを作成します(CHAR型、サイズ255、デフォルト値なし)。

  2. パラメータCUSTOMER_NAMEを作成します(CHAR型、サイズ255、デフォルト値なし)。

    理論上、パラメータは値の渡し元、渡し先の両フィールドに一致する必要がありますが、これはパラメータの用途によって異なります。このケースでは、NUMBER型のかわりにCHAR型にすると、自動問合せにワイルド・カードを使用できるようになります。これは、実際のフィールドより長いパラメータを設定するのと同様です(ほとんどの項目の標準の問合せ長は255です。これらのパラメータは問合せに対してのみ使用されます)。

  3. パラメータ値がNULLでない場合、そのパラメータ値を問合せ基準として使用するように、ターゲット・ブロック(ORDERS)のデフォルトWHERE句を変更します。

    WHERE (:parameter.order_id is null or
    
                    dem_orders_v.order_id like :parameter.order_id)
    
            AND (:parameter.customer_name is null or
    
                    dem_orders_v.customer_name like :parameter.customer_name)
    
    
  4. WHEN-NEW-FORM-INSTANCEトリガーで、既存コードの最後に次の記述を追加します。

    /* fire automatic query if a parameter has a value from Zoom */
    
            if (:parameter.order_id is not null) or
    
               (:parameter.customer_name is not null) then
    
              GO_BLOCK('ORDERS');
    
              do_key('EXECUTE_QUERY');
    
    
    /* clear the parameters after the query so they don't remain
    
                    criteria for future queries */
    
              :parameter.order_id := null;
    
              :parameter.customer_name := null;
    
            end if;
    
    
  5. フォームをコンパイルおよび生成し、.fmxファイルを適切なディレクトリに置きます(クラスからのカスタム・アプリケーション設定があることを前提とします)。

  6. フォームを登録して機能(DEM_DEMXXEOR)を定義し、アクセスできるようにフォーム機能をメニューに追加します。CUSTOMライブラリを変更する前に、フォームがナビゲータから正常に動作することを確認してください。

CUSTOMライブラリの変更

次の手順に従って、CUSTOMライブラリを変更します。

  1. Oracle Forms DeveloperでCUSTOM.pllをオープンします。

  2. CUSTOMパッケージ本体のテキストを次のように変更します(CUSTOMライブラリには各セクションの様々なコメントが記述されています。変更は実際のコード・セクションに行います)。

    PACKAGE BODY custom IS
    
      --
    
      -- Customize this package to provide specific responses to
    
      -- events within Oracle Applications forms.
    
      --
    
      -- Do not change the specification of the CUSTOM package
    
      -- in any way.
    
      --
    
      ------------------------------------------------------------
    
      function zoom_available return BOOLEAN is
    
      --
    
      -- This function allows you to specify if zooms exist for the
    
      -- current context. If zooms are available for this block, then
    
      -- return TRUE; else return FALSE.
    
      --
    
      -- This routine is called on a per-block basis within every
    
      -- Applications form. Therefore, any code that will enable
    
      -- Zoom must test the current
    
      -- form and block from which the call is being made.
    
      --
    
      -- By default this routine must return FALSE.
    
    
    
            form_name  varchar2(30) := name_in('system.current_form');
    
            block_name varchar2(30) := name_in('system.cursor_block');
    
      begin
    
            if (form_name = 'DEMXXEOR' and block_name = 'ORDERS') then
    
              return TRUE;
    
            else
    
              return FALSE;
    
            end if;
    
    
    
      end zoom_available;
    
      ---------------------------------------------------------------
    
      function style(event_name varchar2) return integer is
    
      --
    
      --  This Zoom example does not do anything to the STYLE function
    
    
     begin
    
        return custom.standard;
    
      end style;
    
      ---------------------------------------------------------------
    
      procedure event(event_name varchar2) is
    
      --
    
      -- This procedure allows you to execute your code at specific
    
      -- events. 'ZOOM' or product-specific events will be passed
    
      -- in event_name. See the Applications Technical Reference
    
      -- manuals for a list of events that are available through
    
      -- this interface.
    
    
    
            form_name  varchar2(30) := name_in('system.current_form');
    
            block_name varchar2(30) := name_in('system.cursor_block');
    
            param_to_pass1 varchar2(255);
    
            param_to_pass2 varchar2(255);
    
    
     BEGIN
    
    
     if (event_name = 'ZOOM') then
    
    
     if (form_name = 'DEMXXEOR' and block_name = 'ORDERS')
    
                then
    
                param_to_pass1 := name_in('ORDERS.order_id');
    
                param_to_pass2 := name_in('ORDERS.customer_name');
    
    
    /* use fnd_function.execute instead of open_form */
    
                FND_FUNCTION.EXECUTE(FUNCTION_NAME=>'DEM_DEMXXEOR',  OPEN_FLAG=>'Y',
    
                                     SESSION_FLAG=>'Y',
    
                                     OTHER_PARAMS=> 'ORDER_ID="'||param_to_pass1||
    
                                    '" CUSTOMER_NAME="'||
    
                                    param_to_pass2||'"');
    
                    /* all the extra single and double quotes account for
    
                       any spaces that might be in the passed values */
    
    
     end if;
    
    
     else
    
              null;
    
            end if;
    
    
    
      end event;
    
    
    END custom;
    
    ------------------------------------------------------------------
    
    
  3. すべてコンパイルし、変更を保存します。Oracle Forms Developerを終了します。

  4. Oracle Forms Compilerプログラムを使用し、CUSTOMライブラリに新規.plxファイルを生成します。

  5. ファイルが正常に生成されたか確認します。出力ファイルのパス名を指定しなかった場合、ファイルはc:\orawin\bin(またはプラットフォームの同等のディレクトリ)に生成されます。ファイルをAU_TOP/resourceに移動してください。

  6. ズームでコールするファンクション(DEM_DEMXXEOR)が職責におけるメニューのどこかに存在することを確認します。ナビゲータのメニューからアクセス可能にする必要はありません(アクセス可能にするにはメニューに追加しますが、プロンプトは空白にします)。そうしないと、「ズーム」ボタンは有効になりますが、機能は使用不可というメッセージがユーザーに表示されます。

  7. Oracle Applicationsのナビゲータから試行します。