Oracle ADF Faces Calendarコンポーネントの使用

Oracle JDeveloperのHow Toドキュメント
オラクル、 DanaSingleterry
2009年7月

はじめに

Oracle JDeveloper 11g Release 1には、多数の新機能が含まれています。このHow Toドキュメントでは、新しいOracle Application Development Framework(Oracle ADF)Calendarコンポーネントを取り上げ、サンプル・アプリケーションを用いて、コンポーネントの使用方法について説明します。

Oracle ADF Faces Calendarコンポーネントは、作成されたアクティビティの日単位、週単位、月単位での表示や、アクティビティの所有者である任意のプロバイダに対してリスト・ビューの表示を行います。 

週表示のOracle ADF Faces Calendar

Calendarコンポーネントには、次の機能も含まれます。

  • 月表示、週表示、日表示、およびリスト・ビューの切替えを可能にするツールバー
  • 開始曜日および開始時間の設定が可能
  • スキニング・キーを使用してスタイルの設定が可能

さらに、他のOracle ADF Faces ComponentsやRich Clientフレームワークを使用して次の機能を実装できます。

  • ポップアップ機能
  • ドラッグ・アンド・ドロップ機能
  • ツールバーのカスタマイズ
  • スキニング

ソフトウェア要件

  • Oracle JDeveloper 11g Release 1(11.1.1.1.0)
  • 含まれているスキーマを ダウンロードし、アーカイブを解凍します。 fod/fusionの資格証明を用いてデータベースにユーザーを作成します。 次のコマンドラインにより、たとえばOracle XEデータベースにスキーマをロードします。 imp fodcal.dmp プロンプトが表示されたら、ユーザーfod/fusionを使用します。 または、fodcalendar.zip SQLスクリプトを ダウンロードしてアーカイブを解凍します。 ここでもユーザーfod/fusionの作成が求められた後、sqlplusを使用してfodcalendar SQLスクリプトをロードできます。
  • サンプル・アプリケーションを ダウンロードし、アーカイブを解凍します。
  • Oracle XEデータベースまたは同等のデータベース

データ・モデル要件

  • Oracle ADF Faces Calendarコンポーネントは、CalendarModelクラスにバインドされている必要があります。 このクラスは、Oracle ADF Business Componentsを使用してカレンダーのデータを管理する場合に作成できます。 たとえば、ユーザーのデータ・ストアに、日付、時間、タイトル、場所、所有者などのアクティビティの詳細を表すデータがあるとします。 そのデータを表すエンティティ・オブジェクトを作成してからビュー・オブジェクトを作成してデータを表示させた場合、関連するコレクションをData Controlsパネルからドラッグ・アンド・ドロップしてカレンダーを作成できます。 Oracle JDeveloperは、宣言的にモデルを作成し、そのモデルへビューをバインドして、カレンダーの起動時に正しいデータが表示されるようにします。 ただし、モデルを作成するためには、Business Componentsに特定の属性を含める必要があります。また、ビュー・オブジェクトに特定の変数を含める必要があります。この変数は、表示される日付範囲および現在のタイムゾーンを表す名前付きバインド変数を使用する問合せを修正するために使用されます。 これによって、問合せは、カレンダーの特定のビューに表示されるはずのアクティビティのみを返すことになります。 エンティティ・オブジェクトに必要な属性およびオプションの属性について、またビュー・オブジェクトに必要なバインド変数について詳しくは、『Oracle Fusion Middleware Developer's Guide for Oracle Application Development Framework 11g Release 1 (11.1.1.1.0)』を参照してください。

注:カレンダーは、Oracle ADF Business Components以外のデータソースを基にすることもできます。 詳しくは、『Oracle Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework 11g Release 1 (11.1.1.1.0)』を参照してください。

Oracle ADF Faces Calendarコンポーネントの使用: ユーザーのデータソースに基づくビジネス・コンポーネントの作成

アプリケーション・ワークプレースをまだ作成していない場合はここで作成し、適切な名前を付けます。 名前は、 Fusion WebApplication (ADF)とします。 モデルのデフォルト・パッケージには、 oracle.otn.adf.sample.modelなどの名前を付けます。同様に、ビューのデフォルト・パッケージには、 oracle.otn.adf.sample.viewなどの名前を付けます。アプリケーション・ワークプレースを作成したら、 fod_cal_eventスキーマに基づいて、エンティティ・オブジェクトおよびビュー・オブジェクトの作成に進みます。 これを作成するには、「 Model」プロジェクトを右クリックしてコンテキストから「 new」を選択し、 Business Tierノードの「 ADF Business Components」および「 Business Components from Tables」を選択します。

カレンダーのスキーマへの接続を作成します。

db connection

スキーマの問合せを実行し、FOD_CAL_EVENTスキーマをEntity ObjectのAvailable表からSelected表へ移動します。 カレンダーには必要な属性があることに注意してください。これらの属性は、『Oracle Fusion Middleware Developer's Guide for Oracle Application Development Framework 11g Release 1 (11.1.1.1.0)』に記載されています。また、データ・コントロールを作成してカレンダー・アプリケーションのビューへ公開するためには、アプリケーション・モジュールが必要なことに注意してください。

Create Business Components from Tablesページのサマリーは、次のようになります。

bc summary

Finish」を選択します。

ここで、作成したばかりのエンティティ・オブジェクトBusiness Componentの要件および修正を追加できます。たとえば、「 FODCALEVENTEO」エンティティ・オブジェクトを右クリックし、コンテキストから「 Open」を選択して、EIDを主キーにできます。 これには、デフォルトで作成された行IDの主キーの削除が必要となる場合があります。 FodCalEventEOの「 Attributes」ツリー・アイテムを選択し、「 Eid」を右クリックしてコンテキストから「 Edit」を選択します。 Primary Keyが選択されていることを確認します。

eid pk

次に、 Updateable View Objectを作成します。 Application Navigator内の「 FodCalEventEO」を右クリックし、コンテキストから「 New Default View Object」を選択します。

vo summary

 

関連するビュー・オブジェクトを作成すると、たとえば、挿入が実行された場合には主キーへのランダム値の割当て、必要なバインド変数の作成、イベントの追加に使用できる属性の追加など、さまざまな機能拡張が必要になります。 初めに、編集のビュー・オブジェクトを開き、ツリーから「 Attributes」を選択します。 Eidの主キーを右クリックし、コンテキストから「 Edit」を選択します。新規イベントの挿入時にEidの一意の値を作成する次の式を追加します。

EidProperty Inspectorで、 デフォルトのValue TypeExpressionに設定されていることを確認してください。

(Eid==null?UUID.randomUUID().toString():Eid)

Eid expression


これで、カレンダーへイベントを追加する際に使用されるいくつかの属性がビュー・オブジェクトに作成されます。 FodCalEventVOのツリー内の「 Attributes」ノードを選択し、次の属性を追加します。

名前 種類 情報
Recurring 文字列   Transient
TimeType 文字列   Transient
AllDay ブール値   Transient


このビュー・オブジェクトのSQL問合せで使用される次の名前付きバインド変数を追加します。

名前 種類 デフォルト 情報
Tz 文字列    
StartDayTime Timestamp    
EndDayTime Timestamp    


TimeZone」(Tz)変数を右クリックし、コンテキストから「 Edit」を選択します。 次の式を追加し、 Value TypeExpressionに設定されていることを確認します。 これで、使用中のカレンダーの現在のタイムゾーンが取得されます。

TimeZone.getDefault().getID()

tz bind variable


エンティティ・オブジェクトおよびビュー・オブジェクトはこの時点で完了していますが、アプリケーション・モジュールにはデータ・モデル・コンポーネントに追加されたビュー・オブジェクトが必要です。 「 FODADFCalAppModule」を開き、ツリーから「 Data Model」ノードを選択します。 「 FodCalEventVO」を選択し、 Available View Objectsから Data Modelへ移動し、 FodCalEventVOへ名前を変えます。 再度移動して挿入操作を行い、 FodCalEventVOInsertと名付けます。

data model


この時点で、必要な属性などの提供されたカレンダー・スキーマに基づくエンティティ・オブジェクトおよびビュー・オブジェクトが、必要なバインド変数とともに作成されました。これで、CalendarコンポーネントをJSFページに追加して設定ができるようになり、必要な場合はさらに機能を追加できます。 次のセクションでは、基本的なCRUD操作のポップアップ機能とともに、カレンダー、アクティビティおよびプロバイダのロジックを含むマネージドBeanに他のロジックを追加します。

カレンダーのビューの作成

ビジネス・コンポーネントが作成されると、必要はありませんが、このカレンダーの実装を再利用できるようにTask Flowがビューとともに作成されます。 さらに、基本のCRUD操作のためにポップアップ機能が追加されます。 「 ViewControllerproject」を右クリックし、コンテキストから「 new」を選択します。 「 Web Tier」ノードを選択し、ツリーから「 JSF」、アイテムから「 ADF Task Flow」を選択します。

calendar task flow

Component Paletteドロップダウンから「 ADF Task Flow」を選択し、 Componentsアコーディオンから「 View」をタスク・フローへドラッグ・アンド・ドロップして、 calendarと名付けます。 カレンダー・ビューをダブルクリックして、新しいJSFページの断片を作成します。

calendar page fragment


次に、カレンダーを作成して構成できます。 「 Data Controls」アコーディオンを展開し、上記(FodCalEventVO)で作成されたアクティビティのビュー・オブジェクトを表すコレクションをドラッグして、Calendarとしてドロップします。

calendar creation

スキーマ属性を使用するようにカレンダーを構成し、「 Finish」を選択します。 以降のカレンダーの構成は、 calendar.jsffページ断片の Bindingsセクションを通じて行います。

configure calendar

カレンダーが作成されたら、 calendar.jsffページ断片のエディタで「 Bindings」タブを選択し、 Modelが以下のようになっていることを確認してください。

page fragment bindings

以下の 実行可能ファイルおよび バインディングを、上記のように Page Data Binding Definitionに追加する必要があります。

実行可能ファイル: 以下のイテレータを追加します。

FodCalEventVOInsertIterator

バインディング:以下の アクション属性値および ボタンをすべて FODADFCalAppModuleDataControl.FodCalEventVOInsertから追加します。

CreateInsert (アクション)

Commit (アクション)

Rollback (アクション)

Eid1 (属性値)

CommunityId1  (属性値)

Summary1 (属性値)

StartTime1  (属性値)

EndTime1 (属性値)

Location1  (属性値)

IsAllDayEvent1 (属性値)

IsAllDayEvent (ボタン)

マネージドBeanを作成します。マネージドBeanには、カレンダー、アクティビティおよびプロバイダのロジックが含まれます。 クラス自体は、ダウンロード可能なアプリケーション・ワークプレースで提供されるため、ロジックに関する詳細すべてを読者が確認できます。 また、マネージドBeanが使用する2つのユーティリティ・クラス( ADFUtils.javaおよび JSFUtils.java)も提供されます。

managed bean


マネージドBeanが作成されたら、 calendar-task-flow.xmlを開き、ツリーの「 Managed Beans」ノードを選択します。 マネージドBeanを calendar-task-flow.xml Managed Beansセクションに追加します。

MB task flow

ポップアップ・コンポーネントの使用による機能の追加

カレンダーの基本機能は作成されましたが、次にポップアップ機能をCRUD操作向けに含めます。 これは、ポップアップおよび関連するコンポーネントを、関連するファセットに作成することによって実行します。

Structureウィンドウで、「 calendar」コンポーネント・ノードを開いてカレンダー・ファセットを表示させます。

calendar facets

『Oracle Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework』の Table 15-1に基づいて、機能を提供したいユーザー・アクションに対応するファセットにポップアップ・コンポーネントを作成します。 たとえば、ユーザーがアクティビティをクリックして[Delete]キーを押すことによってアクティビティを削除できるようにした場合、activityDeleteファセットにポップアップ・ダイアログを追加します。

ポップアップ・コンポーネントを追加するには、Structureウィンドウでファセットを右クリックし、 Insert inside ファセット名コンポーネント名を選択します。 この場合は、新規イベントを作成するポップアップを作成するため、createファセットに挿入します。

create popup

カレンダー・イベントを編集および削除する2番目のポップアップも、サンプルのカレンダー・アプリケーションで使用されます。これは、 activityDetailファセットの内部で作成されます。 詳細は、読者が calendar.jsffページ断片のソースを参照することによって確認できます。 ポップアップ・コンポーネントの作成について詳しくは、 Chapter 13の"Using Popup Dialogs, Menus, and Windows"を参照してください。

calendarActivityListenerに必要なロジックをすべて実装します。 たとえば、 activityDetailファセットのロジックを実装する場合、現在のアクティビティを保存できるロジックを calendarActivityListenerに実装し、削除するアクティビティが分かるようにします。 以前と同様、詳細は CalendarBeanマネージドBeanのコード内に置かれ、読者による確認のために残されます。

この時点で作業を保存し、jsf xmlドキュメントを作成して、 index.jspxなどの適切な名前を付けます。 calendar-task-flowをindex.jspxページへドロップし、 Regionとして作成します。

region

カレンダー・アプリケーションの実行

アプリケーションを実行するには、「 index.jspx」ページを右クリックし、コンテキストから「 Run」を選択します。 これにより、アプリケーションがパッケージ化され、統合されたOracle WebLogicサーバーが起動し、アプリケーションがサーバーへ配置されて、作業をテストできるようになります。 カレンダーの任意の場所をクリックすると、イベントを作成するポップアップ・ダイアログが表示されます。また、Calendarコンポーネントのデフォルトで提供されるさまざまなビューを試してみてください。

Create Event


既存のイベントを選択して、更新または削除します。

Edit Event


新しいCalendarコンポーネントを使用したカレンダー・アプリケーションの作成について詳しくは、『Oracle Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework 11g Release 1 (11.1.1.1.0)』を参照してください。