8 値リストの使用
この章の内容は次のとおりです。
統合Excelワークブックの値リストについて
エンド・ユーザーが値の範囲から選択できるようにしたり、エンド・ユーザーが統合Excelワークブックに入力できる値を成約したりするシナリオでは、統合Excelワークブックに値リストを実装することを検討してください。
ADFデスクトップ統合では、これらのユースケースに複数の方法で対応できます。たとえば、次を構成できます。
-
Excelワークシート・セルのドロップダウン値リスト
-
あるリストに表示される値(子の値リスト)が、別のリストで選択した値(親の値リスト)に依存する、依存値リスト
-
リストから値を選択するための高度な機能を提供する「検索および選択」リスト・ピッカー・ダイアログの表示を構成します。
エンド・ユーザーが選択できる値の完全セットが比較的小さい(例: 値の数が30未満)シナリオでは、統合Excelワークブックに値リストを構成することを検討してください。Fusion Webアプリケーションからページの「検索および選択」リスト・ピッカー・ダイアログを使用すると、値リストの値が30未満の場合、操作性が向上する可能性があります。
統合Excelワークブックへの値リストの追加のユースケースおよび例
ADFデスクトップ統合からADF値リスト・コンポーネントおよび他のサブコンポーネントを使用すると、エンド・ユーザーにデータを表示して選択できる様々なインタフェースを作成できます。図8-1に、この章の以降の項で詳しく後述する、Summitサンプル・アプリケーション・ワークブックいくつかの例を示します。
統合Excelワークブックに値リストを追加するための追加の機能
統合Excelワークブックに値リストを追加した後、ワークブックを構成するために追加機能が必要になることがあります。次の各項では、使用可能なその他の機能について説明します。
-
スタイル: 事前定義済のExcelのスタイルをいくつか使用して、フォーム・タイプ・コンポーネントの表示を構成できます。「スタイルの使用」を参照してください。
-
EL式: EL式をフォーム・タイプ・コンポーネントとともに使用できます。「ADFデスクトップ統合のEL式」を参照してください。
-
ツールチップ: 追加の情報や指示テキストをエンド・ユーザーに表示するようにツールチップを構成できます。「ADFデスクトップ統合コンポーネントでのツールチップの表示」を参照してください。
-
アクション・セット: 「統合Excelワークブックへの対話性の追加」で説明されているように、1つ以上のアクションの順序付けられたリストを構成して、対話性を統合Excelワークブックに追加できます。
Excelワークシートでの値リストの作成
ADF値リスト・コンポーネントは、実行時にドロップダウン値リストをExcelワークシート・セルに作成する場合に使用します。
ADF値リスト・コンポーネントは、たとえば多くても20または30項目の簡単な選択リストを対象にしていますが、最大で250の値を実行時に表示できます。ADF値リスト・コンポーネントは、Excelワークシートのセルに挿入できます。図8-2に、リージョンのリストで有効な値のいずれかを選択するのをユーザーが制約される、Summitサンプル・アプリケーションのEditWarehouseInventory-DT.xlsx
からの実装を示します。
ListID
プロパティの値を指定する必要があります。ListID
プロパティは、ワークブックDownSync
アクションを起動した後で実行時にドロップダウン・メニューに値リストを移入するリスト・バインディングを参照します。
図8-3に、ADF値リスト・コンポーネントのプロパティ・インスペクタが最前面に表示された状態を示します。ADF値リスト・コンポーネントは、実行時にExcelワークシートのドロップダウン・メニューに値を移入するリスト・バインディング(RegionId
)を参照します。
注意:
-
ADF表コンポーネントの列にドロップダウン・メニューを表示できます。「ADF表コンポーネント列での値リストの作成」を参照してください。
-
ADF値リスト・コンポーネントはテキスト・アイテムと組み合せて使用するものであり、日付値や数値の使用はサポートされていません。
-
ADF値リストでは、設計時に複数の表示属性が選択された構成をサポートしていません。
図8-3 ADF値リスト・コンポーネント
ADF値リスト・コンポーネントを挿入するには:
ADF表コンポーネント列での値リストの作成
ADF表コンポーネント列でドロップダウン値リストをレンダリングする場合は、ModelDrivenColumnComponentサブコンポーネントを使用します。
値リスト・コンポーネントは、たとえば多くても20または30項目の簡単な選択リストを対象にしていますが、最大で250の値を実行時に表示できます。他のADFデスクトップ統合コンポーネントとは異なり、ModelDrivenColumnComponentサブコンポーネントは、「コンポーネント・パレットの使用」で説明されているコンポーネント・パレットには表示されません。かわりに、ADF表コンポーネントの列のUpdateComponent
プロパティの値を指定するときに、サブコンポーネントとして選択します。ADF表コンポーネント列のプロパティの詳細は、「ADF表コンポーネントの列プロパティ」を参照してください。モデルドリブン・リストの作成の詳細は、「ADF表コンポーネントへのModelDrivenColumnComponentサブコンポーネントの追加」を参照してください。
ModelDrivenColumnComponentサブコンポーネントを指定したら、モデルドリブン・リストに関連付けられたツリー・バインディング属性を、ModelDrivenColumnComponenサブコンポーネントのValue
プロパティの値として指定する必要があります。ツリー・バインディング属性のモデルドリブン・リストは、実行時にADF表コンポーネントの列のドロップダウン・メニューに値リストを移入します。モデルドリブン・リストの作成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のモデルドリブン・リストの作成方法に関する項を参照してください。
ADF表コンポーネント列での値リストの作成方法
ADF表コンポーネント列に列を追加して、ModelDrivenColumnComponent
をサブコンポーネントとして選択します。それから、ツリー・バインディング属性をModelDrivenColumnComponent
サブコンポーネントのValue
プロパティの値に指定します。モデルドリブン・リストは、指定するツリー・バインディング属性に関連付ける必要があります。
注意:
-
ModelDrivenColumnComponentサブコンポーネントは、コントロール・タイプが
combo_lov
のモデルドリブン・リストをサポートしていません。 -
コントロール・タイプが
input_text_lov
のツリー属性は、ADF値リスト・コンポーネントとしてレンダリングしません。かわりに、「ADF表コンポーネントへのモデルドリブン・リスト・ピッカーの追加」に説明されている、モデルドリブン・リスト・ピッカー機能を公開します。 -
日付値を使用するADF値リスト・コンポーネントはサポートされていません。
-
ModelDrivenColumnComponentサブコンポーネントは、すべての場合において、EJBベースのデータ・コントロールのモデルドリブン・リストをサポートしないことがあります。
始める前に:
ADF表コンポーネントでの値リストの作成方法を理解しておくと役立ちます。「ADF表コンポーネント列での値リストの作成」を参照してください。
他のADFデスクトップ統合の機能を使用して追加できる機能についても理解しておくと役立ちます。「統合Excelワークブックに値リストを追加するための追加の機能」を参照してください。
ADF表コンポーネント列に値リストを作成するには:
実行時の処理: ADF表列による値リストのレンダリング
実行時には、ADF表コンポーネントはDownload
アクションを起動して、それぞれの列に値を移入します。また、このアクションは値リストをレンダリングするよう構成した列に値リストを移入します。図8-5に、Summitサンプル・アプリケーションのEditCustomers-DT.xlsx
ワークブックの例を示します(クレジット評価は、値リストを表示するように構成されます)。
ADF表コンポーネントへのモデルドリブン・リスト・ピッカーの追加
ADF表コンポーネントを構成し、Fusion Webアプリケーションの既存のモデルレイヤー・メタデータを使用して、統合Excelワークブックに「検索および選択」リスト・ピッカー・ダイアログを表示できます。
「検索および選択」リスト・ピッカー・ダイアログは、検索アイコンをまたはボタンをクリックして、ADF Facesページでaf:inputListOfValues
コンポーネントの「検索および選択」ポップアップを開いた場合に表示されるダイアログと似ています。図8-6に、EditCustomers-DT.xlsx
ワークブックからの例を示します(エンド・ユーザーは、新しい値を入力するセルをダブルクリックします)。表示されるポップアップから新しい値を検索して選択します。
ヒント:
値を選択するために、ユーザーに列のセルをダブルクリックするように指示する列ヘッダーのツールチップを追加することを検討してください。
図8-6 表の列のセルから起動されるモデルドリブン・リスト・ピッカー
ADF表コンポーネントにモデルドリブン・リスト・ピッカーを追加する手順:
-
JDeveloperでFusion Webアプリケーションを開きます。
-
af:inputListOfValues
コンポーネントを使用するのと同じ方法で、ビュー・オブジェクトを構成します。-
ビュー・アクセッサを追加します。
ビュー・アクセッサの作成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のエンティティ・オブジェクトまたはビュー・オブジェクトのビュー・アクセッサの作成方法に関する項を参照してください。
-
属性の値リスト(LOV)を作成します。
値リスト・コンポーネントの作成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の値リスト(LOV)の作成に関する項を参照してください
-
LOVのUIヒントを設定します。「デフォルトのリスト・タイプ」が
「値リストと共にテキストを入力します」
に設定されていることを確認します。UIヒントの設定の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のビュー・オブジェクトのLOV有効属性にユーザー・インタフェース・ヒントを設定する方法に関する項を参照してください。
-
ワークシートで使用されるページ定義のツリー・バインディングとして、ビュー・オブジェクトを公開します。
-
-
アプリケーションの
web.xml
ファイルがADFライブラリWebアプリケーション・サポートのフィルタ(<filter-name>ADFLibraryFilter</filter-name>
)を構成することを確認します。詳細は、「ADFデスクトップ統合のためのADFライブラリ・フィルタの構成」を参照してください。
-
統合Excelワークブックを開きます。
-
LOV対応の属性にバインドされる表の列の場合は、
ModelDrivenColumnComponent
コンポーネント・タイプを列構成に使用してください。表の列がこのように構成されていると、UpdateComponent
およびInsertComponent
のDoubleClickActionSet
プロパティは実行時に無視されます。図8-7に、
ModelDrivenColumnComponent
に設定されたUpdateComponent
プロパティのコンポーネントのタイプを示します。 -
まだ設定されていない場合は、
Workbook.Compatibility.TableComponents.ModelDrivenColumns.InputListOfValuesPickerEnabled
プロパティをTrue
に設定します。InputListOfValuesPickerEnabled
プロパティの詳細は、「ADFデスクトップ統合互換性のプロパティ」を参照してください。 -
(オプション)基底にあるイテレータ上の異なる属性をモデルドリブン・リスト・ピッカーのアクションで設定する必要がある場合、ADF表コンポーネントに
RowData.CachedAttributes
を構成します。たとえば、EditCustomers-DT.xlsx
ワークブックでは、「営業担当者」列でModelDrivenColumnComponentサブコンポーネントが公開されているだけでなく、SalesRepId
がRowData.CachedAttribute
の値としても定義されています。
Fusion Webアプリケーション、統合Excelワークブックおよび表の列を構成したら、ワークブックを実行し、LOV対応の属性を公開する表の列をダブルクリックして、モデルドリブン・リスト・ピッカー・ダイアログを開きます。
ADF表コンポーネントのモデルドリブン・リスト・ピッカーに関する必知事項
デフォルトでは、バインディング・パレットでツリー・バインディングをダブルクリックして、ADF表コンポーネントを作成すると、ModelDrivenColumnComponentサブコンポーネントを使用するように、表のすべての列が構成されます。コントロール・タイプがinput_text_lov
のモデルドリブン・リストにバインドされているツリー属性は、実行時に「検索および選択」リスト・ピッカー・ダイアログのレンダリングを自動的にサポートします。つまり、特別な構成は不要です。
ツリー属性がモデルドリブン・リストにバインドされていない、またはカスタム・ピッカーのユーザー・インタフェースが必要な場合は、「Fusion WebアプリケーションからのWebページの表示」を参照してください。
注意:
ADF表コンポーネントのModelDrivenColumnComponentサブコンポーネントが、LOV切替え機能を介して複数の値リスト(LOV)が定義されているビュー・オブジェクト属性を公開している場合、最初はエンド・ユーザーに空のモデルドリブン・リスト・ピッカー・ダイアログが表示されることがあります。空のモデルドリブン・リスト・ピッカー・ダイアログが表示された場合、ダイアログ内に目的のコンテンツをレンダリングするために、エンド・ユーザーはこのダイアログを取り消してから再起動する必要があります。『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の値リスト(LOV)の作成に関する項を参照してください。
モデルドリブン・リスト・ピッカー・ダイアログを表示するように構成されている属性に対して、ツリー・ノード(特に子ツリー・ノード)に行が存在していることを確認してください。
統合Excelワークブックでの依存値リストの作成
ADFデスクトップ統合ランタイムで提供されている値リスト・コンポーネントを使用し、サーバー・サイド・リストのバインディングを適宜構成することにより、統合Excelワークブックに依存値リストを作成できます。
ADFデスクトップ統合は、統合Excelワークブックでの値リストの作成に使用する次のコンポーネントを提供します。
-
ADF値リスト
Excelワークシートで値リストを作成するときに、このコンポーネントのプロパティを構成します。
-
ModelDrivenColumnComponentサブコンポーネント
ADF表コンポーネント列で値リストを作成するときに、このサブコンポーネントのプロパティを構成します。
これら2つのコンポーネントを使用して、統合Excelワークブックに依存値リストを作成できます。依存値リストとは、値リスト・コンポーネント(子の値リスト)で、値は別の値リスト・子(親の値リスト)によって決定されます。
サーバーサイド・リスト・バインディングを、親の値リストの選択された項目が変更になったときに、使用可能な子の値リストの項目が正しく更新されるように定義する必要があります。図8-8は、EditWarehouseInventory-DT.xlsx
ワークブックの2つの画面を使用した例で、ここでは「リージョン」フィールド(親の値リスト)の値が変わると、「国」フィールド(子の値リスト)が変更になります。
図8-8 値リストと依存値リスト
表8-1は、以前にリストしたコンポーネントを使用して作成できる依存値リストの実装と、それぞれの実装を完了するための要件を示します。
表8-1に説明する実装には、モデルドリブン・リストが必要なものがあります。モデルドリブン・リストの作成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のモデルドリブン・リストの作成方法に関する項を参照してください。
表8-1 依存値リストの構成オプション
構成 | 要件 |
---|---|
ADF値リスト・コンポーネントを使用して、Excelワークシートで親と子の値リストの両方をレンダリングします。 |
ADF値リスト・コンポーネントの両方のインスタンスがリスト・バインディングを参照する必要があります。参照するリスト・バインディングの1つまたは両方をモデルドリブン・リストにすることができます。 両方のリスト・バインディングがモデルドリブン・リストを参照できるのは、基底にあるイテレータに少なくとも1つのデータ行がある場合のみです。実行時に基底のイテレータにデータ行がなく、エンド・ユーザーが親リスト(ADF値リスト・コンポーネントの このシナリオを回避するには、次のオプションのいずれかを選択します。
「Excelワークシートでの依存値リストの作成方法」を参照してください。 |
ModelDrivenColumnComponentサブコンポーネントを使用して、ADF表コンポーネント列で親と子の両方の値リストをレンダリングします。 |
親と子の値リスト(ModelDrivenColumnComponentサブコンポーネント)は、どちらもモデルドリブン・リストに関連付けられたツリー・バインディング属性を参照する必要があります。 両方の列(親と子の値リスト)でInsertUsesUpdate列プロパティに同じ値が使用されている必要があります。 サーバー・サイド・リストのバインディングの従属性は、同じツリー・ノードにあるリストについてのみ判断されます。次のツリー・ノード・リストのバインディングはサポートされていません。
「ADF表コンポーネント列での依存値リストの作成方法」を参照してください。 |
依存値リストを作成する場合は、次の点に注意してください。
-
親の値リストでの選択が変更されると、ユーザーへの警告なしに子の値リストがリセットされます。
-
DependsOnList
(またはDependsOnListID
)プロパティで指定されたリストがExcelワークシートのコンポーネントで参照されていないかぎり、依存値リストは機能しません。 -
再帰的な依存関係が定義されている場合(リストAがリストBに依存し、リストBがリストAに依存)、最初の依存関係(リストAがリストBに依存)が期待される動作をトリガーします。ADFデスクトップ統合は、他の依存関係を誤った構成と見なします。
-
次のようにして依存関係の連鎖を作成できます。
-
リストAがリストBに依存
-
リストBがリストCに依存
このシナリオでは、リストCの変更(祖父母の値リスト)がリストA(孫の値リスト)とリストB(子の値リスト)の両方を更新します。同様のシナリオを作成する場合、親の値リストの選択内容が変わったときに、孫の値リストと子の値リストがどちらも確実にリフレッシュされるようにする必要があります。孫の値リストに2つのバインド変数を指定し、ビュー属性に暗示的な依存関係を設定することにより、これを行います。もうひとつの方法は、モデルドリブン・リストが構成されているそれぞれのビュー属性間に明示的な属性の依存関係を制限することです。たとえば、属性Aが属性Bと属性Cに依存し、属性Bが属性Cに依存するように指定します。
-
-
依存値リストのキャッシュの詳細は、「複数のWebセッション間で使用するための値リストのキャッシング」を参照してください。
-
ADFデスクトップ統合は、依存値リストに表示される値をキャッシュします。したがって、親リストの選択に対する依存リストの項目の値は、ADF表コンポーネントのすべての行で一貫している必要があります。
-
日付値を使用するADF値リスト・コンポーネントはサポートされていません。
Excelワークシートでの依存値リストの作成方法
ADF値リスト・コンポーネントの2つのインスタンスを使用して、Excelワークシートで依存値リストを作成します。
親のADF値リスト・コンポーネントによって参照されるリスト・バインディングを、子のADF値リスト・コンポーネントのListOfValues.DependsOnListID
プロパティの値に指定します。
ADF値リストの詳細は、「ADF値リスト・コンポーネントのプロパティ」を参照してください。
始める前に:
依存値リストについて理解しておくと役立ちます。「統合Excelワークブックでの依存値リストの作成」を参照してください。
他のADFデスクトップ統合の機能を使用して追加できる機能についても理解しておくと役立ちます。「統合Excelワークブックに値リストを追加するための追加の機能」を参照してください。
Excelワークシートで依存値リストを作成するには:
実行時の処理: Excelワークシートによる依存値リストのレンダリング
実行時にはADFデスクトップ統合は、ADF値リスト・コンポーネントの両方のインスタンスをレンダリングします。エンド・ユーザーが親の値リストから値を選択すると、選択された値によって子のリストの値リストが決まります。
図8-10は、依存値リストのCountryが、選択されたRegionリスト値からの状態のみを表示する様子を示しています。
ADF表コンポーネント列での依存値リストの作成方法
ModelDrivenColumnComponentサブコンポーネントのインスタンスを使用して、ADF表コンポーネント列の依存値リストで両方の値リストを実行時にレンダリングします。
ツリー・バインディング属性を親のModelDrivenColumnComponentサブコンポーネントのValue
プロパティの値に指定します。また、ツリー・バインディング属性を子のModelDrivenColumnComponentサブコンポーネントのValue
プロパティの値に指定します。両方のツリー・バインディング属性が、ツリー・バインディングをページ定義ファイルに追加する前に、モデルドリブン・リストに関連付けられていることを確認してください。また、親と子のモデルドリブン・リスト間の依存性がサーバーで構成されていることも確認します。
Summitサンプル・アプリケーションのEditCustomers-DT.xlsx
ワークブックの「リージョン」および「国」列は、ADF表コンポーネントの依存値リストの実装を示しています。
次の各リンクでは、次の内容について説明します。
-
モデルドリブン・リストの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のモデルドリブン・リストの作成方法に関する項を参照してください。
-
依存モデルドリブン・リストの定義については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のLOVが有効なビュー・オブジェクトの属性に対してカスケード・リストを定義する方法に関する項を参照してください。
-
ページ定義ファイルへのツリー・バインディングの追加は、「統合Excelワークブックのページ定義ファイルの使用」を参照してください。
-
ModelDrivenColumnComponent
サブコンポーネントの詳細は、「ModelDrivenColumnComponentサブコンポーネントのプロパティ」を参照してください。
始める前に:
依存値リストについて理解しておくと役立ちます。「統合Excelワークブックでの依存値リストの作成」を参照してください。
他のADFデスクトップ統合の機能を使用して追加できる機能についても理解しておくと役立ちます。「統合Excelワークブックに値リストを追加するための追加の機能」を参照してください。
ADF表コンポーネントに依存値リストを作成するには:
- 統合Excelワークブックを開きます。
- ADF表コンポーネントが存在しない場合、「ExcelワークシートへのADF表コンポーネントの挿入」の説明に従って挿入します。
- Columnsの入力フィールドの横にある参照(...)アイコンをクリックすることにより、ADF表コンポーネントのプロパティ・インスペクタで、「列の編集」ダイアログを起動します。
- 新しい列を追加(または既存の列を変更)して親の値リストとします。列のサブコンポーネント・タイプとしてModelDrivenColumnComponentを指定します。値リストの作成の詳細は、「ADF表コンポーネント列での値リストの作成」を参照してください。
- 新しい列を追加(または既存の列を変更)して子の値リストとします。列のサブコンポーネント・タイプとしてModelDrivenColumnComponentを指定し、親の値リストの列と同じ値をInsertUsesUpdate列プロパティに指定します。両方の列(親と子の値リスト)でInsertUsesUpdate列プロパティに同じ値が使用されている必要があります。値リストの作成の詳細は、「ADF表コンポーネント列での値リストの作成」を参照してください。
- 「OK」をクリックします。
実行時の処理: ADF表コンポーネント列による依存値リストのレンダリング
実行時に、ADF表コンポーネントは、ModelDrivenColumnComponentサブコンポーネントの両方のインスタンスを、これらのインスタンスを表示するよう構成した列にレンダリングします。エンド・ユーザーが親の値リストから値を選択すると、選択された値によって子のリストの値リストが決まります。
図8-11は、Summitサンプル・アプリケーションのEditCustomers-DT.xlsx
ワークブックの例を示しています。ここでは、「リージョン」列の値リスト(Europe)でエンド・ユーザーが選択する値が、「国」列の値リストに表示されるサブカテゴリの対応する値(France、Germanyなど)となります。
図8-11 ADF表コンポーネント列の実行時の依存値リスト
注意:
エンド・ユーザーが親リストの選択を変更すると、子のリスト項目が現在の行のみで変更されます。