Oracle Applications開発者ガイド リリース12 E06048-01 | 目次 | 前へ | 次へ |
CUSTOMライブラリを使用することにより、Oracle Applicationsのコードを変更せずにOracle Applicationsを拡張できるようになります。CUSTOMライブラリは、ズーム(別フォームへの移動および特定レコードの問合せなど)、ビジネス・ルールの規定(ベンダー名は必ず大文字、など)、およびサイトに適用しないフィールドの無効化などのカスタマイズに使用できます。
コードはCUSTOMライブラリで、提供されているプロシージャ・シェル内に作成します。ロジックはすべて、実行対象のフォームおよびブロックに基づいてブランチする必要があります。Oracle ApplicationsではイベントがCUSTOMライブラリに送信されます。カスタム・コードはこれらのイベントに基づいて機能します。
重要: CUSTOMライブラリは、Oracle Applicationsの顧客のみを対象に提供しています。Oracle Applications製品では、ここに説明したプロシージャ・シェル以外の事前定義済ロジックは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ライブラリに連結する任意のライブラリに適用されます。
ライブラリでSQLは使用できません。ただし、レコード・グループを使用してSELECT文を発行したり、更新、挿入または削除などの他のDML操作に対するストアド・プロシージャへのコールは使用できます。
コード中のOracle Formsのグローバル変数は、実行するすべてのフォームから参照できます。
他のライブラリを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のルーチンに(フォームのオープンに対する)機能セキュリティ、フレックスフィールド、および他のユーティリティ・ルーチンが提供されます。
CUSTOMロジックを使用するため、Oracle Applicationsのフォーム内のブロックおよび項目名が必要になる場合がよくあります。目的のフォームを実行中に、「ヘルプ」->「診断」メニューで使用可能な検査機能を使用すると、すべてのオブジェクト名に簡単にアクセスできます。Oracle Forms DeveloperでOracle Applicationsのフォームをオープンしてオブジェクト名を調べないでください。
CUSTOMロジックが起動されるフォームで項目の値またはプロパティを変更する際は注意してください。CUSTOMライブラリは、自分でOracleコードを補強するメカニズムです。CUSTOMライブラリを使用して実行時にOracleコードを変更すると、重要な妥当性チェックのロジックがバイパスされ、データの整合性が保たれなくなる場合があります。本番環境で使用する前に、CUSTOMライブラリに追加した全ロジックを完全にテストしてください。
CUSTOMライブラリ内では、Oracle Applicationsのコーディング標準をすべて満たすかぎり、Oracle Forms Developerによりサポートされるほとんどすべてのコードを自由に作成できます。
通常APPCOREライブラリでOracle Applicationsルーチンを使用する箇所では、(CUSTOMライブラリのコピーを連結する)APPCORE2ライブラリで対応するルーチンを使用してください。
ズームまたはCUSTOMライブラリを使用して自分で開発したフォームを起動するには、フォームがOracle Applicationsのコーディング標準すべてに完全に準拠している必要があります。
重要: 別のフォームを起動するには、FND_FUNCTIONパッケージで機能セキュリティ・ルーチンを使用します。CALL_FORMビルトインはOracle Applicationsライブラリではサポートされていないため、使用しないでください。
CUSTOMライブラリでは、汎用と製品固有の2種類のイベントを受信します。汎用イベントはOracle Applicationsの全フォームに共通です。これらのイベントには次のようなものがあります。
WHEN-FORM-NAVIGATE
WHEN-NEW-FORM-INSTANCE
WHEN-NEW-BLOCK-INSTANCE
WHEN-NEW-RECORD-INSTANCE
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-RECORD
SPECIALn(nは1から45までの数値)
EXPORT
KEY-Fn(nは1から8までの数値)
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ライブラリを使用してロジックを作成する主要なケースがいくつかあります。それぞれのケースに応じたコードを作成してください。
ズーム - ユーザー起動のロジックをブロック・ベースで追加。ズームは一般的には、別のフォームをオープンして、(オプションで)ズーム・ロジックを介してパラメータ値をオープンしたフォームに渡すことから構成されます。
汎用イベントのロジック - WHEN-NEW-FORM-INSTANCEまたはWHEN-VALIDATE-RECORDなど、特定の汎用フォーム・イベントに対するOracle Applicationsロジックを補強。汎用イベントを使用して、フィールド・プロンプトおよび他のプロパティの変更、フィールドの非表示化、検証の追加などを実行できます。
製品固有イベントのロジック - ビジネス・ルールを規定する特定の製品固有イベントに対するOracle Applicationsロジックを補強または置換。
視覚属性の設定 - 実行時にOracle Applicationsのフィールドの視覚属性を変更するには、CUSTOMライブラリを使用します。Oracle FormsビルトインのSET_VA_PROPERTYを使用して、CUSTOM1-CUSTOM5視覚属性のプロパティを設定します。次に、APP_ITEM_PROPERTY2.SET_PROPERTYを使用して、実行時に視覚属性を項目に適用します。
ズームを使用することにより、ユーザー起動のロジックをブロック・ベースで追加できます。たとえば、ユーザーが「発注の入力」フォームのPOヘッダー・ブロックを使用中は、同じフォームから「ベンダー」フォームにアクセスすることを許可できます。そのブロックに対してのみズームを有効化し、ユーザーがズームを起動すると「ベンダー」フォームがオープンするようにします。
ズーム機能を使用するのはOracle Applicationsの顧客のみです。Oracle Applications製品には事前定義済のズーム・ロジックは同梱されていません。
ズームは次のように動作します。
Oracle Applicationsでは、ユーザーがズームの起動に使用するメニュー・エントリおよびボタンが提供されています。ズームがフォームおよびブロックのCUSTOMライブラリに定義されていない場合、ボタンおよびメニュー・エントリは使用できません。
カーソルがフォームでブロックを変更すると、フォームは常にCUSTOMライブラリのZOOM_AVAILABLEファンクションをコールします。このファンクションからTRUEが返されると、メニューおよびツールバーのズーム・エントリが有効になります。FALSEが返されると、無効になります。
ズーム・エントリが有効な場合、ユーザーがズームを起動すると、フォームによりCUSTOMライブラリのZOOMイベント・コードがコールされます。このイベントに対して、現行のフォームおよびブロックに基づいてブランチするコードを作成します。
次の手順に従って、CUSTOMライブラリにズームのコードを作成します。
ユーザーがズームを起動できるフォームおよびブロックを指定するCUSTOM.ZOOM_AVAILABLEファンクションにブランチを追加します。
ZOOMイベントのCUSTOM.EVENTプロシージャにブランチを追加します。
そのブランチ内に、ユーザーがズームを起動できるフォームおよびブロックを指定します。ユーザーがズームを起動した際に起動するロジックを追加します。
Oracle Applicationsでは、TEMPLATEフォーム(カスタム・フォームを含む)を使用して作成された全フォームに、ズームの参照値リスト(LOV)および対応する参照パラメータが用意されています。具体的には、次のようなものです。
値リスト: APPCORE_ZOOM
パラメータ: APPCORE_ZOOM_VALUE
値リストおよびパラメータを使用して、ユーザーに特定ブロックからのズームが1つ以上ある値リストを提供します。
CUSTOMライブラリで次のようにします(ZOOMイベント・コード内)。
レコード・グループを作成し、ブロックの使用可能なズームの名前および値とともに移入します。
レコード・グループをAPPCORE_ZOOM値リスト(LOV)に連結します。
値リストをユーザーに対して表示するため、show_lovをコールします。
ユーザーがズームを選択した場合、値がフォームのAPPCORE_ZOOM_VALUEパラメータに返されます。
パラメータ値を取得し、それに従ってズーム・コードにブランチを追加します。
コード例
次の例では、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;
----------------------------------------------------------
特定のフォームに対して起動するロジック、および特定のフォーム・イベントでブロックのコードを作成できます。次のイベントに対してロジックのコードを作成できます。
WHEN-FORM-NAVIGATE
WHEN-NEW-FORM-INSTANCE
WHEN-NEW-BLOCK-INSTANCE
WHEN-NEW-RECORD-INSTANCE
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-RECORD
SPECIALn(nは1から45までの数値)
ZOOM
EXPORT
KEY-Fn(nは1から8までの数値)
Oracle Human Resourcesのほとんどのフォームなど、Oracle Applicationsの一部のフォームでは、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.EVENTプロシージャにブランチを追加します。
そのブランチ内に、その特定の業務機能に対するロジックを追加します。
カスタム実行スタイルがこの製品固有イベントでサポートされている場合、製品固有イベント・ロジックの実行スタイル(前、後、オーバーライド、標準)を指定するCUSTOM.STYLEファンクションにブランチを追加します(多くの製品固有イベントではカスタム実行スタイルをサポートしていません)。その製品固有イベントでサポートしているスタイルのいずれか1つのみを指定できます。
カスタマイズを管理し、アップグレード時の注意点に対処するために、次のガイドラインに従ってください。
フォームが正常に動作せず、そのフォームにCUSTOMライブラリまたはズーム・ロジックのコードを作成している場合は、メニュー(「ヘルプ」->「診断」->「カスタム・コード」->「オフ」)を使用してCUSTOMライブラリ・コードを一時的に無効にし、問題がカスタマイズまたはOracle Applicationsコードのいずれから生じているのか判断します。
Oracle Applicationsをアップグレードすると、通常CUSTOMライブラリのデフォルト(出荷時)のバージョンを含む新規ディレクトリ構造が作成されるため、追加する変更とともにCUSTOMライブラリのバックアップ・コピーを保持します。アップグレード後、CUSTOMライブラリのカスタム・バージョンをAU_TOP/resourceディレクトリに置きます。アップグレードの一部として、CUSTOM.plxファイルのアップグレードまたは再生成(あるいはその両方)が必要になる場合があります。
Oracle Applicationsのパッチには、新規CUSTOMライブラリは含まれません。
Oracle Applicationsのアップグレードまたはパッチ適用後、フォームおよびブロック名が変わることがあるので注意してください。本番環境で使用する前に、定義したカスタム・ロジックが正常に機能するかテストしてください。
Oracle Application Object Libraryは、CUSTOMライブラリを使用してアクセスできる製品固有イベントを提供します。
WHEN-LOGON-CHANGEDイベントを使用して、カスタム検証を取り込んだり、取り込んだカスタム検証が、ユーザーが別のユーザーとしてログ・オンするためデフォルト・メニューの「ファイル」->「別のユーザーでログ・オン」コマンドを使用した後(ユーザーが新規ユーザーとしてサインオンし、「接続」ボタンまたはリターン・キーを押した後)すぐに起動するかを監査します。このルーチンは、Oracle Forms Developerベースのフォームに対してのみ適用可能です。HTMLまたはJavaベースのフォーム(Oracle Self-Service Web Applications)には適用できません。
新規ユーザー名および他のプロファイル値には、FND_PROFILE.GETプロシージャを使用してアクセスできます。離れたサインオン・セッションからユーザー名または情報にはアクセスできません。
なんらかの理由でコードがこのイベントに対してform_trigger_failureを呼び出した場合、ユーザーは、正しくないユーザー名またはパスワードを入力したときのように、サインオン画面に戻されます。
この製品固有イベントでは、カスタム実行スタイルはサポートされません。
関連項目: ユーザー・プロファイルの実装
WHEN-RESPONSIBILITY-CHANGEDイベントを使用して、カスタム検証を取り込んだり、取り込んだカスタム検証が、ユーザーが職責を切り替えるためデフォルト・メニューの「ファイル」->「職責の切替」コマンドを使用した後すぐに起動するかを監査します。このルーチンは、Oracle Forms Developerベースのフォームに対してのみ適用可能です。HTMLまたはJavaベースのフォーム(Oracle Self-Service Web Applications)には適用できません。
新規職責名および他のプロファイル値には、FND_PROFILE.GETプロシージャを使用してアクセスできます。離れた職責セッションから職責または情報にはアクセスできません。
なんらかの理由でコードがこのイベントに対してform_trigger_failureを呼び出した場合、ユーザーは、無効な職責を選択したときのように、職責値リストに戻されます。
この製品固有イベントでは、カスタム実行スタイルはサポートされません。
関連項目: ユーザー・プロファイルの実装
CUSTOMパッケージには、次のファンクションおよびプロシージャが含まれます。
CUSTOM.ZOOM_AVAILABLE
CUSTOM.STYLE
CUSTOM.EVENT
変数 | 説明 |
---|---|
要約 | ファンクション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;
変数 | 説明 |
---|---|
要約 |
|
説明 | このファンクションを使用すると、カスタム実行スタイルが製品固有イベントでサポートされる場合に、その製品固有イベントの実行スタイルを決定できます(多くの製品固有イベントではカスタム実行スタイルをサポートしていません)。 |
自分で作成したコードをOracle Applicationsに提供されているコードの前後、またはOracle Applicationsのコードのかわりに実行できます。このインタフェースを介して使用できるイベントのリストは、Oracle Applications製品のユーザーズ・ガイドを参照してください。一部の製品固有イベントでは実行スタイルすべてをサポートしない場合があるので注意してください。CUSTOM.STYLEは汎用フォーム・イベントまたはズームに影響を与えません。
スタイルを返すcustom.standard以外のイベントには、指定の時間に実行されるcustom.event内に対応するコードが必要です。
戻り値として、次のパッケージ変数を使用する必要があります。
custom.before
custom.after
custom.override
custom.standard
デフォルトでは、このルーチンは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;
重要: オラクル社では、このルーチンに渡すevent_nameの値を追加する権利を保持しています。したがって、すべてのコードは、渡された特定のevent_nameでブランチするように作成する必要があります。
変数 | 説明 |
---|---|
要約 |
|
説明 | このプロシージャを使用すると、特定のイベントでコードを実行できます。常にイベント名についてテストしてから、そのイベント内のフォームおよびブロック名をテストします。コードとブランチのフォーム名およびブロック名についての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ライブラリで)ズーム機能を使用して行うことができる簡単なカスタマイズの例を示します。
注意: このズームのデモまたは例は、(Oracle Universityの)クラス「機能拡張: AOL」で使用される研修用クラス・フォームDEMXXEORに基づいています。
DEMXXEORフォームは注文入力用の非常に簡単なフォームです。この例では、フォーム起動時にズームから使用可能にできるフォームに、2つのパラメータ(ORDER_IDおよびCUSTOMER_NAME)を追加します。次にフォームは、パラメータのいずれかに値がある場合は、パラメータに基づく自動問合せを発行します。
ズームそのものについては、同じフォームの最初のブロックから使用可能にします。ユーザーは「受注番号」フィールドおよび「顧客名」フィールドのいずれか(あるいはその両方)に値を指定します。「ズーム」ボタンをクリックすると、ズームにより同じフォームの別のセッションが開かれ、基準に一致する既存の注文が自動的に問い合せされます。
このズームの仕組みと実装方法が理解できたら、他のフォームにも同じアプローチを取ることができるようになります(必ずしも同じフォームの別セッションにズームする必要はありません)。
Oracle Forms Designerを使用し、ズーム・コードからパラメータを受け取ることができるように「受注デモ」フォーム(DEMXXEOR.fmb)を変更します。
注意: クラス「機能拡張: AOL」のDEMXXEORフォームには、すでにこれらの変更が追加されています。
パラメータORDER_IDを作成します(CHAR型、サイズ255、デフォルト値なし)。
パラメータCUSTOMER_NAMEを作成します(CHAR型、サイズ255、デフォルト値なし)。
理論上、パラメータは値の渡し元、渡し先の両フィールドに一致する必要がありますが、これはパラメータの用途によって異なります。このケースでは、NUMBER型のかわりにCHAR型にすると、自動問合せにワイルド・カードを使用できるようになります。これは、実際のフィールドより長いパラメータを設定するのと同様です(ほとんどの項目の標準の問合せ長は255です。これらのパラメータは問合せに対してのみ使用されます)。
パラメータ値が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)
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;
フォームをコンパイルおよび生成し、.fmxファイルを適切なディレクトリに置きます(クラスからのカスタム・アプリケーション設定があることを前提とします)。
フォームを登録して機能(DEM_DEMXXEOR)を定義し、アクセスできるようにフォーム機能をメニューに追加します。CUSTOMライブラリを変更する前に、フォームがナビゲータから正常に動作することを確認してください。
次の手順に従って、CUSTOMライブラリを変更します。
Oracle Forms DeveloperでCUSTOM.pllをオープンします。
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;
------------------------------------------------------------------
すべてコンパイルし、変更を保存します。Oracle Forms Developerを終了します。
Oracle Forms Compilerプログラムを使用し、CUSTOMライブラリに新規.plxファイルを生成します。
ファイルが正常に生成されたか確認します。出力ファイルのパス名を指定しなかった場合、ファイルはc:\orawin\bin(またはプラットフォームの同等のディレクトリ)に生成されます。ファイルをAU_TOP/resourceに移動してください。
ズームでコールするファンクション(DEM_DEMXXEOR)が職責におけるメニューのどこかに存在することを確認します。ナビゲータのメニューからアクセス可能にする必要はありません(アクセス可能にするにはメニューに追加しますが、プロンプトは空白にします)。そうしないと、「ズーム」ボタンは有効になりますが、機能は使用不可というメッセージがユーザーに表示されます。
Oracle Applicationsのナビゲータから試行します。