事例:Oracle JDeveloper 11g と Oracle ADF 11g を …...Oracle JDeveloper 11g とOracle ADF 11g...

28
事例: Oracle JDeveloper 11g Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発 Oracle ホワイト・ペーパー 2008 10

Transcript of 事例:Oracle JDeveloper 11g と Oracle ADF 11g を …...Oracle JDeveloper 11g とOracle ADF 11g...

事例:Oracle JDeveloper 11g と

Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

Oracle ホワイト・ペーパー 2008 年 10 月

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用

した Oracle Forms アプリケーションの再開発

前書き .................................................................................................................. 3 はじめに .............................................................................................................. 3

前提条件......................................................................................................... 3 Oracle Forms アプリケーションの概要 ...................................................... 4

Summit アプリケーションの再開発 ................................................................. 4 アーキテクチャの決定................................................................................. 4

ユーザー・インタフェースの実装 ....................................................... 4 ビジネス・サービスの実装 ................................................................... 5

ビジネス・モデルの作成 ............................................................................. 5 データの視覚化 ....................................................................................... 5 エンティティ・オブジェクトの作成 ................................................... 6 ビュー・オブジェクトの作成 ............................................................... 7

ビジネス・モデルの改良 ........................................................................... 11 ProductID による在庫のルックアップ................................................ 11 calculated 属性の追加 ............................................................................ 12 ファイルからのイメージ表示 ............................................................. 13

検証ルールの追加....................................................................................... 14 注文日よりもあとの出荷日の保証 ..................................................... 14 製品 ID の変更 ....................................................................................... 15 信用度評価に基づく支払方法の確認 ................................................. 18 値リスト ................................................................................................. 20

ユーザー・インタフェースの作成 ........................................................... 21 ページ・レイアウト ............................................................................. 21 コンポーネント ..................................................................................... 23 ポップアップ・ダイアログ ................................................................. 24 グラフ ..................................................................................................... 24 ナビゲーション ..................................................................................... 25 条件付き表示 ......................................................................................... 25

完成したアプリケーションの確認................................................................. 26 結論............................................................................................................... 26

データベース・アクセス ..................................................................... 26 検証 ......................................................................................................... 26 ユーザー・インタフェース(UI) ..................................................... 26 Oracle JDeveloper 11g と Oracle ADF 11g での改善点........................ 26

まとめ........................................................................................................... 27

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

2

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

Oracle JDeveloper 11g と Oracle ADF 11g を使用した

Oracle Forms アプリケーションの再開発

前書き このホワイト・ペーパーは、2007 年 8 月に発行された『Redeveloping an Oracle Forms Application using JDeveloper and Oracle ADF』の改訂版であり、Oracle JDeveloper 11g、Oracle ADF 11g を使用した開発(とくに ADF Faces Rich Client(ADF Faces RC)を

使用した開発)について説明した部分が更新されています。

はじめに オラクルは、エンタープライズ・ビジネス・アプリケーションを開発するための

さまざまな種類のツールを提供しています。Oracle Forms は、Oracle プラット

フォーム上でアプリケーションを構築するための主要なツールとして、ほぼ 20 年

にわたり開発者に使用されてきました。しかし、Java Platform, Enterprise Edition(Java EE)の出現により、Oracle プラットフォームをベースにしてきた開発者、お

よびこれから使用する開発者の両方にとって、選択肢が 1 つ増えることになりま

した。

詳しくは、次のリンクから『Oracle Tools Statement of Direction』を参照してくだ

さい。

http://otn.oracle.com/products/forms

オラクルは Oracle Forms の開発を続けていくことをコミットし、また多くのユー

ザーは Oracle Forms アプリケーションでビジネスを展開していますが、一部の

ユーザーは Java プラットフォームの機能を利用する方法を模索しています。この

ホワイト・ペーパーは Oracle Forms または PL/SQL の知識をもつ開発者を対象と

しており、Oracle JDeveloper 11g と Oracle Application Development Framework(Oracle ADF)を使用して、Java プラットフォーム上でOracle Formsアプリケーショ

ンを再開発する方法について紹介します。このホワイト・ペーパーの目的はかな

らずしも再開発を促進することではなく、再開発の学習によって、Oracle ADF で

Oracle Forms アプリケーションを Java プラットフォームにマッピングする際に使

用される概念を理解することです。

前提条件 Oracle JDeveloper と Oracle ADF(専門

用語集を含む)の詳細については、

http:/./otn.oracle.com/formsdesignerj2eeを参照してください。

このホワイト・ペーパーは読者に Oracle Forms の知識があることを前提としてい

ますが、説明の対象は Oracle JDeveloper と Oracle ADF です。したがって、Oracle JDeveloper と Oracle ADF の扱いに慣れていることが前提となりますが、関連する

専門用語と概念について高度な理解を求められることはありません。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

3

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

Oracle Forms アプリケーションの概要 Oracle Forms の Summit アプリケーショ

ンは、

http://www.oracle.com/technology/products /forms/files/summit.zip からダウン

ロードできます。

アプリケーションの再開発の事例として、Oracle Forms の Summit アプリケーショ

ンのデモを使用します。このデモは、Oracle Forms アプリケーションの“典型”と言

えるもので、架空のスポーツ用品ショップで顧客の注文を参照したり、編集した

りできます。これには、データベース・データのナビゲーションと更新、ストア

ド・プロシージャの呼出し、サマリー・フィールドと計算フィールドの表示、お

よび画像とポップアップ・ダイアログの表示が含まれます。

図 1:Summit アプリケーション

Summit アプリケーションの再開発 書き換え済みの Oracle ADF アプリケー

ションのサンプルは、

http://otn.oracle.com/formsdesignerj2eeにあります。

このアプリケーションを再開発する目的は、Oracle Forms 機能の中核であるマッ

ピングの概念を示すことです。Oracle ADF を使用して、アプリケーションを Java EE プラットフォームにマッピングが可能です。したがって、再開発によって作成

されるアプリケーションの機能は、元のアプリケーションの機能にできる限り近

づける必要があります。

アーキテクチャの決定

Oracle JDeveloper と Oracle ADF を使用して Summit アプリケーションを再開発す

る場合は、次の 2 つの重要な選択をおこなう必要があります。

ユーザー・インタフェースの実装

Oracle Formsユーザー・インタフェースは、Swingと同等のテクノロジーで実装さ

れます。ただし、Java Server Faces(JSF)、とくにOracle JDeveloper 11gのADF Faces Rich Client(RC)の完成度が高いため、この再開発ではADF Faces RCを使用しま

す。再開発の実行には、2 つの要素、Oracle Formsアプリケーションのルック・ア

ンド・フィールとADF Faces RCの”中核部分”を考慮しました。この再開発の方針

は、Oracle Formsアプリケーションのルック・アンド・フィールをできる限り維持

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

4

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

しながら、Oracle Formsアプリケーションの外観を大きく変えずに価値を追加した

ADF Faces RCの機能を活用するというものでした。

場合によっては、再開発で同じ機能を維持するために、より”セルフ・サービス化”が進んだインタフェースを使用することもありましたが、それはこのプロジェク

トの目標ではありませんでした。

ビジネス・サービスの実装

Oracle ADF では、アプリケーションのビジネス・サービス要素を作成するために

数多くのテクノロジーが選択できます。さまざまな要因によって選択は異なりま

すが、ソース・アプリケーションが Oracle Forms と PL/SQL に依存していること、

Oracle Forms の知識がある開発者によって再開発が実施されること、および Oracle Forms から Java EE への緊密なマッピングが Oracle ADF Business Components によって提供されることが前提になっています。

ビジネス・モデルの作成

Oracle Forms と同じように、Oracle JDeveloper と Oracle ADF Business Componentsでは、データベース表に基づいてビジネス・サービスを宣言的に開発するための

強力なウィザード、ダイアログ、およびプロパティが使用できます。また、Oracle Forms にはない、開発用の多くの機能が Oracle JDeveloper では提供されています。

データの視覚化

アプリケーションの多くの機能はデータベース表に基づいているため、最初の作

業は、Oracle JDeveloper を使用してスキーマのデータベース・ダイアグラムを作

成することです。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

5

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 2:Summit アプリケーションのスキーマ

このダイアグラムは、Oracle JDeveloper の空のデータベース・ダイアグラムにデー

タベース表をドラッグすることで作成できます。これは、図 2 に示すように、デー

タベース表とそのデータベース表間の関係を可視化します。データベース・ダイ

アグラムと元のフォームを調べると、データ操作の大半が S_Customer、S_Ord、および S_Items 表(緑色)であることがわかります。S_Image(赤色)や S_Inventory(黄色)と同様に、S_Emp と S_Product はルックアップ(青色)です。

エンティティ・オブジェクトの作成

次は、S_Customer、S_Ord、および S_Items 表に基づいて最初のデータ・モデルを

作成します。3 つの表のそれぞれに対して、利用できるすべての属性を選択して

エンティティ・オブジェクトを作成します。これによって、3 つのエンティティ・

オブジェクト SCustomer、SOrd、および SItems が作成されます。

読取り専用データを表示するだけであれ

ばエンティティ・オブジェクトは必要あ

りませんが、”初期”エンティティとして

各テーブルに対応するエンティティを作

成しておくのも合理的な方法です。

ルックアップの S_Emp、S_Product、および S_Image に使用される表のエンティ

ティ・オブジェクトを作成することも必要です。

S_Inventory が読取り専用になることはこの段階でわかっているので、この表に対

応するエンティティを作成する必要はありません。図 3 に、エンティティ・オブ

ジェクトとそれらの関係を示します。

この段階で、属性の表示を制御するための情報をいくつか追加できます。Oracle Forms でプロンプト、ヒント、およびフォーマット・マスクを定義するときと同

じように、Oracle ADF Business Components では、エンティティ・オブジェクトの

コントロール・ヒントでこれらの情報を定義できます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

6

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 3:Summit 表のエンティティ・オブジェクト

エンティティ・オブジェクト、ビュー・オブジェクト、およびアプリケーション・

モジュールを作成する場合は、Oracle JDeveloper で、アーチファクトの集合を異

なるパッケージに分割するベスト・プラクティスがサポートされていることに注

意してください。図 3 では、エンティティ・オブジェクトがパッケージ・モデル

(model)の中、ビュー・オブジェクトがビュー(views)の中、およびアプリケー

ション・モジュールがサービスの中にあることがわかります。

ビュー・オブジェクトの作成

基本となるデータベース表の行は、エンティティ・オブジェクトによって物理的

に表現されますが、Summit アプリケーションではそのデータを表示する特別な

ビューが必要です。図 4 のように Oracle Forms オブジェクト・ナビゲータを使用

すると、S_ORD ブロック内の項目に関係している項目を、キャンバスの最上部の

フレームに表示できます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

7

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 4:Oracle Forms のブロックと項目

これらのフィールド(例:DATE_ORDERED、CUSTOMER_ID、DATE_SHIPPED)

の一部は、S_Ord 表の列に基づくデータベース・フィールドです。また、あるフィー

ルド(例:CUSTOMER_NAM や SALES_REP_NAME)には、ルックアップでほかの

表から取得した値が含まれます。

対応するビュー・オブジェクトの作成は、Oracle JDeveloper では簡単です。ビュー・

オブジェクト・エディタを使用して、ビューを構成する基本のエンティティ・オ

ブジェクトおよびこれらのエンティティの属性を指定できます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

8

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 5:ビュー・オブジェクトの属性

図 5 には、DataShipped や PaymentType などの SOrd エンティティ・オブジェクト

からの属性、および SCustomer と SEmp エンティティ・オブジェクトからの属性

Name と LastName が表示されています。Oracle ADF では、追加のコーディングを

一切おこなわずに、主キーと外部キーとの関係に基づいてこれらの値を自動的に

検索する機能が提供されます。

Post-Query ルックアップ

前述の例では、ビュー・オブジェクトで主キーを使用して、別の表から検索情報

をフェッチしています。これは Post-Query トリガーを使用して簡単に実行できる

Oracle Forms アプリケーションの一般的な機能で、非実表フィールド(例:

CUSTOMER_NAME または SALES_REP_NAME)への移入をおこないます。元の

Oracle Forms アプリケーションでは、開発者は検索情報を移入する Post-Query ト

リガーのコードを図 6 のように記述する必要がありました。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

9

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 6:Oracle Forms の Post-Query トリガー

一方、図 5 に示されているように、Oracle ADF Business Components ではこのコー

ドを記述する必要はありません。開発者がエンティティと属性を指定するだけで、

正しい SQL 文が自動的に作成されます。したがって、Post-Query トリガーを記述

した Oracle Forms でルックアップを実装する場合は、Oracle ADF の宣言機能を使

用できます。

図 7 に、どのようにこの機能がビュー・オブジェクトの SQL 文によって自動的に

実装されるかを示します。

図 7:ビュー・オブジェクトの SQL 文によるルックアップの実装

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

10

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

Order By 句

Oracle Forms アプリケーションでは S_ITEM ブロックに Order By プロ

パティがあり、ITEM_ID に設定されています。Oracle ADF Business Components では、ビュー・オブジェクトとまったく同じ機能が提供さ

れているので、SitemView の Order By 属性を設定するだけで Order BY句が設定されます。

ビジネス・モデルの改良

データの操作を管理する最初のデータ・モデルの作成が完了したあとは、ビジネ

ス・モデルを改良できます。

ProductID による在庫のルックアップ

Oracle Forms の Summit アプリケーションでは、S_ITEM ブロックと S_INVENTORYブロックとの間にマスタ詳細関係があります。このマスタ詳細関係によって、特

定製品の在庫データのリストが提供されます。

Oracle ADF Business Components では、ビュー・オブジェクトとビュー・リンクを

使用して同じ機能を実装できます。最初に、S_Inventory 表からの属性を選択する

InventoryView が、SQL 文に基づいて作成されます。その次のステップでは、

InventoryView を SitemView にリンクするビュー・リンクを作成します。

図 8:ビュー・リンクによる 2 つのビュー間の関係の作成

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

11

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 8 に、ProductID 属性を介して SitemView ビュー・オブジェクトを InventoryViewビュー・オブジェクトにリンクする際に、InventoryForProductIdVL がどのように

使用されるかを示します。これによって、自動的に Items と Inventory 間とのマス

タ詳細関係が確実に設定されます。

calculated 属性の追加

Summit 注文フォームでは、品目の合計金額(QUANTITY_SHIPPED に ITEM_PRICEを掛けた数値)が S_ITEM ブロックの ITEM_TOTAL 属性で計算されます。

Oracle ADF Business Components では、SItemView ビュー・オブジェクトに一時属

性を追加することで同じ機能を実現できます。属性の値を Groovy 式から取得する

機能が、Oracle JDeveloper によって提供されます。この例では、Price * QuantityShipped となります。

図 9:一時属性による Line Total の実装

つまり、SitemView ビュー・オブジェクトへの移入がおこなわれると、式から Line Total 属性が取得されます。ただし、式で使用されているフィールドのいずれかで

値が変化した場合は、Line Total 属性を再計算する必要があります。図 10 に、ど

の属性が Price と QuantityShipped の計算を再トリガーするかを Oracle JDeveloperで定義する方法を示します。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

12

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 10:Price と QuantityShipped に基づく Line Total 属性の再計算

ファイルからのイメージ表示

Summit アプリケーションでは、現在選択されている品目のイメージがファイル・

システムから読み込まれます。品目のファイル名は、S_Image 表の列で定義され

ます。

Oracle ADF Business Components を使用すると、図 11 のように SimageView ビュー・

オブジェクトからの属性を SItemView ビュー・オブジェクトに追加することで同

じ機能を実現できます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

13

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

Oracle Forms の Summit アプリケーショ

ンでは、ストアド・プロシージャを使用

してイメージ名が実際に読み込まれます。

ただし、ファイル名は Image 表の一部分

でもあるため、そこから直接読み取るこ

とが理解できます。

図 11:ファイル名の SItemView ビュー・オブジェクトへの追加

検証ルールの追加

アプリケーションの基本データ・モデルを作成したあとは、その次のステップで

データ検証について検討します。

注文日よりもあとの出荷日の保証

Summitアプリケーションでは、When-Validate-Recordトリガーを使用することで、

注文品の出荷日が注文日よりもあとになることが保証されています。図 12 のよう

に、Oracle ADF Business Componentsで提供される簡単な宣言メカニズムによって、

2 つのエンティティ属性を比較できます。したがって、SOrd 検証の一部分である

このルールで、出荷日が注文日よりもあとになることが確定されます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

14

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 12:注文日の検証

製品 ID の変更

Summit アプリケーションでは、注文品のリストが表示されている場合、ユーザー

はリストにある任意の注文品の PRODUCT_ID を変更できます。その際には、該当

する商品のデータ情報を更新する必要があります。したがって、PRODUCT_ID が

変わると、 DESCRIPTION 、品目の PRICE (新しい製品 ID に対応する

SUGGESTED_WLSLS_PRICE に設定される)、および合計金額も変化します。また、

PRODUCT_ID に入力された値が S_Products 表に存在しているかも確認されます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

15

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 13:製品 ID が有効であることの確認

Oracle Forms では、Product_Id での When-Validate-Item トリガーによって同じ機能

が実現され、図 13 のように S_Product 表から商品説明と卸売価格が選択されます。

レコードが返されなかった場合は、Product_ID が無効であることを示すエラーが

発生します。

Oracle ADF Business Components では、最小限のコーディングで同じ機能を実現で

きる単純なフックが提供されます。

リストの検証

Oracle Business Components では、属性を検証するリスト・バリデータ

を使用して、属性が静的リストまたは SQL が生成したリストに対して

有効であるかを検証することが可能です。図 14 のように、データベー

ス表からのデータのリストに対して ProductID が有効かどうかを検証

できます。また、Oracle JDeveloper のこの機能を使用すると、検証が

失敗した場合に表示されるエラー・メッセージも定義できます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

16

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図14:製品IDのリストに対する検証

set メソッドの拡張

ProductId を有効な値に変更すると、ProductId キーの正しい値を表示

するために Name 属性と Filename 属性が自動的に更新されます。これ

は、Oracle ADF Business Components のデフォルトの機能によって処理

されます。ただし、それに加えて、Price 属性が新しい ProductId の卸

売価格に更新される必要があります。そのために、ProductId の新しい

値を使用してルックアップを実行し、卸売価格を確認します。

SuggestedWlslPrice を SItemView ビュー・オブジェクトの属性として追

加すると、ルックアップが自動的に実行されます。Oracle ADF Business Components では、SuggestedWlslPrice が ProductId に合わせて自動的に

調整されます。ここで必要なのは、SuggestedWlslPrice を Price 属性に

割り当てることだけです。

また、Oracle ADF Business Components では、ビュー・オブジェクトの

各属性を操作するための get メソッドと set メソッドが作成されます。

したがって、ProductId が変更された場合、SuggestedWlslPrice で Price属性を更新するために、図 15 のように setProductId メソッド内の

setPrice が呼び出されます。 SetPrice(getSuggestedWhlslPrice ());

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

17

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図15:新しい製品IDに対応するための価格変更

信用度評価に基づく支払方法の確認

Summit アプリケーションでは、さらにビジネス検証ルールが PaymentType 属性に

適用されます。これは後払いの注文に適用されるルールで、顧客の信用度評価

は”GOOD”または”EXCELLENT”でなければなりません。

Oracle Forms でこの機能を実装するには、S_ORD ブロックの PAYMENT_TYPE 項

目で When-Radio-Changed トリガーを使用します。この検証は、図 16 のように顧

客の信用度評価を選択する select 文によって機能します。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

18

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 16:Payment Type 属性の検証の実装

Oracle ADF の Summit アプリケーションでは、SOrd エンティティ・オブジェクト

の PaymentType 属性に、Groovy 式バリデータが追加されます。属性を検証するた

めの Groovy 式は、When-Radio-Changed トリガー内のコードに非常に似ています。

if (newValue == "CREDIT") {

if (SCustomer.CreditRating != "GOOD"

&& SCustomer.CreditRating != "EXCELLENT") {

return false};

}

return true

そのため、PaymentType の新規値が”CREDIT”で、(SCustomer エンティティ・オ

ブジェクトからの)顧客の信用度評価が”GOOD”または”EXCELLENT”ではなかっ

た場合、検証は失敗してエラーが発生します。それ以外の場合は、検証が成功し

ます。図 17 に検証ルールを示します。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

19

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 17:支払い方法の検証に使用される Groovy 式

値リスト

Oracle Forms の Summit アプリケーションでは値リスト(LOV)が使用されている

ため、ユーザーは製品 ID フィールドで有効な値のリストをポップアップできます。

Oracle JDeveloper では、同じ機能を宣言的に利用できます。モデル・ドリブン LOVを使用すると、属性の値をリストから移入するように指定することが可能になり

ます。属性をページに表示する場合は、データを簡単に選択できるように、関連

する LOV、コンボ・ボックス、または同様の UI 項目が作成されます。

図 18 に示した ProductId の例では、リストからのデータ・ソースは SProductViewのインスタンスになっており、またリストから返される属性は Id となっています。

UI Hints タブでは、LOV に表示される属性と、UI リスト項目が定義されます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

20

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 18:製品 ID 用の LOV の作成

ユーザー・インタフェースの作成

ビジネス・モデルの作成とテストが完了したあとは、次のステップで UI を作成し

ます。

ページ・レイアウト

基本的に、Oracle Forms アプリケーションでは UI コンポーネントに対して絶対位

置指定が使用されます。これによって、コンポーネントは指定した位置に正確に

表示されるので、確実にコンポーネントの最初のレイアウトが簡単になります。

この方式の弱点は、項目を物理的に整列させる必要があることと、ウィンドウを

リサイズしたときに新しい画面領域に合わせるための再配置が自動的におこなわ

れないことです。

一方、ADF Faces RC では、ページ・コンテンツの位置決めと整列に役立つ、幅広

い強力なレイアウト・コンポーネントが提供されます。

パネル

パネルは基礎的なレイアウト・コンポーネントで、さまざまな特色を持ったパネ

ルがあります。図 19 に、panelHeader(青色の線で囲まれた部分)を示します。

パネルは、コンテンツの中心領域を提供するだけでなく、特定のコンテンツのヘッ

ダーでも数多くのファセットを提供します。これらのファセットには、メニュー・

バー、ロゴ、およびツールバーのための領域(赤色の線で囲まれた部分)が含ま

れます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

21

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 19:パネルのレイアウト・コンポーネント

緑色の線で囲まれた部分は panelBox で、タイトル領域、フレーム、およびツール

バー・ファセットが提供されます。また、panelBox では、左上隅にある”-”または”+”アイコンをクリックすることで、そのパネルを閉じたり展開したりできます。こ

のパネル内で panelFormLayout と呼ばれる別のパネルをカプセル化すると、項目

とラベルのレイアウトは自動的に管理されます。

表コンポーネントは主要な ADF Faces RC コンポーネントの 1 つで、Oracle Formsの複数行ブロックと似た機能をもっています。ただし、ADF Faces RC の表には、

Oracle Forms で提供される機能よりも高度な機能が数多くあります。図 20 に示さ

れている例のように、ドラッグによって列を再配置すること、およびヘッダーを

クリックしてデータを再整列することができます。

図 20:データ・コントロール・パレットからのドラッグ

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

22

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

コンポーネント

ADF Faces RC では、テキスト・フィールド、ラベル、ラジオ・ボタン、およびチェッ

ク・ボックスなど、Oracle Forms のほとんどのコンポーネントを 1 対 1 でマッピ

ングできます。さらに、Oracle Forms では利用できないほかのコンポーネントも

提供されます。

データ・コントロール・パレットから属性をドラッグして、それらの属性を必須

コンポーネントとしてページにドロップするだけで、再開発対象の Summit ページ

の大部分が作成されます。

イメージ

Oracle Forms では、イメージを表示するためのイメージ項目が提供されます。ま

た、ADF Faces RC でもイメージ(image)タグが提供されます。イメージ・タグ

をページにドロップし、SitemView からの ImageFilename 属性をバインドすると、

コンポーネントによって識別されたイメージが自動的に表示されます(ファイル

名は表示されません)。これに関連した追加作業は、イメージを ViewControllerプロジェクトにコピーすることだけです。

ボタン

Orders.fmb には、コントロール・パネル上に 4 つのボタンがあります。各ボタン

は、When-Button-Pressed-Trigger によってアクティブ化されます。ADF Faces RCの panelHeader コンポーネントでは、commandToolbarButtons を配置できるツール

バー・ファセットが提供されます。これらのボタンを機能に関連づける方法の詳

細については、このあと説明します。

日付

Oracle Forms では、日付として定義したフィールドにデータが入力されると、そ

れが適正な日付であるかが自動的に検証されます。日付入力を容易にするために、

PLL(Date_LOV)が作成され、日付フィードでキーの組合せを押下時にカレンダー

が表示されるようになります。

同じ機能は Oracle ADF を通して利用できるので、特別なコードを記述する必要は

ありません。図 21 のように、日付型の属性をページにドロップすると、クライア

ント側で日付が自動的に検証され、不正な日付データであればエラーが表示され

ます。さらに、デフォルトでは、自動的にポップアップするカレンダー・アイコ

ンがフィールドに追加されるので、データを簡単に入力できます。Date_LOV PLLによって提供されていた機能は、この機能で置き換えられます。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

23

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 21:日付フィールドでの自動検証とカレンダーによる入力

ポップアップ・ダイアログ

Oracle Forms の Summit アプリケーションでは、Inventory データ・ブロックは個別

のウィンドウに表示されます。また、ADF Faces RC では宣言ダイアログ・フレー

ムワークがサポートされているので、ウィンドウをほかのウィンドウに重ねて表

示できます。

最初に、ポップアップ(popup)コンポーネントをページにドロップします。これ

によって、ポップアップの”シェル”が作成されます。このポップアップの内部に、

ダイアログ(dialog)コンポーネントをドロップします。このダイアログ・コンポー

ネントでは、ポップアップのコンテンツを管理するレイアウト・コンテナ、およ

び OK と Cancel ボタンが提供されます。

ダイアログの実際のコンテンツはあとで追加されますが、ここでの最終的な処置

はポップアップを適切なボタンに関連づけることです。そのため、

ShowPopupBehavior タグをボタンにドロップし、id プロパティをポップアップの

名前に設定します。図 22 に、実行時に生成されるダイアログを示します。

また、呼出しのたびにポップアップのコンテンツが確実にリフレッシュされるよ

うに、ポップアップ・プロパティ ContentDelivery を lazyUncached に設定する必要

があります。

グラフ

Oracle Forms における Summit アプリケーションの実装ではグラフは使用されてい

ませんが、書き換えられたアプリケーションにはグラフが導入されています。こ

れは、グラフの導入が非常に簡単なことに加え、Oracle ADF の宣言機能の別のファ

セットを示すためでもあります。Oracle Forms では、製品の在庫情報は複数行ブ

ロックとして表示されていました。再開発された Summit アプリケーションでは、

この情報は円グラフとして表示されます。データ・コントロール・パレットから

以前に作成したダイアログに InventoryView をドラッグし、グラフ表示を選択する

だけで、グラフが表示されます。

生成されたダイアログでは、表示する属性を定義できます。この例では、

WarehouseId と AmountInStock を対比したグラフになっています。図 22 に、実行時

に生成されるグラフとダイアログを示します。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

24

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

図 22:グラフを含むポップアップ・ダイアログ

ナビゲーション

デフォルトでは、Oracle ADF Business Components によって、ビュー・オブジェク

トの行に移動するメソッドが公開されています。これらのメソッドは、Web ペー

ジにドラッグするだけでそのページに関連づけることができ、ボタンまたはリン

クとして表示されます。再開発された Summit アプリケーションでは、Items 表に

対するナビゲーションが、menu タグが配置される panelCollection のファセットを

使用して提供されてきました。この menu タグには、多数の commandMenuItem 表

が含まれています。これらの表は、ページにドラッグするだけで SItemsView のナ

ビゲーション・アクションにバインドされます。

条件付き表示

Oracle Forms の Summit アプリケーションには、IMAGE_BUTTON と呼ばれるボタ

ンがあります。このボタンには When-Button-Pressed トリガーがあり、製品イメー

ジを表示または非表示にする Set_Item_Property の呼出しを含むコードが実行され

ます。

再開発された Summit アプリケーションでは、式言語(EL)と Java を使用して機

能が実現されています。

バッキング Bean は、IMAGE_MODE 属性を使用して作成されます。 この属性は、"off"または"on"のいずれかに設定されます。また、このクラスでは、

IMAGE_MODE 属性の値を設定および取得する get と set メソッドが公開されて います。このバッキング Bean は、adfc-config ファイルを介してページに登録され

ます。

この時点でページにボタンが追加され、ボタンの Action プロパティは以前に作成

した Bean のメソッドに設定されます。このメソッドによって、IMAGE_MODE 属

性の状態が切り換えられます。

最後のステップとして、IMAGE_MODE 属性の値を、イメージを含むパネルに関

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

25

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

連づけます。そのために、Disclosed 属性で次の式を設定します。

#{sessionScope.ordersManagedBean.IMAGE_MODE == "Off"}

完成したアプリケーションの確認

すでに説明したように、このホワイト・ペーパーの目的は Oracle Forms アプリケー

ションの再開発を促進することではなく、Oracle Forms アプリケーションを Oracle JDeveloper と Oracle ADF で作成されるアプリケーションに直接マッピングする際

の中核となる概念を説明することです。

結論

このアプリケーションの再開発からは、広義的に次のような結論が得られます。

データベース・アクセス

Oracle Forms アプリケーションの中核機能は、データベース表の読取りと書込み

です。開発者は、Oracle ADF が提供するほぼ 1 対 1 のマッピングを使用して、コー

ドに頼らずに、データベース表をマッピングおよび操作できます。多くの場合、

Oracle Forms でコーディングされた機能(検索など)は、Oracle ADF では宣言的

に使用できます。

検証

Oracle ADF では Oracle Forms と同じように宣言的な検証も提供しており、その機

能は、非常に豊富なオプションを使用するために大幅に拡張されています。また、

検証をコードにまで拡大する必要がある場合、Oracle ADF によって Oracle Formsの検証トリガーを簡単にマッピングできます。

ユーザー・インタフェース(UI)

Oracle Forms アプリケーションの再開発を妨げてきたもっとも大きな要因は、お

そらく、ブラウザ・ベースのインタフェースです。一方、ADF Faces RC ではこの

問題がすでに解消されているため、豊富なユーザー・エクスペリエンスが同じよ

うに提供され、また場合によっては、Oracle Forms よりも優れたユーザー・エク

スペリエンスが実現します。

Oracle JDeveloper 11g と Oracle ADF 11g での改善点

Oracle JDeveloper 10g に基づいて記述された以前のホワイト・ペーパーと比較した

場合、もっとも大きな進歩は ADF Faces RC を導入したことです。現在は、Swingによる高い生産性のおかげで、同等の機能をもつブラウザ・ベースのページを作

成できるようになりました。さらに、拡張された検証、属性の自動更新、モデル・

ベースの値リストなどを採用したことで、宣言方式で使用できる、より"Forms らしい"機能が追加されました。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

26

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

まとめ Oracle Forms 開発者が Java アプリケー

ションを作成する場合の詳細については、

http://otn.oracle.com/formsdesignerj2eeを参照してください。

このプロジェクトの冒頭で Summit アプリケーションが選択されましたが、その理

由は、書き換えることが簡単なアプリケーションとして作成されたからではなく、

典型的な Oracle Forms アプリケーションだからです。この再開発をとおして、ほ

とんどコードに頼らない宣言方式でマッピングが可能な Oracle Forms アプリケー

ションの中核となる概念を数多く説明しました。また、Post-Query ルックアップ

のような Oracle Forms の一般的なコーディングのプラクティスを、コードを使用

せずに Oracle ADF を介して実装できることも示しました。このように、Oracle ADFでは、開発者の生産性を高める抽象層が提供されます。そして、多くの場合、オ

ラクルの従来からあるツール・スイートを使用していたときよりも生産性が大幅

に向上します。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発

27

Oracle Corporation 発行「Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g」の翻訳版です。

事例:Oracle JDeveloper 11g と Oracle ADF 11g を使用した Oracle Forms アプリケーションの再開発 2008 年 10 月 著者:Grant Ronald 共著者:

Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A.

海外からのお問い合わせ窓口: 電話:+1.650.506.7000 ファクシミリ:+1.650.506.7200 www.oracle.com

Copyright © 2006, Oracle. All rights reserved. 本文書は情報提供のみを目的として提供されており、ここに記載される内容

は予告なく変更されることがあります。本文書は、その内容に誤りがないこ

とを保証するものではなく、また、口頭による明示的保証や法律による黙示

的保証を含め、商品性ないし特定目的適合性に関する黙示的保証および条件

などのいかなる保証および条件も提供するものではありません。オラクルは

本文書に関するいかなる法的責任も明確に否認し、本文書によって直接的ま

たは間接的に確立される契約義務はないものとします。本文書はオラクルの

書面による許可を前もって得ることなく、いかなる目的のためにも、電子ま

たは印刷を含むいかなる形式や手段によっても再作成または送信することは

できません。Oracle、JD Edwards、PeopleSoft、および Siebel は、米国 Oracle Corporation およびその子会社、関連会社の登録商標です。他の製品名は、そ

れぞれの所有者の商標です。