Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1) E70030-02 |
|
![]() 前 |
![]() 次 |
この章の内容は次のとおりです。
Fusion Webアプリケーションでは、ビジネス・サービス・レイヤーがデータベースへの接続、データの取得、データベース・レコードのロックおよびトランザクションの管理を処理します。ビジネス・サービス・レイヤーの次の3つの単純な例について考えます。
新規データの対応する画面への、再問合せなしの表示
ユーザーは、カスタマ管理アプリケーションにログインし、顧客と既存の注文を表示します。次に新しい注文を作成する際に注文する製品の在庫を表示すると、データベースに再問合せする必要なく製品の在庫量が更新されます。
ビジネス・ドメイン・ロジックによる変更の自動反映
バック・オフィス・アプリケーションによって、発注状況が更新されます。ビジネス・ドメイン・レイヤーのOrders
エンティティ・オブジェクトにカプセル化されたビジネス・ロジックには、発注状況の属性に変更があった場合は常に最新更新日を更新する簡単なルールが含まれています。ユーザー・インタフェースは、ビジネス・ドメイン・レイヤーのロジックが変更された最新更新日を自動的に反映するよう更新されます。
ADFモデル・レイヤーのバインディングによりビジネス・サービス・メソッドが起動されると、データの再問合せと現在行の設定が実行されます。
ツリー表示で、エンド・ユーザーがツリー内のあるノードをクリックします。この操作により、アプリケーション・モジュール内のADFツリー・バインディングでビジネス・サービス・メソッドが宣言的に起動され、マスター/ディテール情報の再問合せが実行され、行セットの適切な行に現在行を設定します。画面は新規マスター/ディテール・データと現在行の表示を反映するよう更新されます。
JDeveloperでの設計時に一般的な開発タスクを全体的に宣言的にするため、開発者はADFビジネス・コンポーネントを使用してビジネス・サービスを構築する時間を節約できます。特に、JDeveloperではADFビジネス・コンポーネントによる宣言的開発をサポートし、次のタスクを行います。
自動的にデータベースと統合するコンポーネント内のビジネス・ロジックの、記述およびテスト
複数のアプリケーションタスクをサポートする、データの複数のSQLベースのビューを介したビジネス・ロジックの再使用
ブラウザ、デスクトップ、モバイル、Webサービス・クライアントからの、ビューへのアクセスおよび更新
配布したアプリケーションの修正を必要としないレイヤー単位のアプリケーション機能のカスタマイズ
ADFビジネス・コンポーネントは、次のビジネス・コンポーネントと連携してビジネス・サービス・レイヤーをサポートします。
エンティティ・オブジェクト
エンティティ・オブジェクトは、データベース表内の1行を表し、すべてのデータ操作言語(DML)操作を処理することでデータ変更を簡略化します。また、該当する行のビジネス・ロジックをカプセル化し、ビジネス・ルールが一貫して適用されることを保証します。エンティティ・オブジェクトを他のエンティティ・オブジェクトと関連付け、基盤となるデータベース・スキーマの関係を反映することで、複数のアプリケーションで再使用できるビジネス・ドメイン・オブジェクトのレイヤーを作成します。
ビュー・オブジェクト
ビュー・オブジェクトは、SQL問合せを表します。使い慣れたSQL言語を十分に活用し、エンド・ユーザーのタスクが必要とする形に、データを正確に結合、フィルタ、ソートおよび集約します。これには、ビュー・オブジェクトを他のビュー・オブジェクトにリンクし、複雑度にかかわらずマスター/ディテール階層を作成する機能も含まれます。エンド・ユーザーがユーザー・インタフェースを使用してデータを変更すると、ビュー・オブジェクトはエンティティ・オブジェクトと連携し、変更内容が一貫して検証され、保存されます。
アプリケーション・モジュール
アプリケーション・モジュールは、UIクライアントがアプリケーション・データの操作に使用するトランザクション・コンポーネントです。これによって、エンド・ユーザー・タスクに関連した作業論理ユニットに関連する、更新可能なデータ・モデルやトップレベルのプロシージャおよびファンクション(サービス・メソッド)を定義します。
図3-1 は、ADFビジネス・コンポーネントのすべてのコンポーネントとそれらの関係を示しています。
図3-1 ADFビジネス・コンポーネントの概要
ADFビジネス・コンポーネントは、次の例で示される機能をビジネス・サービス・レイヤーによって活用できる、Javaクラスの基盤を提供します。
必要なデータのみをクライアントに表示するデータ・モデルの設計
データ・モデルの一部としての複雑なマスター/ディテール階層の組込み
コード記述を必要としない、エンド・ユーザーのQuery-By-Exampleデータ・フィルタの実装
ビジネス・サービス・レイヤーとのデータ・モデル変更の自動調整
データベースに対する変更の自動検証および保存
必須フィールド、主キーの一意性、データの精度と規模および外部キー参照の宣言的な実行
マルチレベルでの検証サポートを含めた、プログラムまたは宣言による、簡単なビジネス・ルールと高度なビジネス・ルール両方の簡単な取得および実行
ビジネス・ドメイン・オブジェクト間の関係のナビゲートおよび複合コンポーネント関連の制約の実行
ビジネス・サービス・アプリケーション・ロジックによるユーザー・インタフェースにおける変更の自動反映
関連する表からの参照情報の取得と、エンド・ユーザーによる外部キー値の変更時の自動保持
Web階層の自動的な状態管理による、複数ステップのWebベース・ビジネス・トランザクションの簡略化
コードを必要としない、イメージ、ビデオ、音声およびドキュメントの処理
データの複数ビューにおける、保留中のデータ変更の同期化
複数アプリケーションにおける、プロンプト、ツールチップ、フォーマット・マスク、エラー・メッセージの一環した適用
メタデータ駆動型ユーザー・インタフェースまたはアプリケーション機能をサポートする、ビジネス・コンポーネントに対するカスタム・メタデータの定義
行単位の状態管理を簡略化する動的属性の、実行時の追加
コードを記述せずにビジネス統合できる高機能Webサービス・インタフェースのサポート
ベスト・プラクティスであるインタフェース・ベースのプログラミング・スタイルの適用
自動JAAS統合および監査メンテナンスによるアプリケーション・セキュリティの簡略化
「一度記述すれば、どこでも実行可能」: プレーンなJavaクラスまたはWebサービスと同様のビジネス・サービスの使用
ソース・コードの変更を必要としない、提供後のコンポーネント機能の拡張
アプリケーションの修正を必要としない、提供済コンポーネントの拡張版へのグローバルな代替
カスタマイズが失われない、または下方カスタマイズの手動での再適用を必要としない、アプリケーション・アップグレードの提供
ADFビジネス・コンポーネントを使用する前に、関連するOracle ADF機能を理解しておくと役立つ場合があります。次に、関連する他の機能へのリンクを示します。
ADFビジネス・コンポーネントによって実装されるJava EEデザイン・パターンの詳細は、「ADFビジネス・コンポーネントJava EEデザイン・パターン・カタログ」を参照してください。
ADFビジネス・コンポーネントのインタフェースとクラスのメソッド・コールの詳細は、「ADFビジネス・コンポーネントのよく使用されるメソッド」を参照してください。
Oracle ADFで実装される一般的なOracle Formsタスクの詳細は、「Oracle ADFでの一般的なOracle Formsのタスクの実行」を参照してください。
oracle.jbo
パッケージに関連するAPIのドキュメントについては、次のJavadocリファレンス・ドキュメントを参照してください。
Oracle ADFモデルJava APIリファレンス
JDeveloperは、ADFビジネス・コンポーネントに対する包括的な設計時サポートを提供します。これらの機能では、ビジネス・コンポーネントの作成、編集、ダイアグラム表示、テストおよびリファクタを一括して実行できます。
JDeveloperは、Oracle ADFにデータバインドされたWebアプリケーションの作成に役立つアプリケーション・テンプレートを提供しています。ADF Fusion Webアプリケーション・テンプレートを使用する場合、アプリケーションはデータ・モデル用の1つのプロジェクト(ADFビジネス・コンポーネント)とビューおよびコントローラ・コンポーネント用の別のプロジェクト(ADF FacesおよびADFタスク・フロー)から構成されます。
始める前に:
Fusion Webアプリケーションを理解しておくと役立つ場合があります。詳細は、「Oracle ADFを使用したFusion Webアプリケーションの構築の概要」を参照してください。
また、データ・モデル・プロジェクトでグローバルに指定できるADFビジネス・コンポーネント・プリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。
また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperによるアプリケーション開発のスタート・ガイド」を参照してください。
ADF Fusion Webアプリケーション・テンプレートを使用してデータ・モデル・プロジェクトを作成するには:
事前定義されたテクノロジ・テンプレートを使用せずに作成するアプリケーションは、「新規ギャラリ」からプロジェクト・フォルダに追加することで作成できます。ADFビジネス・コンポーネントのプロジェクトを追加する場合は、「新規ギャラリ」のリストから「ADFモデル・プロジェクト」を選択します。これにより、ADFビジネス・コンポーネントに依存するADF Webアプリケーションのデータ・モデルを定義するプロジェクトが作成されます。
始める前に:
Fusion Webアプリケーションを理解しておくと役立つ場合があります。詳細は、「Oracle ADFを使用したFusion Webアプリケーションの構築の概要」を参照してください。
また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperによるアプリケーション開発のスタート・ガイド」を参照してください。
データ・モデル・プロジェクトをアプリケーションに追加する手順:
初めてADFビジネス・コンポーネント・モデル・プロジェクトでビジネスコンポーネントを作成する場合は、図3-2 に示すように、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログが表示されます。このダイアログでは、このデータ・モデル・プロジェクトのビジネス・コンポーネントで作業する際に使用する、設計時のアプリケーション・リソース接続を選択したり、既存のIDEレベルの接続をコピーして新規のアプリケーション・リソース接続を作成します。ビジネス・コンポーネントを作成するためにJDeveloperが使用するデータベースをオンラインにするかオフラインにするかを指定できます。ダイアログではデフォルトでオンライン・データベースに指定されています。オフライン・データベースでの作業の詳細は、「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」を参照してください。
図3-2 「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログ
このダイアログは最初のビジネス・コンポーネントを作成する前に表示されるため、これを使用して、ビュー・オブジェクトがSQL文を策定するために使用するSQLプラットフォームをグローバルに制御します。選択できるSQLプラットフォームは次のとおりです。
Oracleデータベース接続用のOracle SQLプラットフォーム(デフォルト)
Oracle Liteデータベース用のOLite
Microsoft SQL Serverデータベース用のSQLServer
IBM DB2データベース用のDB2
その他のサポートされるSQL92準拠のデータベース用のSQL92
注意:
OracleデータベースとOracle以外のデータベースの両方に対してアプリケーションを実行する予定がある場合、後ではなくアプリケーションを構築し始める際に、SQL92 SQLプラットフォームを選択する必要があります。これにより、Oracle SQLプラットフォームを使用する場合に特有の、Oracle固有の最適化機能の一部は使用できなくなりますが、OracleデータベースとOracle以外のデータベースの両方に適用できるアプリケーションを構築できます。
このダイアログでは、データ・モデル・プロジェクトで使用するデータ型のセットも決定できます。JDeveloperはデータ型の選択を使用して、データ・モデル・プロジェクト内でエンティティ・オブジェクトおよびビュー・オブジェクトを作成する際に使用される属性のデータ型を定義します。したがって、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログで設定を保存する前に適切な選択を行うことが重要です。このダイアログには、次のオプションがあります。
JDeveloperによりOracleデータベース・ドライバを使用していることが検出されると、「Oracle用拡張Java」型マップがデフォルトで選択されます。「Oracle用拡張Java」型マップでは、一般的なデータ型として、標準Java型およびoracle.jbo.domain
パッケージに含まれる最適化されたデータ型を使用します。
ヒント:
新しいFusion Webアプリケーションでは、デフォルトの「Oracle用拡張Java」型を使用する必要があります。
「Java」型マップは、Oracle以外のデータベース上で実行され、SQL92準拠を使用して作成するアプリケーションをサポートするために提供されています。この場合、基本のJavaデータ型のみをグローバルに使用するように、データ型マップを「Java」に設定します。
「数値の表示に関する必知事項」で説明されているように、下位互換性を保つためや、ADF Facesをビュー・レイヤー・テクノロジとして使用していないADFアプリケーションのために、「Oracleドメイン」型マップが用意されています。JDeveloperリリース11.1.1.4.0以前で開発されたアプリケーションを移行する際、アプリケーションでは引き続き「Oracleドメイン」型マップが使用され、現在のデフォルト型マップの「Oracle用拡張Java」に変更されません。
「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログでプロジェクトの選択を保存すると、プロジェクトは初期化されたものとみなされます。初期化されたプロジェクトのデータ・タイプ・マップは変更できず、ビジネス・コンポーネントが作成された後にSQLプラットフォームを変更することはお薦めしません。
始める前に:
JDeveloperのリソースとしてのデータベース接続について理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「データベースへの接続と作業」を参照してください。
次のタスクを完了する必要があります。
「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
作成するビジネス・コンポーネントのデータ・ソースとして使用するデータベース用の接続の資格証明を取得します。
データ・モデル・プロジェクトを初期化するには:
ADFビジネス・コンポーネントはデータベース・オブジェクト・プロバイダとしてのオフライン・データベースの使用をサポートしています。データ・モデル・プロジェクトを初期化してデータベースを指定した後、オフライン・モードのデータベースでの作業に切り替えることができます。モデル・プロジェクトでビジネス・コンポーネントを作成するためのオフライン・データベースでの作業では、接続されていない状態で作業し、準備が整った時点でデータベースへの変更を取得します。また、ビジネス・オブジェクトを強制的に変更するスキーマの変更からプロジェクトを分離したままにします。
オフライン・データベースの作成時または既存のオフライン・データベースの選択時には、引き続きオンライン接続が必要で、これはテスト用に使用されます (Oracle ADFモデル・テスターを使用)およびデプロイメント用に使用されます。設計時は、オフライン・データベースが使用されます。ソース・データベースと同期化するためにオフライン・データベースを更新することもできます。データベース・オブジェクト比較機能によって、各相違を受容または拒否するために使用できるビジュアル・マッピングを取得できます。
始める前に:
JDeveloperのオフライン・データベースについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「データベースへの接続と作業」を参照してください。
次のタスクを完了する必要があります。
「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
「データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法」の説明に従い、ビジネス・コンポーネントのテスト時に使用するデータベース接続を作成します。
オフライン・データベース・オブジェクトで作業するためにデータ・モデル・プロジェクトを変更するには:
「アプリケーション」ウィンドウで、オフライン・データベースを作成するデータ・モデル・プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。
「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」を選択します。
「ADFビジネス・コンポーネント」ページで、「オフライン・データベース」を選択し、新規オフライン・データベースの作成アイコンをクリックします。
「オフライン・データベースの作成」ダイアログで、データ・モデル・プロジェクトが表示するデータベースとスキーマの名前を入力し、その他のオプションを選択してダイアログを完成させ、「OK」をクリックします。
データ・モデル・プロジェクトは新しい「オフライン・データベース・ソース」フォルダで更新され、オフライン・データベースの名前の付いた空のフォルダが含まれます。
「接続」リストで、データ・モデル・プロジェクトのビジネス・コンポーネントをテストするときに接続するオンライン・データベースを選択します。
選択するオンライン・データベースとオフライン・データベースは、データベース・オブジェクト名を確保しテストを有効化するため、同じスキーマを保持している必要があります。ビジネス・コンポーネントのテストの詳細は、「Oracle ADFモデル・テスターの使用方法」を参照してください。
「OK」をクリックします。
データ・モデル・プロジェクトでオフライン・データベース定義を作成するには:
ADFビジネス・コンポーネントを使用して構築されたアプリケーションは、OracleがADFアプリケーション対応として動作保証している任意のアプリケーション・サーバー(Oracle WebLogic ServerやGlassFishなど)にデプロイし、実行できます。ビジネス・コンポーネントは、プレーンなJavaクラスとXMLファイルを使用して実装されているため、Java仮装マシンが存在するすべての実行環境で使用可能です。つまり、ADFビジネス・コンポーネントを使用して構築されたサービスは、実行時にアプリケーションのコンテナと呼ばれるJava EEサーバーの内部と、サーバーの外部の両方で簡単に使用できます。ADFアプリケーションのデプロイとサポートされているアプリケーション・サーバーの詳細は、「Fusion Webアプリケーションのデプロイ」を参照してください。
顧客は、コマンド行のバッチ・プログラム、Webサービス、カスタム・サーブレット、JSPページなどの様々な構成でアプリケーション・モジュールを日常的に使用します。
「データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法」で説明されているように、Oracle以外のデータベースと連携するアプリケーションを構築することもできます。ただし、Oracleデータベースを対象とするアプリケーションでは、ADF Business Componentsに対して様々な最適化が構築されています。
ADFビジネス・コンポーネントは、文字列、日付、数値データを含めJava言語が提供する組込みのデータ型と互換性があります。これらのJavaデータ型に加え、ADFビジネス・コンポーネントのoracle.jbo.domain
およびoracle.ord.im
パッケージはOracleデータベースに最適化された型を提供しています。表3-2 はJava言語が提供する組込みの型以外に使用できるADFビジネス・コンポーネント固有の型を示しています。
表3-1 oracle.jbo.domainパッケージおよびoracle.ord.imパッケージでの基本データ型
データ型 | パッケージ | 説明 |
---|---|---|
|
|
データベース・トリガーにより割り当てられた、連続した整数 |
|
|
OracleデータベースのROWID |
|
|
バイナリ・ファイル(BFILE)オブジェクト |
|
|
バイナリ・ラージ・オブジェクト(Binary Large Object: BLOB) |
|
|
キャラクタ・ラージ・オブジェクト(CLOB) |
|
|
Oracle Intermediaイメージ(ORDIMAGE) |
|
|
Oracle Intermediaオーディオ(ORDAUDIO) |
|
|
Oracle Intermediaビデオ(ORDVIDEO) |
|
|
Oracle Intermediaドキュメント(ORDDOC) |
|
|
ユーザー定義オブジェクト型 |
|
|
ユーザー定義コレクション・タイプ(例: |
後方互換性のために、ADFビジネス・コンポーネントは引き続き、Javaの型が標準になる前に使用可能だったoracle.jbo.domain
およびoracle.ord.im
パッケージの一連のデータ型を選択するためのオプションを提供しています。表3-2 は、後方互換性が必要な場合に使用できる型を示しています。
表3-2 oracle.jbo.domainおよびoracle.ord.imパッケージの後方互換可能なデータ型
データ型 | パッケージ | 説明 |
---|---|---|
|
|
すべての数値データ。「Numberは抽象クラスです」に関係するコンパイラ・エラーまたは実行時エラーが発生した場合は、 import oracle.jbo.domain.Number; |
|
|
日付および(オプションの)時間 |
|
|
タイムスタンプ値 |
|
|
タイムスタンプ値およびタイム・ゾーン情報 |
|
|
JavaVMまたはADF Context(アプリケーションの <user-time-zone-config xmlns= "http://xmlns.oracle.com/adf/usertimezone/config"> <user-timezone expression= "EL exp" /> </user-time-zone-config> このEL式が評価されて現在のエンド・ユーザーのタイム・ゾーンが決定されるか、この値はJavaVMのタイム・ゾーンにデフォルト設定されます。 |
「Oracle用拡張Java」型マップと「Oracleドメイン」型マップとでは、数値データの処理が異なります。新しいアプリケーションを作成する際、デフォルト型マップの「Oracle用拡張Java」により数値データをjava.math.BigDecimal
クラスにマップし、java.math.Number
から継承します。java.math.BigDecimal
のデフォルト値は、Fusion Webアプリケーションのビュー・レイヤーの方法に一致し、ADF Facesコンポーネントで構成されますが、数値データ(WebページでADF Faces入力フィールドにより表示される数値など)の位置合せが維持されます。「Oracleドメイン」型マップでは数値データをoracle.jbo.domain.Number
クラスにマップしますが、ADF Facesコンポーネントで期待される位置合せでデータは表示されない場合があります。この位置合せ問題とは別にして、「Oracleドメイン」型マップは有効な選択肢であり、ADF Facesコンポーネントのないアプリケーションは問題なく機能します。
ビジネス・コンポーネントの作成を開始する前に、ADFビジネス・コンポーネントを構成するために使用できる多数のプロジェクト・プロパティについて理解を深めておくことをお薦めします。「プロジェクト・プロパティ」ダイアログで行った選択は、編集中のデータ・モデル・プロジェクトに適用されます。データ・モデル・プロジェクト用に生成したビジネス・コンポーネントやサブパッケージの名前の接尾辞命名規則をはじめ様々なプロパティを指定できます。
始める前に:
JDeveloperのプロジェクトの管理について理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperによるアプリケーション開発のスタート・ガイド」を参照してください。
また、データ・モデル・プロジェクトでグローバルに指定できるプリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。
次のタスクを完了する必要があります。
データ・モデル・プロジェクト・プロパティをカスタマイズするには:
ADFビジネス・コンポーネント用に構成される設計時および実行時の多数のオプションがJDeveloperプリファレンス・レベルで指定されます。ADFビジネス・コンポーネントのこれらのプリファレンスについて理解を深めておくことをお薦めします。「プリファレンス」ダイアログで行った選択は、作成する各データ・モデル・プロジェクトに適用されます。
「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」で説明されているとおり、グローバルに指定した特定のプリファレンスは個々のデータ・モデル・プロジェクトでオーバーライドできます。
始める前に:
また、個々のデータ・モデル・プロジェクトに指定できるプリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」を参照してください。
次のタスクを完了する必要があります。
ADFビジネス・コンポーネント・プリファレンスをカスタマイズするには:
JDeveloperにはデータ・モデル・プロジェクトのビジネス・コンポーネントを作成およびカスタマイズするための包括的な設計時サポートが含まれています。これらの機能によって、専用ウィザードを使用したコンポーネントの作成、概要エディタでのプロパティの変更およびソース・エディタでの定義ファイルの表示を実行できます。
「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリでは、JDeveloperはそれぞれのビジネス・コンポーネントを作成するためのウィザードを提供しています。各ウィザードでは、新規コンポーネントのコンポーネント名を指定し、どのパッケージにコンポーネントを配置するかを選択できます。パッケージがまだ存在しない場合、新規コンポーネントがそのパッケージの最初のコンポーネントになります。
各ウィザードには、コンポーネント・タイプを作成するために必要な情報を収集する、一連のページが表示されます。「終了」をクリックすると、XMLドキュメント・ファイルが保存され、新規コンポーネントが作成されます。さらに、Javaクラス・ファイルを生成するために「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「オプション」ページでデフォルトの「コード生成」オプションを変更すると、JDeveloperではXMLドキュメント・ファイルに加え初期カスタムJavaクラス・ファイルも作成できます。
表からのビジネス・コンポーネントの作成ウィザードは、様々なビジネス・コンポーネント・タイプの生成を単一のエンドツーエンドのプロセスに組み合せた唯一のウィザードであるため、JDeveloperで特に役立ちます。このウィザードを使用すると、多数のビジネス・コンポーネントを迅速かつ容易に作成できます。オンラインまたはオフラインのデータベースに基づいてエンティティ・オブジェクトを作成し、その後、エンティティ・ベースのビュー・オブジェクトまたは問合せベースのビュー・オブジェクトのいずれかとデータ・モデルのビュー・インスタンスを含むアプリケーション・モジュールを作成できます。最後に、ウィザードは連携しているビジネス・コンポーネント間の関係を表示するためのビジネス・コンポーネント・ダイアグラムを生成するオプションを提供します。
ウィザードを使用した後、作成するビジネス・コンポーネントを編集して、後で新規ビジネス・コンポーネントを追加できます。
始める前に:
様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。
次のタスクを完了する必要があります。
連携するビジネス・コンポーネントを1回で作成するには:
「アプリケーション」ウィンドウにパッケージが存在していれば、「アプリケーション」ウィンドウに表示したコンテキスト・メニューからコンポーネントを選択することで、任意のタイプの追加のビジネス・コンポーネントをすばやく作成できます。コンポーネントを追加するには、コンポーネントを配置するデータ・モデル・プロジェクト内のパッケージを右クリックし、「新規」メニューからコンポーネントを選択します。「新規」メニューに表示されるコンポーネントは、選択したプロジェクトのタイプによって異なります。
図3-3 に、データ・モデル・プロジェクトでパッケージを右クリックした後で、「アプリケーション」ウィンドウのコンテキスト・メニューに「新規」メニューがどのように表示されるかを示します。コンテキスト・メニューはADFビジネス・コンポーネント・データ・モデル・プロジェクトに表示されるため、使用可能なコンポーネントはADFビジネス・コンポーネントに限定されます。
図3-3 各種ビジネス・コンポーネント作成用のパッケージのポップアップ・メニュー・オプション
「アプリケーション」ウィンドウのポップアップ・メニューには、右クリックするとそのプロジェクトに適したオプションが表示されます。ポップアップ・メニューに「ADFビジネス・コンポーネント」オプションが表示されない場合は、右クリックしたプロジェクトがADFビジネス・コンポーネント・モデル・プロジェクトであることを確認してください。
始める前に:
様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。
次のタスクを完了する必要があります。
個々のビジネス・コンポーネントをデータ・モデル・プロジェクトに追加するには:
ADFビジネス・コンポーネントの各コンポーネントには、宣言的な設定によって制御される、組込みランタイム機能が付属しています。これらの設定は、コンポーネントと同じ名前のXMLドキュメント・ファイルに格納されています。
図3-4 は、「アプリケーション」ウィンドウにデータ・モデル・プロジェクトの各ビジネス・コンポーネントのXMLドキュメント・ファイルがどのように表示されるかを示しています。「アプリケーション」ウィンドウにXMLドキュメント・ファイルを表示するには、JDeveloperでビジネス・コンポーネントを作成したときに割り当てられた名前のノードを展開します。たとえば、ビュー・オブジェクト・ノードSDeptView
を展開して、関連付けられたXMLドキュメント・ファイルSDeptView.xml
を表示できます。コンポーネントの概要エディタを表示するには、XMLドキュメント・ファイルまたはそのコンポーネント・ノードをダブルクリックします。
図3-4 コンポーネントXMLファイルを表示している「アプリケーション」ウィンドウ
図3-5は、com.
yourcompany.yourapp
パッケージ内で作成した、アプリケーション・モジュールYourService
などのアプリケーション固有のコンポーネントに対するXMLドキュメント・ファイルを示しています。対応するXMLドキュメントは、データ・モデル・プロジェクトのソース・パスのルート・ディレクトリ内のサブディレクトリ./com/
yourcompany/yourapp
に保存されます。そのXMLファイルには、実行時にアプリケーション・モジュール実装を提供するJavaクラスの名前が記録されます。この場合、XMLにはOracle ADFが提供するoracle.jbo.server.ApplicationModuleImpl
ベース・クラスの名前が記録されます。
図3-5 アプリケーション・モジュールのXMLドキュメント・ファイル
カスタマイズを行わずに使用した場合、コンポーネントは、XMLドキュメントで完全に定義されており、コンポーネントのカスタムJavaコードやJavaクラス・ファイルをまったく必要とせず、十分な機能を備えています。ADFビジネス・コンポーネントのコンポーネントの組込み機能を拡張する必要がない場合、また、組込みイベントを処理するカスタム・コードを記述する必要がない場合、このXMLのみの方法でコンポーネントを使用できます。
「ビジネス・コンポーネントJavaサブクラスの生成方法」に説明されているとおり、コンポーネントの動作を拡張するなど、コンポーネントのカスタム・コードを記述する必要がある場合、該当するコンポーネントに対するオプションのカスタムJavaクラスを有効にできます。
ADFビジネス・コンポーネントはJavaで実装されているため、クラスおよびインタフェースはパッケージ化されています。Javaパッケージは、ピリオドで区切った名前で識別され、開発者は階層型のネーミング構造でコードを整理できます。
ADFビジネス・コンポーネントにより提供されたソース・コードを構成するクラスおよびインタフェースは、oracle.jbo
パッケージおよび多数のサブパッケージに含まれます。ただし、ADFビジネス・コンポーネントを使用した日常作業においては、主に次の2つの主要パッケージに含まれるクラスやインタフェースを使用します。
ビジネス・サービス・クライアントの連携のために設計されたすべてのインタフェースが含まれる、oracle.jbo
パッケージ
これらのインタフェースを実装するクラスが含まれるoracle.jbo.server
パッケージ
注意:
ここでのクライアントという用語は、ビジネス・サービスとしてアプリケーション・モジュール・コンポーネントにアクセスするモデル・レイヤー、ビュー・レイヤーまたはコントローラ・レイヤー内のコードを意味します。
図3-6 に、アプリケーション・モジュール・コンポーネントの具体的な例を示します。アプリケーション・モジュールのためのクライアント・インタフェースは、oracle.jbo
パッケージの中のApplicationModule
インタフェースです。このインタフェースは、クライアントがアプリケーション・モジュールとの連携に利用可能なメソッドの名前やシグネチャを定義しますが、その機能の実装の仕様は含まれていません。アプリケーション・モジュール・コンポーネントのベースとなる機能を実装するクラスは、oracle.jbo.server
パッケージに含まれているApplicationModuleImpl
というクラスです。
図3-6 ADFビジネス・コンポーネントによるインタフェースと実装の分離
ADFビジネス・コンポーネントはJavaで実装されているため、クラス、インタフェース、およびメタデータ・ファイルなどアプリケーションのコンポーネントもパッケージ化されます。
コンポーネントが他の組織の再使用可能なコンポーネントと競合しないように、パッケージ名の先頭に組織名またはWebドメイン名を付けます。たとえば、Apacheでは、Tomcat Webサーバーと関連付けるためにパッケージ名としてorg.apache.tomcat
を指定しており、Oracleでは、XML Parserのパッケージ名としてoracle.xml.parser
を指定しています。自社アプリケーション用に作成したコンポーネントは、com.
yourcompany
.
yourapp
などの名前でパッケージおよびそのサブパッケージに配置されます。
指定するパッケージ名では、すでにADFビジネス・コンポーネント・プロジェクト内に存在するか、特定のテクノロジの名前を含んでいるオブジェクトの名前(rest
など)を参照することはできません。ADFビジネス・コンポーネント・ウィザードでデフォルト・パッケージ名を変更して、予約語を使用しようとしても、アラート・ダイアログが表示され、実行できません。たとえば、rest
は予約語なので、JDeveloperでパッケージにadf.sample.adfbc.rest
のような名前を付けることは規則違反です。
具体的な例として、Oracle ADFのSummitサンプル・アプリケーションの主要なビジネス・サービスを構成するビジネス・コンポーネントは、oracle.summit.model
パッケージおよびサブパッケージに配置されています。図3-7 に示すように、これらのコンポーネントはSummitADF
ワークスペースのModel
プロジェクトにあり、次のように配置されています。
oracle.summit.model.diagram
にはビジネス・コンポーネント・ダイアグラムが含まれています。
oracle.summit.model.entities
には、エンティティ・オブジェクトが含まれています。
oracle.summit.model.services
には、SummitAppModule
アプリケーション・モジュールが含まれています。
oracle.summit.model.views
には、ビュー・オブジェクトが含まれています。
図3-7 コアSummit ADFサンプル・アプリケーションでのADFビジネス・コンポーネントの配置
自社アプリケーションでは、最適なパッケージ構成を選択できます。具体的には、同じタイプのコンポーネントを1つのパッケージにまとめる必要はありません。
パッケージに最適なコンポーネント数はありません。ただし、最適な構造は二極間(すべてのコンポーネントを1つのパッケージにまとめる構造と各コンポーネントを個々のパッケージに分ける構造)のどこかに収まります。
プロジェクトは、他のデータ・モデル・プロジェクトでの再使用のためにJDeveloperがサポートする最小レベルの単位であることを考慮に入れる必要があります。そのため、コンポーネントをどのように配置するかを考慮する場合もあります。詳細は、「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。
JDeveloperは、アプリケーションの発展につれ変更内容を統合するために役立つリファクタ・アクションを通じてコンポーネントのリファクタをサポートしています。JDeveloperを使用してデータ・モデル・プロジェクトのビジネス・コンポーネントをリファクタすると、コンポーネントの名前を変更したり、それらを別のパッケージに移動でき、さらにJDeveloperはリファクタされたコンポーネントへのすべての参照を検出し、更新します。可能な場合は常に、JDeveloperのリファクタ・アクションを使用してエラーを招き易いプロジェクトの手動での編集を回避できます。データ・モデル・プロジェクトのビジネス・コンポーネントのリファクタの用途と制限の詳細は、「Fusion Webアプリケーションのリファクタ」を参照してください。
ビジネス・コンポーネントが作成された後は、「アプリケーション」ウィンドウでコンポーネントをダブルクリックするか、コンポーネントを選択し、ポップアップ・メニューから「開く」オプションを選択することにより、対応する概要エディタを使用してそのプロパティを編集することができます。
概要エディタには、ウィザードに表示されるのと同じ編集オプションが表示されますが、表示項目の配置が異なる場合があります。概要エディタでは、コンポーネントのすべての特徴を変更できます。コンポーネントのエディタで変更を加えると、コンポーネントのXMLドキュメント・ファイルが更新され、関連するすべてのカスタムJavaファイルが必要に応じて更新されます。概要エディタは、モーダル・ダイアログではなくJDeveloperの編集ウィンドウであるため、必要な数のコンポーネントの概要エディタを開いて表示できます。
始める前に:
プロジェクトを管理するために使用できるツールについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperでの作業」を参照してください。
次のタスクを完了する必要があります。
データ・モデル・プロジェクトのビジネス・コンポーネントのプロパティを編集するには:
JDeveloperにはデータ・モデル・プロジェクトで作成するビジネス・コンポーネント数の急増を管理するための包括的な設計時サポートが含まれています。これらの機能では、ビジネス・コンポーネントのテスト、リファクタおよび視覚化を実行できます。
アプリケーション・モジュール・コンポーネントの作成後は、組込みのOracle ADFモデル・テスターを使用し、繰り返しテストできます。Oracle ADFモデル・テスターを起動するには、「アプリケーション」ウィンドウでアプリケーション・モジュールを選択するか、またはビジネス・コンポーネント・ダイアグラムでポップアップ・メニューから「実行」または「デバッグ」 を選択します。
図3-8 Oracle ADFモデル・テスター
図3-8 に示すとおり、Oracle ADFモデル・テスターではアプリケーション・モジュールのデータ・モデルにビュー・オブジェクト・インスタンスを提供し、動的に生成されるユーザー・インタフェースを使用してユーザーとインスタンスとの対話を可能にします。このツールでは、アプリケーション・モジュールのクライアント・インタフェース・メソッドのリストも提供され、アプリケーション・モジュールのノードをダブルクリックすると、対話的にテストできます。このツールは、Webページのビュー・レイヤー作成の前後において、ビジネス・サービスのテストやデバッグに必要不可欠なものです。
始める前に:
データ・モデル・プロジェクトの実行時動作について理解しておくと役立つ場合があります。詳細は、「ビュー・インスタンスの問合せのテスト」を参照してください。
また、ADFビジネス・コンポーネントを含めOracle ADFアプリケーションをテストするために使用できる機能について理解しておくと役立つことがあります。詳細は、「ADFコンポーネントのテストとデバッグ」を参照してください。
次のタスクを完了する必要があります。
アプリケーション・モジュール構成内のビュー・インスタンスをテストするには:
ADFビジネス・コンポーネントはビジネス上非常に重要なアプリケーションにおいて使用されることが多いため、サポート契約を締結しているお客様は、ADFビジネス・コンポーネントを含めてOracle ADFの完全なソースをOracle Worldwide Supportから入手できます。「ADF宣言デバッガの使用」に説明されているように、Oracle ADFの完全なソース・コードは、問題の診断を支援するための重要なツールです。「拡張クラスによるフレームワークの動作のカスタマイズ」に説明されているように、Oracle ADFの完全なソース・コードを使用すると、必要に応じてベース・フレームワーク機能を適切に拡張する方法を理解するためにも役立ちます。
オフライン・データベースのデータベース・オブジェクトの名前またはADFビジネス・コンポーネントの名前を変更する前に、選択したアイテムを参照するすべてのオブジェクトを表示できます。「ログ」ウィンドウの「使用方法の検索」ページを使用して、選択したアイテムのデータ・モデル・プロジェクトの使用方法をすべて表示できます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードでの作業」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
ADFビジネス・コンポーネントによって使用されているアイテムを検索するには:
依存性エクスプローラでは、展開できるダイアグラムを通じてデータ・モデル・プロジェクト内のアーティファクトの使用関係を視覚化できます。データ・モデル・プロジェクト内のビジネス・コンポーネントの数が増えると、ビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の関係を探索することが必要になる場合があります。ダイアグラムを展開するときに、選択したコンポーネントを参照するアーティファクトと選択したコンポーネントで参照されるアーティファクトを表示できます。このように、依存性エクスプローラは、「使用方法の検索」ログ・ウィンドウで返された使用情報よりも包括的な関係情報を表示します。
ダイアグラムでデータ・モデル・プロジェクトに対して表示されるアーティファクトには、様々なビジネス・コンポーネントXML定義ファイル(ビュー・オブジェクト、エンティティ・オブジェクト、アプリケーション・モジュールなど)、プロジェクト構成ファイル(bc4j.xml
やModel.jpx
など)、リソース・バンドル・ファイル(ModelBundle.properties
など)、Java実装ファイル(SummitViewObjectImpl.java
やSummitEntityImpl.java
など)、ADFビジネス・コンポーネント・フレームワーク・ソース・ファイル(Oracle ADFビジネス・コンポーネントの型クラスなど)が含まれます。
図3-9 に、ビュー・オブジェクト用のCountryVO.xml
ファイルにフォーカスを置いた依存性エクスプローラを示します。左側のノードにはCountryVO
を参照するアーティファクトが表示され、右側のノードはCountryVO
によって参照されているアーティファクトです。右クリック・メニューから「開く」を選択して、JDeveloperソース・エディタにこれらのアーティファクトのいずれかを開き、詳細な参照を表示できます。
図3-9 ADFビジネス・コンポーネント・アーティファクトを表示している依存性エクスプローラ
始める前に:
JDeveloperで提供される共通開発ツールに関する知識が役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperでの作業」を参照してください。
次のタスクを完了する必要があります。
ADFビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の依存性を検証する手順:
「アプリケーション」ウィンドウででコンポーネントを選択し、ポップアップ・メニューから「リファクタ」→「名前の変更」を選択すると、いつでもコンポーネントの名前を変更できます。「構造」ウィンドウには、アプリケーション・モジュール・データ・モデルのビュー・オブジェクト属性やビュー・インスタンスなど「アプリケーション」ウィンドウには表示されないコンポーネントの詳細のための「名前の変更」ポップアップ・メニュー・オプションも表示されます。また、「アプリケーション」ウィンドウ内で[Ctrl]キーを押しながらクリックして1つ以上のコンポーネントを選択し、次にポップアップ・メニューから「リファクタ」→「移動」を選択すると、選択したコンポーネントを新規パッケージに移動できます。現在のデータ・モデル・プロジェクト内の古いコンポーネント名やパッケージへの参照は、自動的に修正されます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードでの作業」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
データ・モデル・プロジェクトでビジネス・コンポーネントをリファクタするには:
データ・モデル・プロジェクトとともにオフライン・データベース・ソースを使用している場合、データベース、個々の表および個々の列の名前を変更できます。JDeveloperは、データ・モデル・プロジェクトのADFビジネス・コンポーネントおよびオフライン・データベース自体とともにこれらのデータベース・オブジェクトのリファクタをサポートしています。加えた変更は、データベース・オブジェクトを参照する定義を持つビジネス・コンポーネントに自動的に適用されます。たとえば、オフライン・データベースでデータベース表の名前を変更した場合、その表を参照するビュー・オブジェクト問合せは新しい名前を使用するように変更されます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードでの作業」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」の説明に従い、データ・モデル・プロジェクトでオフライン・データベースを作成します。
ADFビジネス・コンポーネントのオフライン・データベース表の名前をリファクタするには:
「アプリケーション」ウィンドウで、データ・モデル・プロジェクトを開き、編集したいデータベース・オブジェクトを選択します。
メイン・メニューから「リファクタ」→「名前の変更」を選択します。
また、データベース・オブジェクトを右クリックして「リファクタ」→「名前の変更」を選択することもできます。
「名前の変更」ダイアログで、新しい名前を入力して「 プレビュー」をクリックします。
「ログ」ウィンドウで、データベース・オブジェクト名を参照しているビジネス・コンポーネントを確認します。
「ログ」ウィンドウの「名前の変更」ページで名前付きアイテムがJDeveloper内のエディタにリンクされます。必要に応じて、リスト内のアイテムをクリックし、JDeveloper内でその詳細を表示します。
「リファクタ」をクリックし、「ログ」ウィンドウに表示された新しい名前を適用します。
ADFビジネス・コンポーネントのオフライン・データベース列の名前をリファクタするには:
プロジェクトが定義するビジネス・コンポーネントの数が増大すると、コンポーネントをリファクタして、最初に作成された関係を変更する場合があります。データ・モデル・プロジェクトにおける複数のコンポーネントの関係を把握するには、ビジネス・コンポーネントを概要エディタで開き、「ダイアグラム」タブをクリックします。エディタの関係ダイアグラムでは、編集するコンポーネントを太字で識別します。関連コンポーネントは、クリックするとリンクで識別されるコンポーネントを表示できるテキスト・リンクとして表示されます。
たとえば、図3-10 は、ProductVOビュー・オブジェクトのエディタの「ダイアグラム」
タブを示しています。ProductVO
がアクセスできるエンティティ・オブジェクト(たとえば、ProductEO
)、関連ビュー・オブジェクトに対するビュー・オブジェクトの関係を定義するビュー・リンク(たとえば、ProductVO
とItemVO
の間のリンクにマウス・ポインタを置くとItemProductIdFkLink
ビュー・リンクが表示される)およびビュー・リンクにより命名された関連ビュー・オブジェクト(この例では、ItemVO
)をダイアグラムにより識別します。これらの各関連コンポーネントは、クリックするとエディタの「ダイアグラム」タブでコンポーネントを開くことができるリンクとして表示されます。関連コンポーネントのリンクをクリックすると、ダイアグラムを使用して、プロジェクトで定義するコンポーネント関係にナビゲートできます。
図3-10 関係ダイアグラムにおけるメイン・オブジェクトとすべての関連コンポーネントの表示
始める前に:
JDeveloperにおけるUMLクラス・ダイアグラムによるアプリケーションのモデル化のサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「モデル化を使用したアプリケーションの開発」を参照してください。
次のタスクを完了する必要があります。
データ・モデル・プロジェクトのビジネス・コンポーネントの関係ダイアグラムを表示するには:
JDeveloperでは、ADFビジネス・コンポーネントに対する充実したUMLダイアグラム・サポートが提供されます。作成済の既存のコンポーネントは、ビジネス・コンポーネント・ダイアグラムに追加して視覚化できます。また、コンポーネントの作成および変更にダイアグラムを使用することもできます。ダイアグラムは、エディタでの変更と同期しています。
新しいビジネス・コンポーネント・ダイアグラムを作成するには、JDeveloperの「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリから、「ビジネス・コンポーネント・ダイアグラム」アイテムを使用します。このカテゴリは、Business Tierの選択肢の一部です。
コンポーネントのベース機能を拡張するため、またはイベントを処理するためにカスタム・コードを追加する必要がある場合、アプリケーション・モジュール、エンティティ・オブジェクト、ビュー・オブジェクトを含め作成するADFビジネス・コンポーネントのすべての主要タイプに対してカスタムJavaクラスを作成する必要があります。
たとえば、特定のビジネス・ロジックを実行する場合は、アプリケーション・モジュールのJavaクラスにカスタム・メソッドを追加できます。これには次のコードが考えられますが、これらのコードに限定されるものではありません。
表示するデータを正しく問い合せるためのビュー・オブジェクト・プロパティの構成
集計結果を取得するための、ビュー・オブジェクト行の反復処理
1つ以上のビュー・オブジェクトに対する、複数ステップのプロシージャによるロジックの実行
これらの実装の詳細をアプリケーション・モジュール内で一元管理することで、次の利点が得られます。
コードの目的が、クライアントにより明確に伝わります。
必要に応じて、複数のクライアント・ページから同じコードを簡単にコールできます。
ビジネス・サービス機能全体の回帰テストを簡略化できます。
クライアントに影響を与えることなく、実装を改善するオプションを使用可能にできます。
ページ内での論理的ビジネス機能の宣言的起動が可能になります。
エンティティ・オブジェクト、ビュー・オブジェクトおよびデータ・モデル・プロジェクトのアプリケーション・モジュールに会社レベルのサブクラスを指定できます。生成する新しいビジネス・コンポーネントがこれらのカスタム・クラスに基づくようにこのオプションを有効にするには、ADFビジネス・コンポーネント実装クラスを拡張するJavaソース・ファイルを作成する必要があり(oracle.jbo
パッケージ内)、このファイルが拡張された機能の最終的な追加先となる場合があります。これを実行すると、アプリケーション内のサブクラスによって選択可能なベース・フレームワーク・クラスへ後から柔軟に変更を加えることができます。その後、「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」→「ベース・クラス」を選択しサブクラスの名前を指定します。
さらに、個々のコンポーネントのビジネス・コンポーネント用に生成するカスタム・クラスの生成を有効にできます。各概要エディタのJavaページでこのオプションを有効にすると、JDeveloperにより、構成可能なネーミングの標準に準拠した名前のコンポーネントに関連するカスタム・クラスのJavaソース・ファイルが作成されます。このクラスの名前は、コンポーネントのXMLドキュメントに記録され、コンポーネントでのみ必要とされるカスタムJavaコードは、このクラス内に記述できます。コンポーネントのカスタムJavaクラスを有効にしたら、「アプリケーション」ウィンドウでコンポーネントを開きJavaクラスをダブルクリックしてクラスを編集します。
または、JDeveloperが各コンポーネント・タイプのJavaクラスを生成する方法を制御するプロジェクトレベルの設定を変更できます。変更するには、「ツール」→「プリファレンス」を選択し、「ADFビジネス・コンポーネント」ページを開きます。選択した設定は、今後作成するすべてのビジネス・コンポーネントに適用されます。
ベスト・プラクティス
ADFビジネス・コンポーネントを初めて使用する開発者には、ベース・フレームワーク・クラスをオーバーライドして、すべての生成されたカスタムJavaクラスがカスタマイズされた動作を選択できるようにすることをお薦めします。この方法は、個々のエンティティ・オブジェクトおよびビュー・オブジェクトのカスタム・クラスの作成より優先されます。カスタム・コンポーネントを生成するときは、「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「ベース・クラス」ページで、フレームワーク・クラスをオーバーライドするように指定します。
始める前に:
ビジネス・コンポーネントのプログラム的操作について理解しておくと役立つ場合があります。詳細は、次の各項を参照してください。
次のタスクを完了する必要があります。
カスタム・クラスでフレームワーク・ビジネス・コンポーネント・クラスをオーバーライドするには:
クライアントからコール可能にするカスタム・コードをADFビジネス・コンポーネントに追加する場合は、クライアントに表示されるコンポーネントすべてについて、その機能をクライアントに公開できます。JDeveloperでは、クライアント・インタフェース上で1つ以上のカスタム・メソッドをクライアントに公開している各コンポーネントに対して、関連するJavaインタフェース・ファイルが自動的に保持されます。そのため、SummitAppModule
などのアプリケーション・モジュールで作業していると仮定すると、次のようなカスタム・インタフェースを利用できます。
カスタム・アプリケーション・モジュール・インタフェース
SummitAppModule extends ApplicationModule
カスタム・ビュー・オブジェクト・インタフェース
OrderItemsInfo extends ViewObject
カスタム・ビュー行インタフェース
OrderItemsInfoRowClient extends Row
これにより、クライアント・コードでは、汎用クライアント・インタフェースをより詳細なインタフェースにキャストできます。詳細なインタフェースには、特定のコンポーネントに対して選択した、クライアントからアクセス可能な一連のメソッドが含まれます。
始める前に:
カスタム・コードでオーバーライドできるADFビジネス・コンポーネント・インタフェースのメソッドについて理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントのよく使用されるメソッド」を参照してください。
次のタスクを完了する必要があります。
コンポーネント実装クラスからクライアント・メソッドを公開するには:
生成するカスタムJavaクラスを1つ以上選択すると、指定したJavaファイルが作成されます。たとえば、oracle.summit.model.service.SummitAppModule
という名前のアプリケーション・モジュールの場合、そのカスタムJavaファイルのデフォルト名は、アプリケーション・モジュール・クラスに対してはSummitAppModuleImpl.java
、アプリケーション・モジュール定義クラスに対してはSummitAppModuleDefImpl.java
になります。どちらのファイルも、コンポーネントのXMLドキュメント・ファイルと同じ./oracle/summit/model/services
ディレクトリに作成されます。
注意:
このガイドの例では、生成済のカスタム・コンポーネント・クラスやインタフェースの名前には、デフォルトの設定を使用しています。自社アプリケーションでこれらのデフォルトを変更するには、JDeveloperの「プリファレンス」ダイアログの「ADFビジネス・コンポーネント: クラス・ネーミング」ページを使用してください。ここでの変更は、新しく作成したコンポーネントにのみ反映されます。
ビジネス・コンポーネントのJava生成オプションは、概要エディタの「Java」ページに後でアクセスしてもそのまま反映されています。XML定義ファイルの場合と同様、このエディタでどのような変更を行っても、カスタムJavaクラスで生成されたコードは最新の状態に保たれます。後でカスタムJavaファイルが必要なくなった場合は、「Java」ページで関連するオプションを無効にすると対応するカスタムJavaファイルを削除できます。
図3-11 は、YourService
アプリケーション・モジュールに対してカスタムJavaクラスを有効にするとどうなるかを示しています。YourServiceImpl
.java
ソース・コード・ファイルが、コンポーネントのXMLドキュメント・ファイルと同じソース・パス・ディレクトリに作成されます。YourServiceImpl
.xml
ファイルでは、ApplicationModuleImpl
クラスではなく、com.yourcompany.yourapp.YourServiceImpl
ベース・クラスを実行時に使用するよう、変更が反映されます。
図3-11 カスタムJavaクラスのあるコンポーネント
oracle.jbo
パッケージのJavaインタフェースによって、クライアントがアクセス可能なビジネス・サービスに対するAPIが提供されます。クライアント・コードが次のようにインタフェースと連携します。
ApplicationModule
: アプリケーション・モジュールを処理します。
ViewObject
: ビュー・オブジェクトを処理します。
Row
: ビュー行を処理します。
ビジネス・サービスの次のコンポーネントのみがクライアントに表示されます。
アプリケーション・モジュール: サービス自体を表します。
ビュー・オブジェクト: 問合せコンポーネントを表します。
ビュー行: 指定された問合せコンポーネントの結果の各行を表します。
このパッケージには、Entity
インタフェース、またはクライアントがエンティティ・オブジェクトを直接操作できるようにするメソッドは含まれていません。ビジネス・サービス実装におけるエンティティ・オブジェクトは、クライアントから直接参照されるように設計されていません。かわりに、クライアントは、アプリケーション・モジュールのデータ・モデルの一部として、ビュー・オブジェクトによる問合せデータを処理します。実際には、ビュー・オブジェクトはビジネス・サービス・レイヤー内のエンティティ・オブジェクトと自動的に連携し、エンド・ユーザーが変更したデータの検証と保存を調整します。この実行時の対話処理の詳細は、「実行時のビュー・オブジェクトとエンティティ・オブジェクトの連携処理」を参照してください。
アプリケーション・モジュール、ビュー・オブジェクトやエンティティ・オブジェクトで作業を行う際、汎用APIを使用するか、そのコンポーネントに強く型付けされたAPIを有効にするために、JDeveloperでコードをカスタムJavaクラスに生成できます。たとえば、ビュー・オブジェクトでの作業中、次のような汎用APIを使用し、結果のすべての行の属性値にアクセスできます。
Row row = ordersVO.getCurrentRow(); Date shippedDate = (Date)row.getAttribute("OrderShippedDate");
汎用APIを使用した場合、パラメータの文字列名をアクセッサに渡し、戻り値の型をこの例のDate
のように予想される型にキャストする必要があります。
一方、強く型付けされた作業スタイルを有効にした場合、次のようにコードを記述できます。
OrdersRow row = (OrdersRow)ordersVO.getCurrentRow(); Date shippedDate = row.getOrderShippedDate();
この場合、文字列名を渡して結果をキャストするのではなく、戻り型がコンパイル時に判明する生成済メソッド名を使用します。コンパイル時の安全性を犠牲にせずに、ビジネス・ロジック・コードからメソッドを起動する必要がある場合は、通常、強く型付けされたアクセッサを使用する必要があります。この方法は、setterメソッド内でカスタム検証ロジックを記述する場合にも役立ちますが、この場合は、ビジネス・コンポーネントでエンティティおよびビュー行実装クラスを生成するかわりに、Groovy式の使用を検討する必要が生じる場合もあります。後続の章では、Javaを使用した実装を選択するビジネス・ロジックのJavaクラスを生成して、強く型付けされた作業スタイルを有効化する方法について説明します。
Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。ADFビジネス・コンポーネントのGroovy言語式は、ビジネス・コンポーネントのカスタムJavaクラスで使用するJavaコードとは異なります。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。
デフォルトでは、Groovy式の型チェックは実行時に行われますが、Javaでは型チェックはコンパイル時に実行されます。また、Groovy式は動的にコンパイルされ、式を使用するビジネス・コンポーネント・オブジェクトの.groovy
ファイル内に保存されます。
ADFビジネス・コンポーネントは、エンティティ・オブジェクトの属性やビュー・オブジェクトの属性へのアクセスが有用な場所でGroovyスクリプト言語の使用をサポートしており、これには属性バリデータ(エンティティ・オブジェクトの場合)、属性のデフォルト値(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、一時属性値の計算(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、バインド変数のデフォルト値(ビュー・オブジェクトの問合せ文およびビュー基準フィルタの場合)、およびエラー・メッセージのプレースホルダ(エンティティ・オブジェクトの検証ルールの場合)などが含まれます。さらに、ADFビジネス・コンポーネントには、Groovy式で使用できる組込みキーワードの限定されたセットが用意されています。
特にADFビジネス・コンポーネント・フレームワークでは、次のタスクを実行するためのGroovy言語式の使用に関するサポートが提供されています。
スクリプト式バリデータまたは比較バリデータの定義(「ビジネス・ルールとトリガーでのGroovy式の使用」を参照)
検証エラーを処理するエラー・メッセージ・トークンの定義(「エラー・メッセージにGroovy式を埋め込む方法」を参照)
バリデータの条件付き実行の処理(「Groovyを使用して条件付きでエラー・メッセージを呼び出す方法」を参照)
ビュー・オブジェクト問合せ文のバインド変数のデフォルト値の設定(「バインド変数の使用」を参照)
ビュー基準文の基準アイテムを指定するバインド変数のデフォルト値の設定(「名前付きビュー基準の処理」を参照)。
エンティティ・オブジェクト属性のデフォルト値およびオプションの再計算条件の定義(「静的なデフォルト値を定義する方法」を参照)
エンティティ・オブジェクトまたはビュー・オブジェクトの一時属性の値の算出(「エンティティ・オブジェクトへの一時属性および計算属性の追加」および「ビュー・オブジェクトへの計算属性および一時属性の追加」を参照)
これらのタスクをJDeveloperで実行する場合、タスク固有の式エディタ・ダイアログを使用します。たとえば、一時ビュー・オブジェクト属性のデフォルト値を作成する場合、属性の「式エディタの編集」ダイアログを使用して、属性の実行時の値を決定する式を入力します。また、図3-12 に示すように、同じダイアログで値をいつ計算するかも指定できます(再計算条件と呼ばれます)。
図3-12 デフォルト属性値の式エディタのダイアログ
さらに、エンティティ・オブジェクトとビュー・オブジェクトを編集するために使用する概要エディタでは、「ビジネス・ルール」ページが表示され、単一のビジネス・コンポーネントで使用される式の表示と編集ができます。たとえば、ビュー・オブジェクト用に表示する「ビジネス・ルール」ページにより、ビュー・オブジェクトがそのビュー・アクセッサ、バインド変数および属性で使用する式を表示できます。図3-13 に示すように、表示をフィルタして、定義されたGroovy式でこれらの項目のみを表示できます。式はデザインタイム時に検証できませんが、すべての式エディタで、式の構文を保存する前にテストできます。Groovy式の型チェックは、「ADFビジネス・コンポーネント」→「一般」の「プリファレンス」ダイアログからオンにすることもできます。
ビジネス・コンポーネント・オブジェクト用に作成したすべてのGroovyスクリプトは、オブジェクトの.groovyファイルに保存されます。たとえば、DeptEOエンティティ・オブジェクトの属性の検証ルールで入力したGroovy式は、DeptEO.groovy
ファイルに保存されます。その後、属性のデフォルト値またはトリガーのGroovy式を入力した場合も、DeptEO.groovy
ファイルに保存されます。このファイルのソース・エディタを開いて、オブジェクトのすべてのGroovy式を表示または編集できます。ソース・エディタでは、デバッグ時のGroovy式のブレークポイントを設定することもできます。
図3-13 概要エディタの「ビジネス・ルール」ページにおいてビジネス・コンポーネントで使用されるすべての式の表示
始める前に:
Groovy言語について理解しておくと役立つ場合があります。詳細は、次のWebサイトを参照してください。
次のタスクを完了する必要があります。
ビジネス・コンポーネントのGroovy式を表示するには:
「アプリケーション」ウィンドウで、目的のエンティティ・オブジェクトまたはビュー・オブジェクトをダブルクリックします。
概要エディタで「ビジネス・ルール」ナビゲーション・タブをクリックし、「ルール・フィルタ」アイコンから「すべてのGroovy式の表示」を選択します。
フレームワークでGroovyスクリプトを使用できるオブジェクトにアクセス可能な、adf
という名前のトップレベルのオブジェクトが用意されています。Oracle ADFオブジェクトをGroovyスクリプト言語で参照する際、Oracle ADFランタイムではクラスの実際の具体的な型に対応しないラッパー・オブジェクトを戻します。これらのラッパー・オブジェクトでは、ラップされるオブジェクトのメソッドとフィールド型のすべてがサポートされています。あたかも実際のオブジェクトのように、式ではラッパー・オブジェクトを使用できます。ただし、ラッパー・オブジェクトを具体的な型にキャストしようとすると、ClassCastException
で失敗します。一般的に、Groovy言語で作業する際、明示的なキャストを使用する必要はなく、これらのラップされたADFビジネス・コンポーネント・オブジェクトの場合、これを行うと例外が発生します。
アクセス可能なOracle ADFオブジェクトの構成は次のとおりです。
adf.context
- ADFContext
オブジェクトを参照します。
adf.object
- 式が適用されているオブジェクトを参照します(接頭辞adf
を使用せずにキーワードobject
を使用して参照可能)。アクセス可能な他のメンバー名は、Groovyスクリプトが適用されたコンテキストに由来します。
エンティティ・オブジェクト属性: コンテキストはエンティティ実装クラスのインスタンスです。このオブジェクトを介して、カスタム・エンティティ実装クラスのカスタム・メソッドと、JavadocのEntityImpl
に指定されたベース実装クラスで定義されているすべてのメソッドを参照できるほか、エンティティ・インスタンスの属性を参照できます。
エンティティ・オブジェクト・スクリプト検証規則: コンテキストは、バリデータが適用されるエンティティにマージされるバリデータ・オブジェクト(JboValidatorContext
)です。このコンテキストで使用できるキーワードの詳細は、「同一のビジネス・コンポーネントのメンバーの参照」を参照してください。
ビュー・オブジェクト属性: コンテキストはビュー行実装クラスのインスタンスです。このオブジェクトを介して、カスタム・ビュー行実装クラスのカスタム・メソッドとJavadocのViewRowImpl
に指定されたベース実装クラスで定義されているすべてのメソッドを参照できるほか、問合せ行セットで定義されているビュー行インスタンスの属性を参照できます。この
ビュー・オブジェクト問合せ文のバインド変数: コンテキストはビュー行ではなく変数オブジェクト自体です。structureDef
プロパティを参照すると他の情報にアクセスでき、viewObject
プロパティを参照するとバインド変数を適用したビュー・オブジェクトにアクセスできます。viewObject
プロパティを介したビュー・オブジェクト属性へのアクセスはサポートされていない点に注意してください。
ビュー基準のバインド変数: コンテキストは現在のビュー基準行です。バインド変数が定義されているビュー基準は、バインド変数が検索基準値のリストを提供できる問合せ検索フォーム・コンポーネントを作成するために使用できます。ビュー基準行にアクセスするにはstructureDef
プロパティを参照している必要があり、その後、findAttributeDef()
メソッドを参照して指定した属性から値を派生させることができます。viewObject
プロパティを使用して、ビュー基準が定義されているビュー・オブジェクトにアクセスすることはできません。
ビュー・アクセッサのバインド変数: コンテキストは現在のビュー行です。バインド変数を使用するビュー・アクセッサは、カスケード値リスト(LOV)の作成に使用されます。ビュー・アクセッサは、有効な選択肢リストを編成するために使用されるビュー・アクセッサ・ビュー・オブジェクトの現在のビュー行からGroovyドリブン値を導出できます。ビュー行にアクセスするにはstructureDef
プロパティを参照している必要があり、その後、findAttributeDef()
メソッドを参照して指定した属性から値を派生させることができます。viewObject
プロパティを使用して、ビュー・アクセッサが定義されているビュー・オブジェクトにアクセスすることはできません。
一時属性: コンテキストは現在のエンティティまたはビュー行です。属性が表示されるエンティティまたはビュー行の名前で属性を参照できるだけでなく、そのエンティティまたはビュー行のpublicメソッドも参照できます。現在のオブジェクトのメソッドにアクセスするには、object
キーワードを使用して現在のオブジェクトを参照する必要があります(例: object.methodName( )
)。object
キーワードは、Javaのthis
キーワードと同じです。一時式でこのキーワードを使用しないと、動的にコンパイルされたGroovyスクリプト・オブジェクト自体にメソッドが存在すると判断されます。
adf.error
- 検証規則において、検証式で例外または警告を生成できるエラー・ハンドラにアクセスします。
adf.userSession
- ADFビジネス・コンポーネント・ユーザー・セッションへの参照を返します(セッションの一部であるuserData
ハッシュマップの値の参照に使用できます)。
次の式を使用して現在の日付(時間を切捨て)または現在の日付と時間を参照することもできます。
adf.currentDate
adf.currentDateTime
ADFビジネス・コンポーネント・アプリケーションでは、ランタイムでGroovy式が評価されるとき、信頼できる式と明示的に指定されていないかぎり、信頼できないものと想定されます。したがって、式は、限られたクラスとメソッドを使用するように制約されます。式がこの制約を踏み越えた場合、ランタイムは、そのメソッドが許可されていないことを示すjbo.ExprSecurityException
を発行します。
たとえばバリデータまたは属性デフォルト値などにGroovy式を実装する場合、式のtrustModeプロパティを使用して、式が信頼できることを示すことができます。
Groovy式を信頼できるものと指定する手順:
「アプリケーション」ウィンドウで、Groovy式を含むエンティティ・オブジェクトまたはビュー・オブジェクトを選択します。
「構造」ウィンドウで、式を見つけて選択します。
たとえば、式がオブジェクト内の属性である場合、Attributesノードを展開し、続いて、特定の属性を展開して式を選択します。
「プロパティ」ウィンドウで、「trustMode」ドロップダウン・リストを使用して、「trusted」を選択します。
別の方法として、Groovy式がJavaクラスのカスタム・メソッドをコールする場合、カスタム・メソッドに@AllowUntrustedScriptingAccess
と注釈を付けて、メソッドを、信頼できないGroovy式で使用できるものと指定できます。
以前のリリースでは、JDeveloperを使用して実装するGroovy式は、デフォルトで、信頼できました。レガシー・コードでのアプリケーション・エラーを回避するために、プロジェクトが現在のリリースに移行されるとき、既存のGroovy式はtrustMode=trusted
に設定されます。
Groovyスクリプト言語により、エンティティ・オブジェクトとビュー・オブジェクトのメソッドと属性へのアクセスのために記述するコードを容易に作成できます。
ビジネス・コンポーネントのメンバー(エンティティ・オブジェクトとビュー・オブジェクトで定義されるメソッドと属性を含む)の参照の最も単純な例は、式を適用する属性と同一のエンティティ・オブジェクトまたはビュー・オブジェクト内に存在する属性の参照です。
たとえば、従業員の月給を指定する属性Sal
を持つエンティティ・オブジェクトの一時属性AnnualSalary
の値を計算するGroovy式を定義できます。
Sal * 12
または、次のような構文を使用して、単一のビュー・オブジェクトの属性を比較する単純な検証規則をGroovyで作成できます。
PromotionDate > HireDate
Javaを使用すると、同じ比較は次のようになります。
((Date)getAttribute("PromotionDate")).compareTo((Date)getAttribute("HireDate")) > 0
現在のオブジェクトは、this
オブジェクトとしてスクリプトに渡されるため、属性名を使用するだけで現在のオブジェクトの属性を参照できます。たとえば、属性レベルまたはエンティティ・レベルのスクリプト式バリデータで、HireDateという名前の属性を参照するには、スクリプトでHireDate
を参照するだけですみます。
属性の参照と同様に、エンティティ実装クラスでカスタム・メソッドを定義する場合は、式の一部としてこれらのメソッドを起動できます。たとえば、次のように、属性のデフォルト値を定義します。
adf.object.getDefaultSalaryForGrade()
メソッド参照は接頭辞adf.object
を必要とし、これによって式が適用される属性を定義する同じエンティティを参照できます。これと同じ接頭辞を使用して、カスタム実装クラスが拡張するエンティティ実装クラス(EntityImpl.java
)のベース・クラスのメソッドも参照できます。
検証規則でエンティティ実装クラスのメソッドを参照する場合は、接頭辞source
を使用します。
source.getDefaultSalaryForGrade()
object
キーワードは、(メソッドが定義されている)エンティティ・オブジェクトではなく、検証規則オブジェクトを指すため、バリデータではsource
接頭辞を使用する必要があります。
バリデータ・オブジェクトのメンバーを参照できるようにするために(JboValidatorContext
)、検証ルール式で次のキーワードを使用できます。
newValue
: 属性レベルのバリデータで、設定されている属性値にアクセスします。
oldValue
: 属性レベルのバリデータで、設定されている現在の属性値にアクセスします。
たとえば、次の式を使用して、販売員の給与の動的検証ルール・チェックを指定できます。
if (Job == "SALESMAN") { return newValue < source.getMaxSalaryForGrade(Job) } else return true
エンティティ・オブジェクトおよびビュー・オブジェクトで定義されているメソッドおよび属性を式で参照し、別のエンティティ・オブジェクトの属性または検証規則に適用することもできます。そのためには、エンティティ・アソシエーションのアクセッサを参照します。
たとえば、エンティティにDept
とEmp
のマスター/ディテール・アソシエーションを定義する場合、デフォルトでエンティティ・アソシエーションのアクセッサにはDept
とEmp
という名前が付けられ、関連元と関連先のデータ・ソースが指定されます。Groovy式でこのアクセッサを使用し、部門の場所に基づいて新しい従業員の給与のデフォルト値を設定します。
adf.object.getDefaultSalaryForGrade(Dept.Loc)
この式では、アソシエーションのアクセッサと同じ名前(Dept
)であっても、エンティティを参照しません。そのかわりに、部門と従業員のマスター/ディテール関係を前提としてアクセッサを参照するため、従業員エンティティ・オブジェクトに対するGroovy式はマスターの部門エンティティを参照し、そのマスターからLoc
値を渡します。
Oracle Business Components RowSet
オブジェクトでは、次の組込みの集計関数を使用できます。
rowSetAttr
.sum(
GroovyExpr
)
rowSetAttr
.count(
GroovyExpr
)
rowSetAttr
.avg(
GroovyExpr
)
rowSetAttr
.min(
GroovyExpr
)
rowSetAttr
.max(
GroovyExpr
)
これらの集計関数は、文字列値引数を使用し、これはGroovy式として解釈され、集計が計算される際に行セットの各行のコンテキストで評価されます。Groovy式は数値(または数字のドメイン)を返す必要があります。
たとえば、Dept
エンティティ・オブジェクトには、次の式によって計算されるすべての従業員の給与の合計を表示する一時属性を追加できます。
EmployeesInDept.sum("Sal")
特定の部門の従業員を参照するために、式ではマスター/ディテール・アソシエーションの関連先Emp
エンティティのアクセッサ名を指定します。この場合、アクセッサはEmployeesInDept
で、給与はEmp
エンティティ・オブジェクトのレコードごとに解釈されます。
または、各従業員の職務によって異なる福利厚生を含めて、特定の部門の給与合計を計算する場合には、次のようにします。
EmployeesInDept.sum("Sal + adf.object.getBenefitsValue(Job)")