新規のエンティティに基づく定義を使用した実行時のビュー・オブジェクト・インスタンスの追加

createViewObjectFromQueryClauses()をアプリケーション・モジュールでコールすることにより、実行時に新規ビュー・オブジェクトを動的に定義し、そのインスタンスをアプリケーション・モジュールのデータ・モデルに動的に追加できます。

注意: 作成したビュー・オブジェクト・インスタンスにはエンティティ・オブジェクトの慣用名が必ず1つ与えられ、エキスパート・モードの問合せは与えられません。この詳細、またはエンティティ・オブジェクトの慣用名を持たない、あるいは複数持つビュー・オブジェクトのインスタンスの追加方法は、関連項目のトピックを参照してください。

新規のエンティティに基づく定義を使用して実行時にビュー・オブジェクト・インスタンスを追加するには、次のようにします。

  1. データ・モデルのインスタンスに与える名前を含む文字列を作成します。たとえば、このインスタンスがOrdersForCustomerの場合、次のコードを使用します。

    String voInstanceName = "OrdersForCustomer";

  2. 使用するエンティティ・オブジェクト定義のパッケージ修飾名を含む文字列を作成します。たとえば、ビュー・オブジェクトがOrdersというエンティティを使用し、これがorderentry.businessdomainパッケージに含まれている場合、次のコードを使用します。

    String eoDefName = "orderentry.businessdomain.Orders";

  3. SQL問合せのSELECT句を含む文字列を作成します。SELECTという語句は文字列に含めないでください。

    句には、エンティティ・オブジェクトが持つ属性と同じ数の列が含まれる必要があります(ビュー・オブジェクト属性は後で追加および削除できます)。句の列は、エンティティ属性がエンティティ・オブジェクトのXMLファイルで指定されている順序に従ってエンティティ属性にマップされます。句の最初の列は最初のエンティティ属性、2番目の列は2番目のエンティティ属性というように、順にマップされます。たとえば、Ordersに次の属性がある場合があります。

    このような場合、次のSELECT句を使用できます。

    String selectClause =
      "ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, " +
      "ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID";        

    警告: 問合せ列の順序は、対応するエンティティ・オブジェクト属性の順序と必ず一致させてください。順序が正しくないと、ビュー・オブジェクトのデータ取得メカニズムとエンティティ・オブジェクトのデータ操作メカニズムで競合が発生するため、RowInconsistentExceptionが生じる場合があり、データが破損する場合もあります。

  4. SQL問合せのFROM句を含む文字列を作成します。FROMという語句は文字列に含めないでください。次に例を示します。

    String fromClause = "ORDERS";

  5. SQL問合せのWHERE句を含む文字列を作成します。WHEREという語句は文字列に含めないでください。WHERE句を使用しない場合は、nullを使用します。たとえば、次の定義はどちらも適切です。
    String whereClause = "ORDER_TOTAL > 500";
    String whereClause = null;        
  6. SQL問合せのORDER BY句を含む文字列を作成します。ORDER BYという語句は文字列に含めないでください。ORDER BY句を使用しない場合は、nullを使用します。たとえば、次の定義はどちらも適切です。
    String orderByClause = "ORDER_TOTAL";
    String whereClause = null;        
  7. これらの文字列をすべて渡してcreateViewObjectFromQueryClauses()をコールします。
    viewObject ordVO = myAM.createViewObjectFromQueryClauses(
      voInstanceName, eoDefName, selectClause, fromClause, 
      whereClause, orderByClause);        
  8. ビュー・オブジェクトの修正方法は、「実行時にビュー・オブジェクト問合せを変更する方法」を参照してください。
  9. インスタンスを別のインスタンスとマスター/ディテール関係にする方法は、「実行時にビュー・オブジェクト関係を変更する方法」を参照してください。

注意: このメソッドを使用してビュー・オブジェクトを作成すると、最初にデータをフェッチするとき、問合せが2回実行される場合があります。最初の問合せでは、データ型と精度の情報が収集されます。この情報は、データを適切なJava型にマップし、(最大値よりも低い精度を指定して)問合せの効率を上げるために、後の問合せで使用されます。2回実行するとパフォーマンス上問題がある、負荷の高い問合せの場合、回避策として、行を返さないダミーのWHERE句を使用してまずビュー・オブジェクトを作成し、そのビュー・オブジェクトに対してメタデータ問合せと属性定義を容易にするgetAttributeCount()をコールし、次にsetQuery()をコールして、必要に応じて問合せを変更します。このようにすると、最初の問合せは、同じデータセットに対する単純で負荷の高くない問合せになります。


実行時にビュー・オブジェクト・インスタンスをデータ・モデルに追加する方法
ビュー・オブジェクト属性について
Oracle ADFビュー・オブジェクトについて
Oracle ADFアプリケーション・モジュールについて
ビュー・オブジェクト・インスタンスとビュー・リンク・インスタンスについて
Javaバッチ・クライアントからのルート・レベルのアプリケーション・モジュールへのアクセス
データ・モデル内のビュー・オブジェクト・インスタンスの検索
事前定義済ビュー・オブジェクトに基づく実行時のビュー・オブジェクト・インスタンスの追加
新規のSQLのみの定義を使用した実行時のビュー・オブジェクト・インスタンスの追加