ヘッダーをスキップ

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

ツールバーおよびデフォルト・メニューの制御

プルダウン・メニューおよびツールバー

Oracle Applicationsのプルダウン・メニュー(デフォルト・メニュー)を使用すると、「レコードの消去」などの標準のOracle Formsファンクションや、アプリケーション固有のファンクションを起動できます。

メニューとツールバーは、どちらもTEMPLATEフォームに含まれています。メニューとツールバーのエントリは、現在のコンテキストに応じて自動的に有効または無効になります。

ツールバーの各プルダウン・メニューと各アイコン・ボタンの詳細は、『Oracle Applicationsフォーム・ベース製品のユーザー・インタフェース標準』を参照してください。

メニューおよびツールバー・エントリ

使用するメニューやツールバーは、フォームの変更にあわせて切り替わります。次にあげる動作は、特に指定しないかぎりフォームに埋め込まれたフォーム・レベルのトリガーによって自動的に行われます。動作を制御するトリガーは、該当する各エントリとともに表示されます。

メニューとツールバーの両方にあるエントリ

ツールバーにも表示されるエントリは次のとおりです。

メニューのみのエントリ

プルダウン・メニューの「ファイル」から「ヘルプ」までに表示されるエントリは次のとおりです。

動的メニュー・コントロール

必要な動作が自動的に行われない場合、APP_SPECIAL.ENABLEプロシージャを使用してメニュー項目を動的に制御できます。まず、対象のメニュー項目がデフォルトのメニュー・コントロールの対象となっているかどうかを調べて、デフォルトの動作を無視する必要が本当にあるかを確認します。

そのメニュー項目がデフォルトのメニュー・コントロールによって制御されなていない場合は、該当するトリガー(通常はPRE-BLOCKまたはWHEN-NEW-BLOCK-INSTANCE)を使用します。次のコードを追加します。

 app_special.enable('the menu item', PROPERTY_OFF|ON); 

終了したら、次のコールによってメニュー項目を元に戻します(通常はPOST-BLOCK)。

 app_special.enable('the menu item', PROPERTY_ON|OFF);

次のように、メニュー項目のフルネームをこのコールに含めます。

 app_special.enable('CLEAR.FIELD', PROPERTY_OFF); 

AU_TOP/resource/<language>領域からFNDMENUをコピーしてメニュー項目のフルネームを決定し、そのコピーを開いてメニュー項目を調べてください。

メニュー項目がデフォルトのメニュー・コントロールに制御されている場合に、その動作を変更(有効または無効化する)するには、リストされているフィールドまたはブロック・レベルのトリガー(WHEN-NEW-BLOCK-INSTANCE、WHEN-NEW-RECORD-INSTANCE、WHEN-NEW-ITEM- INSTANCEのいずれか)を作成します。トリガーの実行階層を「オーバーライド」に設定し、次のコードを追加します。

 app_standard.event('TRIGGER_NAME');

 app_special.enable('Menu_item', PROPERTY_OFF|ON);

この項目は、デフォルトのメニュー・コントロールによって他のブロックでも正確にリセットされるので、現在のブロック、レコードまたは項目から移動するときに再度設定する必要はありません。

関連項目: APP_SPECIAL: メニューおよびツールバー・コントロール

メニューに影響する一般的なコーディング・ミス

メニューに関する問題は、次のようなコーディング・ミスが原因となっている場合が多くあります。

レコードが1つに限られるブロック

レコードが1つに限定されているブロックでは、メニュー・オプションの一部を無効にする場合があります。「単一レコード・データ・ブロック」の項では、これを行うタイミングと方法について説明します。

関連項目: シングル・レコード・ブロック

「保存して続行」

デフォルトでは、このファンクションは「保存」を実行し、次にフォームの「最初のナビゲーション・データ・ブロック」へ移動してから、次のレコードに進みます。この動作は上書きできます。

フォーム・レベルのACCEPTトリガー内にあるコードを次のいずれかのコードに置き換えるか、実行階層を「オーバーライド」に設定して次のうちのどれかをコールするブロック・レベルのACCEPTトリガーを作成します。

同期化

ツールバーおよびメニューは、標準フォーム・レベルのWHEN-NEW-RECORD-INSTANCE、WHEN-NEW- BLOCK-INSTANCEおよびWHEN-NEW-ITEM-INSTANCEトリガーによって自動更新されます。ブロックまたは項目のプロパティを変更した場合、該当するトリガーが起動されるまで、メニューおよびツールバーにはこの変更が反映されません。

たとえば、カーソルがすでに位置しているブロックで「挿入許可」というブロック・プロパティをオフに切り替えた場合、次にあげるルーチンを明示的にコールしてメニューとツールバーを同期化する必要があります。

APP_STANDARD.SYNCHRONIZE;



関連項目: APP_STANDARDパッケージ

アプリケーション固有のエントリ: スペシャル・メニュー

メニューをカスタマイズして、アプリケーション固有の値を表示できます。メニューでは、トップレベルの3つのスペシャル・メニュー・エントリ(通常は「ツール」、「レポート」、「処理」)の下に、アプリケーション固有のエントリを最大45件表示できます。ツールバーでは、45のスペシャル・メニュー・エントリに対応するアイコン・ボタンを表示できます。

ツールバーに配置されるすべてのアイコンはユーザー・インタフェース標準グループによって承認される必要があり、他のすべてのアイコンとともに保持されます。

関連項目: APP_SPECIAL: メニューおよびツールバー・コントロール

スペシャル・メニュー・エントリの例

「受注の記帳」という特別なファンクションをメニューとツールバーに追加するとします。「受注の記帳」を最初のスペシャル・メニュー(「ツール」)の先頭エントリとして追加し、さらにツールバーのアイコンにも追加してフォームの「ヘッダー」ブロック内のみで使用できるようにするには、次の手順を実行します。

  1. フォーム・レベルのPRE-FORMトリガーを変更します。

    PRE-FORM
    
    
    
    
    app_special.instantiate('SPECIAL1', '&Book Order', 'bkord');
    
    
    
    

    フォームの翻訳を計画している場合は、メッセージ・ディクショナリ、パラメータまたは静的レコード・グループ・セルを使用して、スペシャル・メニューのエントリを格納します。次に値(アプリケーションの翻訳時に翻訳されます)を取得して変数に代入し、その変数をAPP_SPECIALルーチンに渡します。たとえば次のようになります。

    app_special.instantiate('SPECIAL1', my_menu_entry, 'bkord');
    
    
    
    
  2. フォーム・レベルのPRE-BLOCKトリガーを追加します。

    PRE-BLOCK
    
    app_special.enable('SPECIAL1',PROPERTY_OFF);
    
    
  3. スペシャル・メニュー・エントリを有効化するブロックに、ブロック・レベルのPRE-BLOCKトリガーを追加します。

    PRE-BLOCK in HEADER block
    
    app_special.enable('SPECIAL1',PROPERTY_ON);
  4. 「受注の記帳」ファンクションを実行するコードを含むブロック・レベルのSPECIAL1ユーザー命名トリガーを追加します。これは、ユーザーがこのメニュー・エントリを選択すると実行されます。

カスタム・フォームのカスタム・ツールバー・アイコン

カスタム・フォームのカスタム・アイコン・ファイルは、OA_MEDIA仮想ディレクトリによって指定されたディレクトリ内にある独立した標準.gifファイルである必要があります(詳細は、Webサーバー管理者にお尋ねください)。カスタム・アイコンのアイコン・ファイルを取得すると、フォーム・サーバーにラウンドトリップする必要があるので、パフォーマンスの問題が発生する場合は取得するアイコン数を制限します。

ツールバーに配置されるすべてのOracle Applicationsアイコンは標準グループによって承認される必要があり、他のすべてのアイコンとともに適切な.jarファイルに保持されます。

スペシャル・メニューの無効化

スペシャル・メニュー・エントリをすべて無効にするには(問合せ入力モード時など)、APP_SPECIAL.ENABLE('SPECIAL', PROPERTY_OFF);をコールします。

コンテキスト・メニュー(ポップアップ・メニュー)のカスタマイズ

Oracle Applicationsでは、すべてのテキスト項目にデフォルトのコンテキスト・メニュー機能が用意されています。現在カーソルが位置しているテキスト項目上にマウス・ポインタを保持したままマウスの右ボタン(またはそれに相当する二次的ボタン)を押すと、Oracle Applicationsで状況依存のポップアップ・メニューが表示されます。デフォルト・メニュー・エントリは次のとおりです。

Cut

Copy

Paste

------

Folder

------

Help

コンテキスト・メニューをカスタマイズして、デフォルト・エントリに加えてアプリケーション固有のエントリを表示できます。コンテキスト・メニューには、最大10件までのアプリケーション固有エントリを表示できます。アプリケーション固有のエントリは、「フォルダ」と「ヘルプ」のエントリ(およびそれらのセパレータ・ライン)の間に表示されます。カスタマイズするエントリの間にセパレータ・ラインを含めることもできます。たとえば、次のようにします。

Cut

Copy

Paste

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

Folder

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

First Entry

Second Entry

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

Third Entry

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

Help

APP_POPUP: コンテキスト・メニュー・コントロール

コンテキスト・メニューにエントリを追加

コンテキスト・メニューにエントリを追加するには、フォーム内の各エントリに少なくとも2つのトリガーが必要になります。第1のトリガーはPRE-POPUP-MENUであり、必要な動作に応じてブロック・レベルか項目レベルのいずれかになります。PRE-POPUP-MENUトリガーはAPP_POPUP.INSTANTIATEルーチンをコールして、メニュー・エントリを設定します。このコールには、メニュー・エントリのファンクション名であるPOPUP1からPOPUP10までの名前が含まれています。トリガーの実行階層を「後」に設定して、フォーム・レベルのPRE-POPUP-MENUトリガー(最初に起動して、現在フォーカスされているフィールドをユーザーがクリックしたかをチェックし、メニューをデフォルト状態に設定する)の後でそのトリガーが起動するようにします。

第2のトリガーは、POPUP1からPOPUP10までの名前が付いた、対応するユーザー命名トリガーです。通常これはブロック・レベルか項目レベルであり、ユーザーがメニュー・エントリを選択したときに実行されるファンクションが含まれます。ポップアップ・メニュー・エントリが表示され、ファンクションを選択すると、そのフィールドが現在無効になっていたとしてもそのファンクションは実行されます。したがってフィールドが無効なときにロジックが実行されない場合は、コード内でテストを実行する必要があります。

コンテキスト・メニュー・エントリの例

「承認」という特別なファンクションをコンテキスト・メニューに追加するとします。「承認」をコンテキスト・メニューの最初のカスタム・エントリとして追加し、フォームの「購買依頼番号」フィールド内のみで使用できるようにするには、次の手順を実行します。

  1. 「購買依頼番号」フィールドで、項目レベルのPRE-POPUP-MENUトリガーを変更します。必ず、トリガーの実行階層を「後」に設定してください。

    app_popup.instantiate('POPUP1', 'Approve');
    
    

    フォームの翻訳を計画している場合は、メッセージ・ディクショナリ、パラメータまたは静的レコード・グループ・セルを使用して、スペシャル・メニューのエントリを格納します。次に値(アプリケーションの翻訳時に翻訳されます)を取得して変数に代入し、その変数をAPP_SPECIALルーチンに渡します。たとえば次のようになります。

    app_special.instantiate('POPUP1', my_menu_entry);
    
    
  2. 「承認」ファンクションを実行するコードを含むフィールド・レベルのPOPUP1ユーザー命名トリガーを追加します。これはユーザーがこのメニュー・エントリを選択すると実行されます。

APP_POPUP: コンテキスト・メニュー・コントロール

コンテキスト・メニューにエントリを追加するには、APP_POPUPパッケージを使用します。このパッケージを使用して追加したエントリは、テキスト項目のデフォルト・コンテキスト・メニューの「フォルダ」エントリと「ヘルプ」エントリの間に表示されます。

関連項目: コンテキスト・メニュー(ポップアップ・メニュー)のカスタマイズ

APP_POPUP.INSTANTIATE

要約

procedure APP_SPECIAL.INSTANTIATE(

          option_name        varchar2,

          txt                varchar2,

          initially_enabled  boolean  default true,

          separator          varchar2 default null);

説明

このプロシージャでは、テキスト項目のデフォルト・コンテキスト・メニューに最大10件のカスタム・エントリを追加できます。

ブロック・レベルまたは項目レベルのPRE-POPUP-MENUトリガーでこのプロシージャをコールします。トリガーの実行階層を「後」に設定して、フォーム・レベルのPRE-POPUP-MENUトリガー(最初に起動して、現在フォーカスされているフィールドをユーザーがクリックしたかどうかをチェックし、メニューをデフォルト状態に設定する)の後でそのトリガーが起動するようにします。

引数(入力)

変数 説明
option_name POPUP1からPOPUP10。POPUP1はカスタマイズ可能なエントリ10件のなかで一番上に表示されます(「フォルダ」エントリのすぐ下)。POPUP10が一番下になります(「ヘルプ」エントリのすぐ上)。
txt メニュー項目のラベル。翻訳済文字列を渡します(フォームの翻訳予定がある場合は、メッセージ・ディクショナリでメッセージを定義し、最初にメッセージを取得して、取得したメッセージ文字列をAPP_POPUPに渡す必要があります)。
initially_enabled メニュー項目のステータスを設定するためのブール値。項目を有効にしない場合は、FALSEを渡します。
separator メニュー・エントリの上にメニューのセパレータ・ラインを表示するには「LINE」を渡します。最初のカスタム・エントリの上(「フォルダ」エントリのすぐ下)にあるセパレータ・ラインは自動的に表示されます。

APP_POPUP.INSTANTIATE('POPUP1','First Entry');

APP_POPUP.INSTANTIATE('POPUP2','Second Entry', TRUE,

                      'LINE');

APP_POPUP.INSTANTIATE('POPUP3','Third Entry', FALSE);

これは、メニューで次のように表示されます。

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

        Cut

        Copy

        Paste

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

        Folder

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

        First Entry

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

        Second Entry

        Third Entry   (disabled, so greyed out)

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

        Help

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

APP_SPECIAL: メニューおよびツールバー・コントロール

メニュー・エントリやツールバーのボタンを有効にしたりカスタマイズするには、APP_SPECIALパッケージを使用します。

関連項目: アプリケーション固有のエントリ:スペシャル・メニュー

APP_SPECIAL.INSTANTIATE

要約

procedure APP_SPECIAL.INSTANTIATE(

          option_name       varchar2,

          hint varchar2     default null,

          icon varchar2     default null,

          initially_enabled boolean default true,

          separator         varchar2 default null);

説明

このコールは、仕様に従ってスペシャル・メニューを構成します。APP_STANDARD.EVENT('PRE-FORM')へのコールの後、PRE-FORMトリガーでこのファンクションを呼び出します。ユーザーがスペシャル・メニューのエントリを選択するか、対応するツールバー・ボタンを押すと、ファンクションと同じ名前のユーザー命名トリガーが実行されます。

引数(入力)

変数 説明
option_name SPECIAL1からSPECIAL45を渡して、ファンクションの割当先となるスペシャル・メニューのスロットを示します。SPECIAL1は3つのスペシャル・メニューのうち、最初のスペシャル・メニューの一番上になり、SPECIAL15は最初のスペシャル・メニューの一番下になります。SPECIAL16は3つのスペシャル・メニューのうち、2番目のスペシャル・メニューの一番上になり、SPECIAL30は2番目のスペシャル・メニューの一番下になります。SPECIAL31は3つのスペシャル・メニューのうち、3番目のスペシャル・メニューの一番上になり、SPECIAL45は3番目のスペシャル・メニューの一番下になります。メニュー・エントリのどれかをインスタンス化すると、対応するスペシャル・メニューのトップレベル・メニューが有効になります。
チェック・ボックスは、最初のスペシャル・メニューでのみ使用可能です。チェック・ボックス・エントリは、チェック・ボックスを含むメニュー・エントリを提供します。対応するSPECIALnエントリのかわりにSPECIAL1_CHECKBOXからSPECIAL15_CHECKBOXまでを渡して、ファンクションの割当先となるスペシャル・メニューのスロットを示します。チェック・ボックス・エントリを使用する場合、APP_SPECIAL.SET_CHECKBOXルーチンも使用して、対応するメニュー・エントリのチェック・ボックスの初期値を設定する必要があります。
SPECIAL、SPECIAL_BまたはSPECIAL_Cを渡して、トップレベルのスペシャル・メニュー3つのうち1つを明示的に制御します。SPECIALは3つのスペシャル・メニューのうち最初のメニューの一番上になります。SPECIAL_Bは2番目のスペシャル・メニューの一番上、SPECIAL_Cは3番目のスペシャル・メニューの一番上になります。これは通常、トップレベル・エントリを明示的に有効化または無効化するときに使用します。
hint メニュー項目のラベル。翻訳済文字列を渡します(フォームの翻訳予定がある場合は、メッセージ・ディクショナリでメッセージを定義し、最初にメッセージを取得して、取得したメッセージ文字列をAPP_SPECIALに渡す必要があります)。文字列「&」を含めて、どの文字がその項目のショートカット・キーになるかを定義します(Oracle Forms Form Builderの動作と同じ。例: 「&Book Orders」)。SPECIAL_B(レポート)またはSPECIAL_C(操作)のラベルは変更できますが、SPECIALメニュー(ツール)のラベルは変更できません。また、SPECIAL_BまたはSPECIAL_Cのアクセス・キーを指定することもできません。
icon アイコン・ボタンをファンクションのツールバーに含めるには、そのアイコンの名前を付けます。SPECIAL1からSPECIAL45までのファンクションのどれにでも、対応するツールバー・ボタンを含めることができます(ただし画面の見やすさという点から、ツールバーの追加アイコン数にはかぎりがあります)。対応するツールバー・ボタンがない場合は、NULLを渡します。SPECIALn_CHECKBOXエントリについては、ツールバー上にアイコンを配置できません。
カスタム・フォームのアイコン・ファイルは、OA_MEDIA仮想ディレクトリによって指定されたディレクトリ内のに.gifファイルにする必要があります(詳細は、Webサーバー管理者に連絡してください)。カスタム・アイコンのアイコン・ファイルを取得すると、フォーム・サーバーへのラウンドトリップが必要になるため、パフォーマンスの問題が発生する場合は取得するアイコン数を制限する必要があります。
Oracle Applications製品では、アイコン・ファイルはOracle Applicationsインストールに含まれている.jarファイルにあります。
initially_enabled メニュー項目の初期ステータスを設定するためのブール値。アプリケーション起動時に項目を有効にしない場合は、FALSEを渡します。デフォルト値はTRUEです。
separator メニュー・エントリの上にメニューのセパレータ・ラインを表示するには「LINE」を渡します。「LINE」引数はSPECIAL1(_CHECKBOX)、SPECIAL16、SPECIAL31では無視されます。デフォルトではラインは表示されません。

例1

APP_SPECIAL.INSTANTIATE('SPECIAL3','&Book Order', 'POBKORD', TRUE, 'LINE');

例2

app_special.instantiate('SPECIAL12_CHECKBOX',

                        'Specia&l 12 Check Box with Line',

                         separator=>'LINE');

app_special.set_checkbox('SPECIAL12_CHECKBOX','TRUE');  

これは、メニュー・エントリで次のように表示されます。

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

[x] Speciall 12 Check Box with Line

APP_SPECIAL.ENABLE

要約

procedure APP_SPECIAL.ENABLE(

          option_name varchar2,

                          state number);

説明

このコールは、スペシャル・メニューを含むメニュー上の項目(およびそれに対応するツールバー・ボタン)の有効および無効を制御します。これにより、各ブロックのメニューをカスタマイズできます。

フォーム内のほとんどのブロックで特別なファンクションが使用できる場合は、フォーム・レベルのPRE-BLOCKトリガーを作成して、そのファンクションを有効にします。このファンクションが有効でないブロックについては、実行階層を「オーバーライド」に設定してファンクションを無効にし、ブロック・レベルのPRE-BLOCKトリガーをコーディングします。

関連項目: メニューおよびツールバー・エントリ

SAVEを有効または無効にして、「ファイル」->「保存」および「ファイル」->「保存して次を入力」メニュー・エントリを制御します。APP_FORM.QUERY_ONLY MODEをコールすると、「保存」は自動的に無効になります。

メニューにアクセスするためのモーダル・ウィンドウに入力する前に、APP_SPECIAL.ENABLE('MODAL', PROPERTY_OFF)をコールします。ブロックから移動するときは再びPROPERTY_ONにしてENABLEをコールします。PROPERTY_OFFにすると、モーダル・ブロックで禁止されているメニュー項目が無効になります。

ATTACHMENTS、TRANSLATION、SUMMARY/DETAILおよびSELECT_ALLメニュー・エントリの有効および無効を制御できます。

使用可能なレコードが1つしかないブロック内の「実行」メニューでは、SINGLEオプションを使用して、最初のレコード、最後のレコード、前のレコード、および次のレコードの各オプションを無効にできます。

関連項目: シングル・レコード・ブロック

ABOUTオプションを使用して、「ヘルプ」->「レコード履歴」メニュー・オプションを無効にします。

引数(入力)

変数 説明
option_name 有効にするオプション名。設定可能な値はABOUT、ATTACHMENTS、MODAL、SAVE、SELECT_ALL、SINGLE、SPECIAL1からSPECIAL45まで(またはSPECIALn_CHECKBOXエントリ)、SPECIAL、SPECIAL_B、SPECIAL_C、SUMMARY/DETAIL、TRANSLATION、または任意のメニュー項目のフルネームからのいずれかです。SPECIALをPROPERTY_OFFに設定すると、すべてのスペシャル・メニュー項目は無効になります。
state PROPERTY_ONまたはPROPERTY_OFFのいずれか

 APP_SPECIAL.ENABLE('SPECIAL3',PROPERTY_ON);

APP_SPECIAL.SET_CHECKBOX

要約

function APP_SPECIAL.GET_CHECKBOX

         (option_name varchar2)

                          RETURN       varchar2;

説明

このプロシージャを使用すると、特定のスペシャル・メニューにあるチェック・ボックスの現在値を取得できます。このプロシージャは、最初のスペシャル・メニューにあるチェック・ボックス・エントリによって実行されるトリガー内でコールします。このファンクションは、チェック・ボックスが選択されているときは文字列「TRUE」、チェック・ボックスの選択が解除されているときは文字列「FALSE」というように、チェック・ボックス・メニュー項目の状態を戻します。メニュー・エントリが存在しない場合、このコールはエラーになります。

引数(入力)

変数 説明
option_name SPECIAL1_CHECKBOXからSPECIAL45_CHECKBOXまでを渡して、値の取得対象になるスペシャル・メニュー・エントリを示します。

 if (app_special.get_checkbox('SPECIAL3_CHECKBOX')='TRUE') then

            fnd_message.debug('Special 3 is True!');

    else

            fnd_message.debug('Special 3 is False!'); end if;

APP_SPECIAL.SET_CHECKBOX

要約

procedure APP_SPECIAL.SET_CHECKBOX(

                      option_name varchar2,

          new_value varchar2);

説明

このプロシージャを使用すると、特定のスペシャル・メニューあるチェック・ボックスの初期値を設定できます。スペシャル・メニューの該当するチェック・ボックス・メニュー・エントリをインスタンス化した後、このプロシージャをコールします。

引数(入力)

変数 説明
option_name SPECIAL1_CHECKBOXからSPECIAL15_CHECKBOXまでを渡して、値の設定対象となるスペシャル・メニュー・エントリを示します。
new_value 文字列「TRUE」を渡すとチェック・ボックスが選択され、「FALSE」を渡すとチェック・ボックスの選択が解除されます。

app_special.instantiate('SPECIAL3_CHECKBOX',

                         'Spe&cial 3 Box with Line',

                         '',TRUE,'LINE');

app_special.set_checkbox('SPECIAL3_CHECKBOX','TRUE');

app_special.instantiate('SPECIAL4_CHECKBOX',

                        'Special &4 Box');

app_special.set_checkbox('SPECIAL4_CHECKBOX','TRUE');