3. ビジネス・ルールの実装

目的

このチュートリアルは、ビジネス・コンポーネントに対する検証とビジネス・ルールの追加について説明します。

所要時間

約30分

トピック

このチュートリアルでは、以下のトピックについて説明します。

 

スクリーンショットの表示

Show all images

このアイコンの上にカーソルを置くか、[Alt]を押しながら[A](Firefoxでは [Alt]と[Shift]を押しながら[A])を押すと、すべ てのスクリーンショットがロードし、表示されます。 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。

概要

Oracle FormsやOracle Designerなどのツールでは、簡単なビジネス・ルールや検証を宣言的に定義できます。 たとえば、手数料率を一定範囲内に指定したり、フィールドのデフォルト値を定義したりすることができます。

同様に、Oracle JDeveloperとOracle ADFでも宣言的な検証を提供しており、Oracle Formsと比べてより豊富な宣言的検証をさまざまな方法で提供します。

トピック・リストに戻る

シナリオ

作業中のデータベース・スキーマは、データベースの制約およびPL/SQLを使用して、データに多 数のビジネス・ルールを課しています。 たとえば、顧客の信用限度は5000以下でなければなりません。ただし、このチュートリアルでは、ビジネス・コンポーネントを使用して、データをデータ ベースにコミットする前に中間層で宣言的に検証します。

トピック・リストに戻る

前提条件

このチュートリアルを始める前に次のことを確認してください。

  1. 前のハンズオン・チュートリアルにある前提条件を満たしていること。

  2. このチュートリアルの前のハンズオン・チュートリアルを終了していること。

トピック・リストに戻る

1. 簡単な検証ルールの追加

企業のビジネス・ルールでは、顧客の絶対的な信用上限は5000に定義されています。 しかし、受注のために、顧客の信用限度を4000以上に設定してはならないと決定されました。このビジネス・ルールを受注アプリケーション内に実装しま す。

エンティティ・オブジェクト内で検証を実装するには、以下の手順を実行します。

  1. アプリケーション・ナビゲータで「 OrderEntry」→「 Model」 の順でプロジェクトを開き、「 Application Sources」→「 model」 の順でパッケージを開きます。 「 Customers」エンティティ・オブジェクトを右クリックし、コンテキスト・メ ニューから「 Open Customers」を選択します。

    Hover to see image

  2. エンティティ・オブジェクト・エディタで、左のツリーから「 Validators」を選択します。

    Hover to see image

    既存のバリデータのツリーから「 CreditLimit」を選択します。

    NewNew icon」をクリックして、検証基準の新しいセットを追加します。

    Hover to see image

  3. Rule Typeドロップダウン・リストを使用して、使用できる多様なルールを確認します。

    この例では、Rule Typeドロップダウン・リストから「 Compare Validator」を 選択し、以下の値を選択または入力します。

    Attribute CreditLimit
    Operator LessOrEqualTo
    Compare With Literal Value
    Enter Literal Value 4000
    Error Message 信用限度の入力値({x})は4000未満である必要があります

    Hover to see image

    Failure Handling」タブをクリックして、エラー・メッセージとToken Expression newValueを入力します。

    Hover to see image

    検証を1つ追加しました。 中かっこ({})内に挿入されたメッセージ・トークンには、フィールドの新しい値が反映されます(かっこは除外されます)。 これにより、エラー・メッセージには入力された値が挿入されるので、理解しやすくなります。 この検証ルールは、エンティティ・オブジェクト・レベルで追加されたことに注意してください。 この書式は、それにアクセスするすべてのビュー・オブジェクトおよびアプリケーション・モジュールで再使用されます。

    時間があれば、以下の簡単な検証ルールを追加してください。

    • 婚姻区分の値を、'married'または'single'に制限する。

    • 性別の値を、'M'または'F'に制限する。

    ヒント:この種類の検証には、 List Validatorルール を使用します。 用意されているヘルプでは、リスト項目を追加する方法についてサポートしています。

トピック・リストに戻る

2. 書式マスクの追加

アクセスする方法とは無関係に、データは一貫した書式で表示される必要があります。 この場合、信用限度は金額であり、正しい通貨記号と小数点の記号で表示される必要があります。 また、生年月日は MM/dd/yyと いう書式で表示する必要があります。

信用限度および生年月日の属性に書式マスクを追加するには、以下の手順を実行します。

  1. エンティティ・オブジェクト・エディタ内で「 Customers」エンティティ・オブジェクトを開き、 左にあるリストで「 Attributes」ノードを選択します。

    CreditLimit」属性をダブルクリックして、 Edit Attributeダ イアログを開きます。 左側のリストにある「 Control Hints」をクリックします。

    Hover to see image

  2. Format Typeドロップダウン・リストから「 Currency」を選択して、Tooltip Textを入力します。

    Hover to see image

    OK」をクリックして、書式マスクを適用します。

  3. 次に、「 DateOfBirth」属性をダブルクリックして、ダイアログ内の「 Control Hints」リンクをクリックします。

    Format Typeドロップダウン・リストから「 Simple Date」を選択します。

    Formatのドロップダウン・リストで事前定義された書式マスクは十分ではないので、Formatフィールドに独自の書式マスクを入力し ます。 MM/dd/yyを入力し、「 Apply」または「 OK」 をクリックして、これらの変更内容を受け入れます。

    Hover to see image

    :書式マスクは大文字と小文字を区別するので、示されているとおり 正確に入力する 必要があります。

  4. CustFirstName属性の ラベル・テキストを" Name" に変更し、CustLastName属性は" Surname"に変更します。 ラ ベルとは、ユーザーが認識できるよう、UIコントロールに貼りつけられたテキストのことです。

    Hover to see image

    注:この書式は、エンティティ・オブジェクト・レベルで追加されました。 この書式は、それにアクセスするすべてのビュー・オブジェクトおよびアプリケーション・モジュールで再使用されます。

トピック・リストに戻る

3. デフォルト値の追加

デフォルト値が自動的に移入される必要のあるフィールドもあります。 この場合、新しい顧客のCreditLimitはデフォルトで100になっています。演算子は、もちろんこれをオーバーライドできますが、Formsにお ける初期値と同様に、このアプリケーション内ではデフォルトを使用します。

エンティティ・オブジェクトにデフォルト値を追加するには、以下の手順を実行しま す。

  1. Attributesリストの「 CreditLimit」をダブルクリックして、「 Edit Attribute」ノードをクリックします。

    デフォルトとして、Valueフィールドを 100に設定します。

    Hover to see image

    OK」をクリックして変更を確定します。

  2. Save All「 Save All button」をクリックして作業内容を保存します。

トピック・リストに戻る

4. ビュー・オブジェクトのプロパティの変更

上記の変更は、エンティティ・オブジェクト・レベルでおこなわれました。 ビュー・オブジェクト・レベルでも同様に変更できます。 OrderEntryアプリケーションには、同じエンティティ・オブジェクトを使用する複数のビュー・オブジェクトが存在することがあります。 ほとんどの場合、エンティティ・オブジェクト・レベルでプロパティを更新することは理にかなっています。 たとえば、ビュー・オブジェクトが複数の表から列を選択する問合せであると見なす場合、状況次第では、エンティティ・オブジェクト・レベルではなく、 ビュー・オブジェクト・レベルで、属性のプロパティをいくつか変更する必要があります。 たとえば、値Webページのリスト用ビュー・オブジェクトの作成や、ビュー・オブジェクトにorder by句を組み入れることが必要になる場合があります。 この例では、この点を説明するために、ビュー・オブジェクト・レベルでの調節をいくつかおこないます。

Oracle Designerのユーザーは、この概念に慣れています。 Oracle Designerでは、表示プロパティとすべてのモジュール・コンポーネントを表定義レベルで設定でき、これらの設定を再利用できます。または、影響を受 けたモジュール・コンポーネントを使用するモジュール(フォーム)のみに対して、モジュール・コンポーネント(ブロック)レベルで設定することもできま す。

ビュー・オブジェクトを変更するには、以下の手順を実行します。

  1. ダイアグラムまたはアプリケーション・ナビゲータで、「 CustomersView」をダブルクリック して「 Open CustomersView」を選択し、ビュー・オブジェクト・エディタを起動します。 CustomersViewは、 model.queriesパッ ケージの ModelApplication Sources内にあります。

    Hover to see image

    Attributes」ノードを選択します。「 CustLastname」 を選択して右クリックし、コンテキスト・メニューの「 Edit CustLastName」を選択します。

    Hover to see image

    ビュー・オブジェクト・エディタが表示されます。

    Hover to see image

  2. ラベル・テキストに"Surname"と表示されていることを確認します。 これは、デフォルトのラベルが使用されており、これはエンティティ・オブジェクト・レベルでテキストが設定されていることを意味しています。

    ビュー・オブジェクト(VO)がエンティティ・オブジェクト(EO)属性設定をオーバーライドすることを明確にするために、ラベル・テキス トを VO Last Nameに変更します。 そのほかは変更しません。

    Hover to see image

  3. 問合せで ORDER BY句を設定することによって、問合せをおこなうオブジェ クトの順序を変更します。

    左側のリストで「 Query」を選択します。

    Order Byの右にある、黒い下向きの矢印をクリックします。

    Hover to see image

    列を1つ追加します。 起動時、ダイアログは非常に小さいので、詳細を表示するためにサイズを変更します。

    Customer.CUST_LAST_NAME」を選択し、「 Add button」をクリックして、右側のリストに移動します。

    Hover to see image

    OK」をクリックします。

    注:ビュー・オブジェクトはSQL問合せにすぎません。したがって、オプティマイザ・ヒントを使用して 調整することや、EXPLAIN PLANを表示することもできます。 ツリー・コントロールのTuningセクションを参照してください。

    同様の作業は、ビュー・エディタのEditアイコンをクリックしても実行できます。

    Hover to see image

    Hover to see image

  4. 問合せの結果は、以下のとおりです。

    Hover to see image

  5. Save All「 Save All button」をクリックして作業内容を保存します。

トピック・リストに戻る

5. アプリケーションのテスト

Oracle JDeveloperにはBusiness Components Browserが含まれており、クライアント・コードを構築せずにビジネス・コンポーネントをテストできます。

Business Components Browserを使用して、ビジネス・モデルのために構築した機能をテストするには、以下の手順を実行します。

  1. アプリケーション・ナビゲータで「 model.services」を展開し、「 CustomerOrdersBusinessServices」 を右クリックしてコンテキスト・メニューから「 Run」を選択します。

    Hover to see image

  2. Oracle Business Component BrowserのConnectウィンドウで、「 Connect」 をクリックします。

    Hover to see image

  3. Oracle Business Component Browserで「 CustomersView1」 をダブルクリックして、実行します。

    CreditLimitフィールド上にマウスを置き、CreditLimit書式マスクが適用され、 ToolTipが動作していることを確認します。

    また、デフォルト・ラベルではなく、CustFirstNameなどの変更した属性ラベルが表示され、EOレベルで定義されたものではな く、VOラベルで姓が表示されていることも確認してください。

    Hover to see image

  4. 信用限度を 6000に更新して、エラー・メッセージが表示されることを確認します。

    Hover to see image

    OK」をクリックし、値を4000未満に戻して続行します。

  5. NextNext button」をクリックしてレコードをスクロールし、姓の順に顧客が返されることを確認しま す。

    Hover to see image

  6. CreateCreate button」をクリックして、新しいレコードを作成します。 信用限度のデフォルト値が表示されます。

    Hover to see image

    DeleteDelete button」をクリックして、挿入した レコードを削除します。

  7. OrdersCustomerIdFkLink1」ビュー・リンクをダブルクリックします。 これによって、ビュー・リンクで結合されたCustomersView1およびOrders View1ビュー・オブジェクトが起動します。

    注文が少なくとも1つはあるビュー・オブジェクトが見つかるまで、Customersをスクロールします( CustomerId 102など)。 アプリケーション・モジュールは、すべてのビューを自動調整します。

    Hover to see image

  8. テストが終わったら、Business Components Browserウィンドウを閉じてください。

トピック・リストに戻る

6. 計算フィールドの追加(これ以降のチュートリアルはオプション)

ORDER_ITEMS表は、注文された数量と単価のみを格納 します。 各行の合計金額を表示するものと仮定します。 そのためには、この値を表示するためのそのほかの属性を追加し、計算を設定する必要があります。

計算属性を追加するには、以下の手順を実行します。

  1. アプリケーション・ナビゲータまたはダイアグラムで、「 OrderItemsView」をダブルクリッ クして ビュー・オブジェクト・エディタを開きます。

    左側のタブにある「 Attributes」ノードを選択します。

    New」をクリックして、新しい属性を追加します。

    Hover to see image

  2. New View Object Attributeダイアログで、次のプロパティを設定します。

    Name LineTotal
    Type Number
    Updatable Never
    Mapped to Column or SQL チェックを外す
    Selected in Query チェックを外す
    Queryable チェックを入れる

    OK」をクリックします。

    Hover to see image

    これらの値は、大文字と小文字を区別します。

  3. LineTotal属性を再計算して、注文アイテムを問い合わせた ときと、価格または数量を変更したときに新しい値を表示させるには、 LineTotal列でScript Expressionをバリデータとして使用します。

    Value Typeで「 Expression」を選択したら、 Valueフィールドの横にある「 Edit...」ボタンをクリックして、Expression Editorを起動します。

    式に、Quantity*UnitPriceと入力します(これらは値がベースとする属性で、ビュー内にあります)。

    式で使用した2つの属性を、" Selected"というラベルのついた画面下部のリストへ移動します。 これで LineTotalは2つの属性に依存することになり、いずれかが変更された場合は再計算されます。

    Hover to see image

  4. OK」を2回クリックします。

  5. アプリケーションを実行して、バリデータをテストします。 Customer 109を検索します。最初の注文には多くのアイテムが含まれています。 Quantityまたは UnitPriceを 変更して、再計算されるかを確認します。

    Hover to see image

    Save All「 Save All button」をクリックして作業内容を保存します。

トピック・リストに戻る

7. 正規表現による検証の追加

これまで追加した検証の大部分は、宣言的なものでした。これは、Oracle Formsで宣言的に検証することと同等の作業です。 Oracle Formsと同様に、Oracle JDeveloperには、宣言的に可能な検証よりも、はるかに複雑な検証を定義できる柔軟性があります。 Oracle Formsでは、When-Validate-ItemトリガーまたはWhen-Validate-Recordトリガーをコーディングして、複雑な検証 を実施しました。 ADF Business Componentsを使用する場合、カスタム検証を実行する1つの方法は、エンティティ・オブジェクトまたはビュー・オブジェクトの正規表現を使用する ことです。

顧客の電子メール・アドレスに対する検証を追加するには、以下の手順を実行します。

  1. アプリケーション・ナビゲータの「 Customers」をダブルクリックして、エンティティ・オブジェ クト・エディタを起動します。

    エンティティ・オブジェクト・エディタで、左のツリーから「 Validators」を選択します。

    Declared Validation Rulesから「 CustEmail」を選択して、「 New」 をクリックします。

    Hover to see image

  2. 検証規則の追加ダイアログで、 Rule Typeドロップダウン・リストから「 Regular Expression」を選択します。

    Predefined Expressionsドロップダウン・リストから「 Email Address」を選択して、「 Use Pattern」ボタンをクリックします。

    Hover to see image

    Failure Handling」タブで、" The email address {e} is not valid. Please reenter"など、適切なエラー・メッセージを入力します。 "e"変数にユーザーが入力した値を移入するため、下部のExpressionフィールドに"newValue"を入力します。

    Hover to see image

    OK」をクリックして、Customersエンティティ・オブジェクトを更新します。

  3. 前のチュートリアルで属性を設定したときと同様に、 LineTotalおよび UnitPriceの 書式マスクを設定します。 Format Typeを Currency に設定しま す。

    任意のToolTipテキストを入力します。

    Hover to see image

  4. OK」をクリックします。 修正済みのビジネス・コンポーネントが選択されたプロジェクト内に作成されました。

    Save All「 Save All button」をクリックして作業内容を保存します。

トピック・リストに戻る

8. アプリケーションのテスト

ここでも、クライアント・コードを構築せずにビジネス・コンポーネントへの変更をテストできま す。 Business Components Browserを使用して、前におこなったとおり、ビジネス・モデルのために構築した機能をテストします。

  1. アプリケーション・ナビゲータで「 CustomerOrdersBusinessService」を右 クリックし、コンテキスト・メニューから「 Run」を選択します。

    Hover to see image

    前と同じく、Oracle Business Component BrowserのConnectウィンドウでConnection Nameドロップダウン・リストから「 oeconn」を選択し、「 Connect」 をクリックします。

  2. Business Component Browserで「 CustomersView1」をダブルク リックして、実行します。 電子メール・アドレスから@マークを削除して、エラー・メッセージが表示されることを確認します。

    Hover to see image

    OK」をクリックし、@マークを元に戻して続行します。

  3. OrdersCustomerIdFkLink1」をダブルクリックします。 CustomerId 109または注文した顧客を探します。 「 ViewLinkInstance1」 ビュー・リンクをダブルクリックします。 これによって、ビュー・リンクで結合されたOrdersViewおよびOrderItemsView1ビュー・オブジェクトが起動します。

    Order Itemsの詳細に、 製品名が表示されていることを確認します。 また、計算された LineTotalが 表示されます。 書式マスクを設定してあれば、これも表示されます。

    QuantityまたはUnit Priceの値を変更すると、LineTotalが再計算されることを確認します。

    Hover to see image

    テストが終わったら、Business Components Browserウィンドウを閉じてください。

トピック・リストに戻る

まとめ

このチュートリアルでは、複数のエンティティ・オブジェクトとビュー・オブジェクトのプロパティを編集して、ビ ジネス・コンポーネントのデフォルトの動作を変更しました。 簡単な検証ルールの実装、デフォルト値と書式マスクの設定、ラベルのデフォルト設定の変更、ツールチップの設定、そしてレコードのソート順の変更をおこな いました。 また、Oracle ADF Business Component Browserの動作をテストしました。

トピック・リストに戻る

Hide all images このアイコンの上にカーソルを置くか、または[Shift]と[Alt]を押しながら[H]を押 すと、すべてのスクリーンショットが非表示になります。 アイコンをクリックして、ナビゲーション・バーを表示します。