Comments
Description
Transcript
3 JHeadstart Application Generator
CHAPTER 3 JHeadstart Application Generator T his chapter describes in detail the generation features of JHeadstart. It contains the following sections: 本章では、JHeadstartの生成機能について解説します。内容は以下の通りとなります: Architecture:JHeadstartの全体像について Roadmap:JHeadstartを使用して開発する際の手順 Using the JHeadstart Addins :JHeadstart関連ツールについて Prepare Model for generation:ADF BC Model layerの準備作業 Page Layout Generation:JHeadstartが生成可能なレイアウトスタイル Query Behavior:JHeadstartの検索機能 Transactional Behavior:データの登録・更新・削除機能の実装について Generating User Interface Widgets:JHeadstartが生成可能なアイテムについ て Customizing Page Layout Generation:JHeadstartの生成をカスタマイズする 手順 Internationalization:多言語対応について What Was Generated for what purposeジェネレータの生成ファイルについて JHeadstart Developer’s Guide JHeadstart Application Generator 3-1 How to use this chapter Architecture’セクションと`Roadmap’セクションを読み進めてください。`Roadmap’セ クションから各箇所へのリンクがあります。 3-2 JHeadstart Application Generator JHeadstart Developer’s Guide Architecture このセクションでは、JHeadstart Application Generator(JAG)のアーキテクチャの概 要を説明します。 JHeadstart Application Generatorは、ADFを使用してトランザクションベースのJ2EEア プリケーションを構築するためのシンプルかつ生産性の高い手段を提供します。 JHeadstart Application Generatorは、アプリケーション・ストラクチャ・ファイルによ って制御されます。これは、アプリケーション全体の構造を定義するXMLファイルで、 以下の情報を含みます: 生成されるビューのタイプ(UIX/JSP) 表示されるビュー・オブジェクト、及びビュー・オブジェクトを制御するレイア ウト・スタイル ビュー・オブジェクト間の関係(マスター・ディテール、ルックアップ) JHeadstartにはJHeadstartアプリケーション・ストラクチャ・ファイル・エディタが付 属しますので、直接XMLファイルに手を加えることなくアプリケーション・ストラクチ ャ・ファイルを編集することが出来ます。 Input Output アプリケーション・ストラクチャ・ファイルの他に、JAGは以下のファイルを使用しま す。 静的ドメインの定義を含むドメイン定義ファイル ADFエンティティ・オブジェクトXMLファイル ADFビュー・オブジェクトXMLファイル JHeadstartジェネレータ・テンプレート JAGはアプリケーション・ストラクチャ・ファイルをパースし、以下のテクノロジを使 用してMVCアプリケーションを生成します: Model: ADF Business ComponentsとADF Model. View: User Interface XML (ADF UIX)またはJava Server Pages (JSP). Controller: Struts. JAGは、以下のアウトプットを生成します。 Struts ControllerのためのStruts Configファイル 表示するページのためのUIX/JSPファイル 生成されたページのためのUI Model リソースバンドル JAGのアウトプットは、ADF ビジネス・コンポーネントと併せてJ2EEアプリケーショ ンを形成します。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-3 各ファイルに対し、生成する/しないのオプションはいつでも切り替えることができま す。 JHeadstart Application Generator Use of BC custom properties JHeadstartアプリケーション・ストラクチャ・ファイルは、JHeadstartによって生成さ れるアプリケーションのハイレベルな記述が含まれます。このファイルはアプリケーシ ョン・ストラクチャ・ファイル・エディタを使用して編集します。 JHeadstartは、ADF BCビュー・オブジェクト及びエンティティ・オブジェクトのカス タム・プロパティ情報を格納します。例えば、ある属性のプロンプトはカスタム・プロ パティ`PROMPT’に記録されます。 カスタム・プロパティを設定するには、二通りのアプローチがあります。 3-4 JHeadstart Application Generator 1. JHeadstart ADF BCプロパティ・エディタを使用します。JHeadstartプロパテ ィ・エディタはプロパティ編集用のアドオンで、本文書ではこのエディタを使 用することを前提としています。詳細についてはUsing the ADF Business Components Editorを参照してください。 2. JDeveloperの標準エディタを使用します。ビュー・オブジェクトを右クリック し、「<ビュー・オブジェクト>を編集」を選択してください。編集する属性 の「属性プロパティ」タブをクリックすると、その属性のカスタム・プロパテ ィを参照することが出来ます。 JHeadstart Developer’s Guide JHeadstart ADF BCプロパティ・エディタの使用を推奨するのは、JDeveloperの標準エ ディタよりユーザー・フレンドリであるためです。 Suggestion: Look into a <ViewObject>.xml file directly. You will see the custom properties there. Example: <ViewAttribute Name="CountryName" PrecisionRule="true" EntityAttrName="CountryName" EntityUsage="Countries" AliasName="COUNTRY_NAME" > <Properties> <Property Name ="PROMPT" Value ="Country Name" /> </Properties> </ViewAttribute> BC Control Hints また、ビュー・オブジェクトの属性に対し、コントロール・ヒントを設定することも可 能です。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-5 ここで入力された情報はリソースバンドル内に生成されます。ビジネス・コンポーネン トのコントロール・ヒントの一部は、JHeadstartが使用するカスタム・プロパティと重 複します。例えば、上図の`Label Text’はカスタム・プロパティ`Prompt’と重複します。 カスタム・プロパティを設定しなかった場合、JAGはコントロール・ヒントを使用しま す。 3-6 JHeadstart Application Generator JHeadstart Developer’s Guide Roadmap When you want to develop an application using the JHeadstart Application Generator (JAG), you will have to follow the steps below: JHeadstart Developer’s Guide 1. JDeveloperワークスペース及びADF ビジネス・コンポーネント・パッケー ジのセットアップ JAGを実行する前にChapter 2, Getting Startedに記載されている手順を実行する 必要があります。Oracle Designerからアプリケーションを移行する場合はJDG も実行します。JDGについては、Chapter 4 JHeadstart Designer Generatorを参照 してください。 2. ビジネス・コンポーネント・モデルの準備 JHeadstartによる生成を行う前に、Modelを正しく構築する必要があります。 Prepare Model for generationのセクションを参照してください。 3. `Enable JHeadstart’の実行と、アプリケーション・ストラクチャ・ファイル の生成 Chapter 2 Getting Startedを参照してください。 4. アプリケーション・ストラクチャ・ファイルのプロパティの設定 生成するViewのタイプをアプリケーション・ストラクチャ・ファイルにて設定 します。また、他のプロパティも確認し、デフォルト値を変更する必要がある か検討します。 5. アプリケーション・ストラクチャ・ファイルのグループ定義の設定 アプリケーション・ストラクチャ・ファイルには、アプリケーションで使用さ れるページの特性を決定づける「グループ定義」が含まれます。アプリケーシ ョン・ストラクチャ・ファイル及びグループに関する説明はUsing the Application Structure File Editorのセクションにあります。 JDGを使用する場合は、Oracle Designerのモジュール・コンポーネント定義に 基づいてJDGがアプリケーション・ストラクチャ・ファイルを生成します。 6. JHeadstart Application Generatorを使用してページを生成する 準備が出来たら、JAGを使用してページを生成します。生成を行う前に全ての 設定を完全に終わらせておく必要はなく、寧ろアプリケーション・ストラクチ ャ・ファイルにおいて最初のグループ定義が完了したら実行し、JAGの挙動を 掴むべきです。Running the JHeadstart Application Generatorのセクションを参 照してください。 7. ビュー・オブジェクトの更新・追加 JAGはエンティティ・オブジェクトとビュー・オブジェクトからページを構成 します。必要な属性を持ったビュー・オブジェクトを作成してページの土台と することも、既に作成したビュー・オブジェクトを必要な形に変更することも できます。 また、エンティティ・オブジェクトやビュー・オブジェクトにJHeadstartプロ パティを追加し、より詳細な設定を行うことができます。この作業には JHeadstartプロパティ・エディタを使用します。各プロパティの意味について は、本文書の各セクションで説明します。 JDGを使用する場合は、JDGによってモジュール・コンポーネントからビュ ー・オブジェクトが生成されます。これらのビュー・オブジェクトは、Oracle Designerでの設定を可能な限り再現するよう、いくつかのカスタム・プロパテ ィが既に設定された状態になっています。 生成されるレイアウトについては、Page Layout Generation及びGenerating User Interface Widgetsのセクションを参照してください。 JHeadstart Application Generator 3-7 8. 問い合わせ及びトランザクションの動作の決定 Query Behaviour及びTransactional Behaviourのセクションを参照してくださ い。 9. アプリケーションのルック&フィールの変更 You can influence many aspects of the Look and Feel of your application while still doing 100% generation. アプリケーションのルック&フィールは様々な部分 がカスタマイズ可能です。JSPもUIXもテンプレートを変更し、再度生成するこ とでルック&フィールを変更することができます。詳細はCustomizing Page Layout Generationを参照してください。また、言語を変更する方法については Internationalizationのセクションで解説しています。 10. ステップ4∼9の繰り返し JAGを利用してアプリケーションを作成する場合は、反復手順によるアプロー チを取るのが自然です。アプリケーションの実装の一部はJAGではできないこ とがあるかもしれませんが、それでも可能な限りのカスタマイズをJAGで行う べきです。これは、JAGで再生成を行う必要が出てきた場合、再生成後の手間 を減らすためです。また、一部のパラメータをfalseに設定することで、JAGが 特定のファイルを再生成することを抑制することもできます。 11. 生成後のステップ アプリケーションを完成させるためには、生成後もいくつかの手順を経る必要 があるでしょう。JHeadstartは標準的なADFアプリケーションを生成するた め、生成されたアプリケーションはJDeveloperの機能をフルに使用して更にカ スタマイズを行うことができます。 Reference: JDeveloperを使用してADFアプリケーションを構築するチュート リアルはhttp://www.oracle.com/technology/obe/obe9051jdev/index.htm にあります。 3-8 JHeadstart Application Generator JHeadstart Developer’s Guide Prepare Model for Generation JHeadstartは、ビジネス・コンポーネントが保持する情報に依存します。アプリケーシ ョン・ストラクチャ・ファイルを作成する前に、プロジェクト内のビジネス・コンポー ネントの詳細を再度確認してください。それにより、`New Application Structure File’ ウィザードはより品質の高いアプリケーション・ストラクチャ・ファイルを生成するこ とができるようになります。 Setting up master-detail synchronization JHeadstartは、マスター・ディテールのレイアウトを作成することができます。例え ば、部門を表示し、部門に所属する従業員をディテールとして表示するといった構成で す。 マスター・ディテールのレイアウトを生成したい場合は、ADF BC Modelの設定がいく つか必要になります。部門と従業員の例を見てみましょう: 1. マスター・ディテールの関係を示すビュー・リンクがModelプロジェクトに存 在している必要があります: 2. アプリケーション・モジュールのデータ・モデルにマスター・ディテールのリ レーションが存在している必要があります: Attention: アプリケーションによっては、より深い階層構造を取ることがあ ります。例えば、Regions − Countries − Locations等です。Creating Tree Layoutsに、より深い階層構造の例があります。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-9 Determine the Display Sequence of Attributes within a Row 生成されたページ内のアイテム表示順序は、ビュー・オブジェクトで定義された属性に よって決定されます。 1. ビュー・オブジェクトを右クリックし、「<ビュー・オブジェクト名>の編 集」を選択します。 2. 属性ノードに行きます。右側の選択済みリストに並んでいる順序が、そのまま ページにて表示される順序となります。 3. 画面右の上矢印と下矢印を使って、順序の入れ替えを行ってください。 Determine the Order of Displayed Rows 問い合わせ結果に対しデフォルトのソート順序を設定するには、各ビュー・オブジェク トにOrder By句を追加する必要があります。 3-10 1. ビュー・オブジェクトを右クリックし、「<ビュー・オブジェクト名>の編 集」を選択します。 2. 「問合せ」ノードのORDER BY句を入力します。「編集」ボタンをクリックす ると、使用可能な属性が表示されます。ビューはDescriptor Attributeでソート されることが多いですが、ルックアップでソートすることも可能です。 JHeadstart Application Generator JHeadstart Developer’s Guide 3. 「テスト」をクリックして、問合せの妥当性を確認することを忘れないでくだ さい。 テーブルフォーマットのページでレコードのソート順序を設定することもできます。 Allowing the user to sort data in a table pageのセクションを参照してください。 Create Calculated or Transient Attributes アプリケーションを作成する際、データベースに存在しない属性を表示する必要が出て くる場合があります。例えば、「姓」と「名」という属性を組み合わせて「氏名」とい う読み取り専用属性を作成するといったケースでは、`calculated’属性または`transient’ 属性を使用することで対応します。 ` calculated’属性と`transient’ 属性との間には、以下の違いがあります: `calculated’属性はSQL文の中で導出されます。つまり、計算元のデータが変 更されても、値が再計算されるのはSQLの実行時となります。`calculated’属 性は読み取り専用のフィールドでのみ使用できます。 `transient’属性はSQL文の中ではなく、ビュー・オブジェクトのgetメソッド 内で値が導出されます。`transient’属性を使用するにはViewRowImplクラス 内のgetメソッドにコードを追加する必要があります。 Steps to create a calculated attribute JHeadstart Developer’s Guide 1. ビュー・オブジェクトを右クリックし、「<ビュー・オブジェクト名>の編 集」を選択します。 2. 「属性」ノードに異動し、「新規」をクリックします。 3. 「名前」を入力します。 4. 「問合せで選択済」をチェックします。 5. 「別名」を入力します。 6. 「式」に導出用のSQLを入力します。ビューの定義にルックアップ属性を含め た場合は、SQL文の中でエンティティ・オブジェクトの別名を使用しなくては いけない点に注意してください。 例: EMPL.LAST_NAME || ', ' ||EMP.FIRST_NAME JHeadstart Application Generator 3-11 7. 作成した属性の位置を属性リストの中で決定します。 8. 変更を保存し、ビュー・オブジェクト・ダイアログを閉じます。 Steps to create a transient attribute 3-12 1. ビュー・オブジェクトを右クリックし、「<ビュー・オブジェクト名>の編 集」を選択します。 2. 「属性」ノードに異動し、「新規」をクリックします。 3. 「名前」を入力します。 4. 「問合せで選択済」のチェックを外します。 5. 「Java」ノードに行きます。 6. ビュー行クラスの「Javaファイルの生成」及び「アクセッサの生成」にチェッ クが入っていることを確認してください。 JHeadstart Application Generator JHeadstart Developer’s Guide 7. 「OK」をクリックします。 8. 生成されたViewRowImpl.javaファイルを開き、新規属性を取得するgetメソッ ドの箇所を探してください。 9. Getメソッドのコードを追加します。以下は一例です: public String getFullName() { return getLastName() + "," + getFirstName(); } 10. 作成した属性の位置を属性リストの中で決定します。 11. 変更を保存し、ビュー・オブジェクト・ダイアログを閉じます。 Reference: Business Components Browserでビュー・オブジェクトのテスト をすることを推奨します。Test the modelのセクションを参照してくださ い。 Generated Primary Key Values 多くの場合、主キーにはユーザーに意味のないIDが使用されます。IDはシステムによっ て生成され、内部的に使用されますが、ユーザーに対しては表示すべきではありませ ん。 JHeadstartでアプリケーションを生成する前に、Modelの主キーを確認し、正しく生成 されていることを確認してください。Business Components Application Module Tester を使用してテストすることができます。詳細はTest the modelのセクションを参照して ください。 主キーに使用するIDは二通りの方法で生成することが出来ます: JHeadstart Developer’s Guide JHeadstart Application Generator 3-13 データベースのトリガーがシーケンスより値を取得し、主キーの値を生成す る ビジネス・コンポーネントにおいて、生成メソッドを使用する 次のセクションで、両方のケースについて解説します。 Surrogate Primary Key populated in the database データベース側で主キーの値を生成するため、この場合Javaコードは必要ありません。 ただし、Business Components Modelはデータベースに値が追加された後でリフレッシ ュする必要があります。 1. Set the type of the attribute to ‘DBSequence’. ADF BC will now derive an artificial key until the row is posted to the database.属性の型を`DBSequence’に 設定します。 Surrogate primary key populated in the Business Components Model layer エンティティ・オブジェクトの生成時に、データベースのシーケンスから主キー用の値 を取得するcreateメソッドが追加されます。 詳細はJDeveloperヘルプの`Populating an Attribute from a Database Sequence’を参照し てください。 Suggestion:全ての主キー属性が同じ名前(例:ID)を持っている場合は、シ ーケンスから値を取得するメソッドはBCベース・クラスで実装することがで きます。これにより、各エンティティ・オブジェクトにcreateメソッドを実装 する必要がなくなります。EOベース・クラスでは、全てのエンティティ・オ ブジェクトで使用されるシーケンスから値を取得します。あるいは、エンテ ィティ・オブジェクトの名前によって値を取得するシーケンスを変更すると いった、より洗練されたメカニズムを実装するのもいいでしょう。 3-14 JHeadstart Application Generator JHeadstart Developer’s Guide Using CDM Ruleframe CDMルールフレームを使用しない場合は、このセクションをスキップしてください。 ビジネス・ロジック・レイヤの実装にCDMルールフレームを使用する場合は、ADF BC アプリケーション・モジュールを拡張する特殊なクラスが必要になります。このクラス はJAGが実行され、JAGによってJHeadstartランタイム・ライブラリが追加されるまで はModelプロジェクトに追加されません。 ADF BC アプリケーション・モジュールでCDMルールフレームを使用するための手順 は以下の通りです: 1. アプリケーション・モジュールを右クリックし、「編集」を選択します。 2. 「Java」ノードに行き、「クラスの拡張」ボタンをクリックします。 JhsApplicationModuleImplをRuleFrameApplicationModuleImplに変更する か、「参照」ボタンをクリック後、oracle.jheadstart.model.adfbc下の RuleFrameApplicationModuleImplを選択し、「OK」をクリックしてくださ い。 3. 再度「OK」をクリックし、さらに「OK」をクリックしてアプリケーション・ モジュール・ウィザードを終了します。その後、変更を保存してください。 Test the model JHeadstartでの生成を開始する前に、Modelの確認をすべきです。ビュー・オブジェク トからデータの問い合わせや作成、更新、削除ができることを確認してください。 モデルのテストには、Business Components Testerを使用してください。アプリケーシ ョン・モジュールを右クリックし、「テスト」を選択します。データベースの接続を選 び、「接続」ボタンをクリックするとOracle Business Component Browserが開きま す。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-15 左側にはアプリケーション・モジュールのデータ・モデルが表示されています。ビュ ー・オブジェクトをダブルクリックすると右側にブラウザが開き、レコードの閲覧や更 新、作成、削除ができます。 より詳細な説明はJDeveloperヘルプの‘Testing with the ADF Business Components Browser’にあります。 Suggestion:このテスターはビジネス・コンポーネントが正しく設定されてい るかを確認するのに非常に便利です。複数レイヤのアプリケーションを構築 する場合は問題の切り分けが困難なことが多いため、このようなアプリケー ションを使用することは大きな手助けになります。また、ビジネス・コンポ ーネントにビジネス・ルールが正しく反映されているかを確認するのにも便 利です。 3-16 JHeadstart Application Generator JHeadstart Developer’s Guide Using the JHeadstart Addins 本章では、JAGの使用方法やコンポーネントについて解説します。また、JHeadstartア プリケーション・ストラクチャ・ファイルエディタや他のアドインについても学ぶこと ができます。 Enabling JHeadstart Wizard JDeveloperが提供するテクノロジの一部は、プロジェクト内に特定のファイルや設定を 前提としている物があります。開発の進捗を促進するために、通常JDeveloperはこのよ うなファイルを自動的に(おそらくはユーザーが気づかないうちに)生成してくれま す。例えば、プロジェクトで最初にUIXページを作成すると、JDeveloperは自動的に web.xmlの設定を行い、uix-config.xmlファイルを作成し、HTMLルートディレクトリの 下に`cabo’というディレクトリを作り、画像やjavascriptライブラリなどを追加してくれ ます。 同様に、JHeadstartも特定のファイルや設定を必要とします。プロジェクトで JHeadstartアドインを使用する前に、まずJHeadstartを「使用可能な」状態にする必要 があります。通常はStrutsページ・フロー・ダイアグラムやJSP/UIXページを含む ViewControllerに対してのみ必要な手順ですが、これを行うことによりJHeadstartアプ リケーションに必要なファイルや設定が追加されます。 Enabling JHeadstart on a new project JHeadstartを使用可能にする手順は簡単です。プロジェクトを右クリックし、`Enable JHeadstart on this Project’を選択してください。 Attention: この時点では、`New JHeadstart Application Structure Fiile’のオ プションが使用不可である点に注意してください。このオプションは、プロ JHeadstart Developer’s Guide JHeadstart Application Generator 3-17 ジェクトに対しJHeadstartが使用可能になると選択することができます。 `Enable JHeadstart’ウィザードは値の入力は一切必要としません。「次へ」と「終了」 をクリックするのみで、ファイルや設定の追加が完了します。更新内容は、下記のダイ アログに表示されます。 Enabling JHeadstart on an existing proj ect 上のスクリーンショットは、新規プロジェクトに対しJHeadstartが使用可能を使用可能 にしたケースです。しかし、このウィザードは既存のプロジェクトに対しても実行でき ます。このウィザードは、JDeveloperと違い勝手にファイルや設定の上書きを行わない ためです。既に存在するファイルを作成しようとした場合などは、以下のいずれかの反 応を示します。 1. ファイルをバックアップする バックアップは、必須ファイル(web.xmlやuix-config.xml等)に対してのみ行 われます。これらのファイルに対し手動で変更を行っていた場合は、新たに生 成されたファイルにも同様の変更を加える必要があるので注意してください。 2. ファイルを生成せず、現在のバージョンをそのまま使用する index.htmlやlog4j.propertiesなど、重要度の低いファイルの場合です。 3. 3-18 JHeadstart Application Generator ユーザーの判断を求める JHeadstart Developer’s Guide 上記の2パターンにあてはまらないファイル、例えばタグライブラリや JHeadstartようファイル等は全てこのようにユーザーの判断を求められます。 このようなファイルを手動で変更することは極めて稀であるため、通常は全て 上書きしてしまって問題ありません。 Re-enabling JHeadstart on a project JHeadstartを使用可能にするためのウィザードは、このウィザードを実行済みのプロジ ェクトに対して再度実行することも可能です。これは、例えばJHeadstartのバージョン が上がり、最新のランタイムを使用するよう更新したい場合や、変更を加えたファイル をオリジナルの状態に戻したい場合などに便利です。 ウィザードを再実行するには、プロジェクトを右クリックし` Re-enable JHeadstart on this Project’を選択してください。 Attention:上図の様にJHeadstartが使用可能となっているプロジェクトを右ク リックすると、`New JHeadstart Application Structure File’及び`Re-enable JHeadstart on this Project’が選択できるようになります。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-19 Create New Application Structure File Wizard JHeadstartが使用可能になったら、次はJHeadstartアプリケーション・ストラクチャ・ ファイルを作成します。この操作により、JHeadstartはADF BC Modelが変更されま す。 JHeadstartは、各ビュー・リンクに対し”∼ViewLookup”という名称のルックアップを 生成します。この動作はアプリケーション・モジュールの編集画面で確認できます。 これは、ルックアップは独自にデータセットを保持する必要があるためです。例えば、 従業員データをメンテナンスするページと、従業員を選択する値リストを持つページが 別々に存在する場合などは、同じビュー・オブジェクトに対応する二つのインスタンス が必要になります。一つのインスタンスがメンテナンス用ページのデータセットを保持 し、もう一つのインスタンスが値リスト用のデータセットを保持します。 Using the Application Structure File Editor Application Structure File アプリケーション・ストラクチャ・ファイルは、アプリケーションで使用するページ及 びその関係性、レイアウトスタイル、データソースなど、アプリケーションの構造を定 義します。アプリケーションの各グループは、タブ付きのページとして生成されます。 一つのアプリケーション・ストラクチャ・ファイルは、一つのサービスだけを含むこと が出来ます。複数のサービスが必要な場合は、それに対応する数のアプリケーション・ ストラクチャ・ファイルを作成してください。 Maintaining the Application Structure File JHeadstart アプリケーション・ストラクチャ・ファイル・エディタはXMLを直接編集 することなくアプリケーション・ストラクチャ・ファイルのメンテナンスを行うことを 可能にします。各プロパティに任意の値を入力するだけで、XMLが更新されます。 Reference:アプリケーション・ストラクチャ・ファイルの作成とサービスの 定義方法はChapter 2 Getting Startedを参照してください。本セクションで は、グループの作成・更新・削除についてのみ説明します。 Starting the Application S tructure File editor エディタを使用するには、アプリケーション・ストラクチャ・ファイルが作成済みであ ることが必要です。アプリケーション・ストラクチャ・ファイルを右クリックし、`Edit Application Structure File’を選択してください。 3-20 JHeadstart Application Generator JHeadstart Developer’s Guide Using the help in the Application S tructure File editor アプリケーション・ストラクチャ・ファイル・エディタのヘルプには、各サービスやグ ループ、ルックアップ等で使用される全てのプロパティに関する説明が含まれていま す。プロパティの設定を行うときの参考にしてください。 アプリケーション・ストラクチャ・ファイル・エディタを開くと、右側にプロパティが 一覧表示されます。プロパティ一覧の下にはヘルプメッセージが表示される小さなエリ アがあります(下のスクリーンショットではエリアを拡大してあります)。プロパティ をクリックすると、そのプロパティの説明が表示されます。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-21 ヘルプメッセージ表示エリアは小さく感じるかもしれませんが、マウスで大きさを調節 することができます。 Service サービスは、アプリケーションの重要なサブセットです。サービスには、ユーザーが論 理的に関係するタスクを実現するための機能が含まれます。この機能全体は、タブバー からアクセスすることのできるページとしてユーザーに表示されます。 A part of a service definition seen through the Application Structure File Editor And the generated tab bar: Attention:アプリケーションをサービス単位で分割する場合の制限に注意し てください。 1. 1つのサービスは、一つのADF BC アプリケーション・モジュールに のみ関連づけることが出来ます。ただし、1つのADF BC アプリケー ション・モジュールは、複数のサービスで共有することが出来ます。 2. JDeveloperは各プロジェクトに対しStrutsページ・フロー・ダイアグ ラムを1つだけしか持つことができません。ただし、グループ名が重 複してない場合に限り、一つのStruts Configファイルから複数のサー ビスを生成することができます。プロジェクトを複数に分割し、各プ ロジェクトに独自のStruts Configファイルを用意するのも一つの選択 肢です。 Reference: Oracle Technetに複数のStruts Configurationを設定する方法が紹 介されています。‘How To Use Multiple Struts Configurations With JDeveloper 10g’ の項を参照してください。 http://www.oracle.com/technology/products/jdev/howtos/10g/StrutsMul tiConfigs/struts_multiconfig_howto.html Group サービスは、1つ以上のグループから成ります。グループはユーザーがADFビュー・オ ブジェクトを検索・更新することを可能にします。グループは、選択したレイアウト・ オプションにより単一または複数のページに表示されます。 グループは、ビュー・オブジェクトの親子関係に対応して階層構造を取ることができま す。 3-22 JHeadstart Application Generator JHeadstart Developer’s Guide Oracle Designerで作成されたフォーム・モジュールに例えると、まずファースト・レベ ルのモジュール・コンポーネント毎にグループを作成し、その後ディテール用のモジュ ール・コンポーネントにはネストされたグループを作成します。 Creating a new Group 新規のベース・グループを作成するには、アプリケーション・ストラクチャ・ファイ ル・エディタでサービスを右クリックし、`Add Base Group’を選択します。新規に作成 されたベース・グループのプロパティの一部はデフォルト値がセットされます。 既存のグループに類似したグループを作成したい場合は、グループをコピーします。コ ピーしたいグループにカーソルを合わせた後、右クリックし`Copy’を選択してくださ い。作成するグループをベース・グループにする場合は、サービスにカーソルを合わ せ、右クリックし`Paste’を選択します。 グループの順序を入れ替えたい場合は、対象のグループを右クリックし`Move Up’また は`Move Down’を選択してください。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-23 Attention: グループの順序は、生成されるタブの順番に影響します。 上記の手順で作成するグループが他のグループのディテールとなる場合は、親となるグ ループにカーソルを合わせてから右クリックメニューの`Paste’を選択します。 Using the clipboard to copy and paste multiple properties グループ間でプロパティをコピーすることもできます。コピー元のグループにてコピー するプロパティを全て選択し、上部にある‘Copy currently selected properties to clipboard’のボタンをクリックしてください。 次に、コピー先のグループにカーソルを合わせ、‘ Paste properties from clipboard to currently selected node(s)’ボタンをクリックします。 ベース・グループにディテール・グループを追加するには、ベース・グループにカーソ ルを合わせ、右クリックメニューから`Add Detail Group’を選択します。 3-24 JHeadstart Application Generator JHeadstart Developer’s Guide 下図のように、newGroupという名称のディテール・グループが作成されます。 このグループに対しても、他のグループからプロパティをコピーすることができます。 Nested Groups グループは、マスター・ディテール(親子)の関係を持たせるためにネストすることが できます。 アプリケーション・ストラクチャ・ファイル・エディタでは、下図のようになります: JHeadstart Developer’s Guide JHeadstart Application Generator 3-25 選択するレイアウト・オプションによって、マスターグループとディテールを同一ペー ジに表示することも、別々のページに表示することもできます。 Attention: JHeadstartではネストする階層の深さに制限はありませんが、同 一ページに表示することができるのは2段階までとなります。 Lookup ルックアップとは、ベース・ビュー・オブジェクトから他のビュー・オブジェクトへの リレーションです。値リストやドロップダウンリストを使用する場合に必要となりま す。 Example The EMPLOYEES table has two foreign keys. When adding an EMPLOYEE, you need to choose the department and the job. So you need two lookups, one for DEPARTMENTS and one for JOBS. 従業員(EMPLOYEE)を新規に登録する際は、部門(DEPARTMENT)と職種(JOB) を選択する必要があります。この時、従業員と部門、2つのルックアップが必要になり ます。 アプリケーション・ストラクチャ・ファイル・エディタでは、下図のようになります: Regions リージョンはグループのサブセットで、ページ内でグループ・アイテムを複数に分ける ことができます。1つのグループを構成するリージョン数に制限はありません。 3-26 JHeadstart Application Generator JHeadstart Developer’s Guide Creating a new Lookup or Region ルックアップ及びリージョンはJHeadstartアプリケーション・ストラクチャ・ファイ ル・エディタで作成することができます。ベース・グループにカーソルをあわせ、右ク リックメニューから`Add Lookup’または`Add Region’を選択します。その後、デフォ ルト・プロパティを変更してください。 他のルックアップやリージョンをコピーして作成することもできます。また、ルックア ップ間やリージョン間でのプロパティのコピーも可能です。 ルックアップを使用する場合の手順については、Generation of Lookupsのセクションを 参照してください。 Deleting a Group, Lookup or Region エディタを使えば、グループやルックアップ、リージョンの削除も簡単に行えます。右 クリックメニューから`Cut’を選択してください。 Using the ADF Business Components Editor JHeadstart ADF BC プロパティ・エディタを使用することで、エンティティ・オブジェ クト及びビュー・オブジェクトのプロパティを設定することができます。 JHeadstart ADF BC プロパティ・エディタを起動する方法は以下の2つです: JHeadstart Developer’s Guide JHeadstart Application Generator 3-27 1. 編集するエンティティ・オブジェクトまたはビュー・オブジェクトを右クリッ クし、`JHeadstart ADF BC Property Editor’を選択します。 2. JHeadstart アプリケーション・ストラクチャ・ファイル・エディタで対象のグ ループにカーソルをあわせ、ADF BC プロパティ・エディタ起動ボタン(下 図)をクリックします。 エディタが起動すると、プロパティを設定する属性を選択することができ、選択すると 右側に全てのプロパティが表示されます。 エディタの右下には4つのタブがあります。タブをクリックすることで、ビジネス・コ ンポーネントの標準プロパティを閲覧・更新が可能になります。また、ビュー・オブジ ェクトを編集している場合は、ベースとなるエンティティ・オブジェクトの属性を参照 することができます。 Using the help in the JHeadstart ADF BC Properties editor JHeadstart ADF BC プロパティ・エディタのヘルプには属性に設定できるプロパティが 全て解説されていますので、参考にしてください。 JHeadstart ADF BC プロパティ・エディタを開くと、右側のプロパティ一覧の下にヘル プメッセージが表示されるエリアがあります。プロパティをクリックすると、そのプロ パティの説明がここに表示されます。 ヘルプ・メッセージ表示エリアはマウスで大きさを調整することができます。 3-28 JHeadstart Application Generator JHeadstart Developer’s Guide Using the clipboard to copy and paste multiple properties アプリケーション・ストラクチャ・ファイル・エディタ同様、プロパティのコピーがで きます。複数の属性に同じ変更を加える際に便利です。 Using multi-select for changing multiple attributes 多くの場合、複数の属性を同時に編集する必要があります。例えば、いくつかの属性に 対し`Display in Tables?’をfalseに設定する場合などです。 Running the JHeadstart Application Generator グループ定義が完了したら、アプリケーションの生成を行います。 JHeadstart Application Generatorを実行するには、以下の手順に従ってください: JHeadstart Developer’s Guide 1. プロジェクトの`JHeadstart Design Files’カテゴリ下のアプリケーション・スト ラクチャ・ファイルにカーソルを合わせます。 2. マウスを右クリックし、`Run JHeadstart Application Generator’を選択します。 JHeadstart Application Generator 3-29 ジェネレータ実行中は、生成物の情報がJAGログウィンドウに表示されます。 ジェネレータによって無視された設定があった場合は、Warningsが表示されま す。また、生成を中断する必要が無い程度の問題が発生した場合はRuntime Warningsが、重大な問題が発生した倍はErrorsが表示されます。 3. JHeadstart Application Generatorが正常に完了したら、アプリケーションを実 行し、テストすることができます。 Reference: Chapter 2 Getting Startedの‘Running the Application’ に、アプリ ケーションの実行方法が解説されています。 3-30 JHeadstart Application Generator JHeadstart Developer’s Guide Page Layout Generation 本セクションでは、JHeadstartが生成することのできる以下のレイアウトスタイルにつ いて説明します。 1. Creating Form Pages 2. Creating Select-Form Pages 3. Creating Table Pages 4. Creating Table-Form Pages 5. Creating Tree Layouts 6. Creating Shuttle Layouts Creating Form Pages Formページでは、1レコードずつ操作を加えることができます。これは、レコードが多 くの属性を持っており、かつそれらを全て表示したい場合などに使われます。 Formページを生成するには、アプリケーション・ストラクチャ・ファイルのグループ 定義に以下の変更を加えます: 1. Layout Styleを‘form’にします。 2. Form Widthに、フォームの横幅を%単位で入力します。この値を100%にする と、アイテムはページの幅いっぱいに配置されます。ただし、アイテムは整列 されるわけでは無いので注意してください。 アイテムを左に寄せたい場合は、値を極めて小さい値にしてください。実行時 に最低限必要な幅が自動的に確保され、左寄せで表示されます。デフォルト値 の10のままであれば、左寄せになります。 3. columnsに列数を入力してください。デフォルトは1で、全アイテムが1列に納 められます。 以下はFormページの例です: この例ではcolumnsプロパティに2が設定されています。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-31 Attention: 生成されたページにおける属性の表示順序は、ビュー・オブジェ クトの属性の順序となります。詳細はDetermine the Display Sequence of Attributes within a Rowを参照してください。 Hide Attributes on the Form Page Display?プロパティを設定することで、どの属性を表示するかを決定できます。 このプロパティは、以下の3つの値のいずれかを設定できます。 1. True:生成されたページに属性を表示します 2. False:生成されたページに属性を表示しません 3. Hidden:隠されたフィールドとして生成されます JHeadstartの以前のリリースと比較すると、ADFではViewレイヤとModelレイヤが完全 に分かれているため、隠されたフィールドを生成する意味は薄くなっています。そのた め、表示したくない属性についてはDisplayの値をfalseに設定してください。表示しな くても、その属性の値はModelレイヤに保持されています。 Attention: BCプロパティ・エディタのヘルプでより詳細な情報を参照するこ とができます。 Using regions デフォルトでは、JHeadstartはビュー・オブジェクトで定義された順番に属性を表示し ます。 しかし、ビュー・オブジェクト内でお互いに関連する属性同士をまとめて表示したいケ ースは珍しくありません。 このような場合は、リージョンを定義します。 1. 3-32 JHeadstart Application Generator グループ内にリージョンを追加します。Creating a new Lookup or Regionを参 照してください。 JHeadstart Developer’s Guide 2. 属性を所属するリージョン内に配置します。 Attention: リージョンを使用できるのは一行ずつ表示するページ、すなわち 以下のレイアウトスタイルのページの場合のみです: form, table form, select-form, tree-form リージョンを使用した例です。グループのcolumnsプロパティの値は2、リージョンの columnsプロパティの値は1に設定されています。 Creating S elect-Form Pages Select-Formページは、以下を含むページです: レコードを選択するためのリストボックスを含む選択用ページ レコードを追加・更新するためのページ JHeadstart Developer’s Guide JHeadstart Application Generator 3-33 上記の例では、Editボタンをクリックするとformページが表示されます。表示される formページは、前項の例に似たページとなります。 Select-Formページは、レコード数が比較的少ない場合に使用してください。 Select-Formページを生成制するには、アプリケーション・ストラクチャ・ファイルのグ ループ定義に以下を変更を加えます Example 1. Layout S tyleの値を‘select-form’に設定します。 2. Selectページにて表示する属性を決定します。Selectページは、デフォルト・ビ ュー・オブジェクトの属性の内1つをリストボックス形式で表示します。このペ ージで表示される属性を決定するのはDescriptor Attributeの値です。 複数の属性を表示する場合は、新たな属性を作成する必要があります。この場 合の手順についてはCreate Calculated or Transient Attributes を参照してくだ さい。 3. 前項‘Creating Form Pages’ に従い、Formページのプロパティを設定してくださ い。単独のFormページで設定可能な内容と、Select-FormページのFormページ で設定可能な内容は同じです。 4. Use table range?の値をfalseに設定してください。この設定を行わないと、リス トボックスには1行目のレコードしか表示されません。 ‘Application Structure File with select-form layout in Group Definition’ この例では、Countriesページがselect-form レイアウトで表示されます。 Creating Table Pages 以下のような場合は、1ページに複数のレコードを表示する必要があるでしょう: 全ての国を表示するページ 従業員一覧を表示するページ このようなページを生成する方法はいくつかあります: 1. 3-34 JHeadstart Application Generator Tableページを使用します。Tableページでは、レコードはテーブル形式で作成 されるため、属性の数が少ない場合に使用します。 JHeadstart Developer’s Guide 2. ディテール・ディスクロージャ付きのTableページを使用します。これは、属性 の数が多く一行に収まらない場合に使用します。Show attributes not displayed in the table (UIX only)を参照してください。 3. Table-Form Pageを使用します。これは、複数レコードを表示するためのTable レイアウトと、1レコードを操作するためのFormレイアウトの組み合わせで、 属性の数が非常に多いページに使用します。レコードのデータを操作する場合 は、TableページからFormページに遷移します。詳細はCreating Table-Form Pagesを参照してください。 Table Pageを生成するには、アプリケーション・ストラクチャ・ファイルにて以下の変 更を行います: 1. LayoutS tyleプロパティを`table.’に設定します。 2. Table Widthプロパティに、ページに対するテーブルの幅を設定してくださ い。(例:60%)また、ピクセルで設定することも可能です(例:600)。 Example ‘Application Structure File with table layout in Group Definition’ この例では、CountriesページがTableレイアウトで表示されるようアプリケーション・ ストラクチャ・ファイルを設定します。 生成されるページは以下の様になります: Attention: 表示されるレコードの順序はビュー・オブジェクトのOrder By句 で設定されます。Determine the Order of Displayed Rowsを参照してくださ い。 Hide Attributes in a table Display in Tables? プロパティを設定することで、テーブルで表示される属性を決定す ることができます。設定可能な値、及び効果はDisplay ?プロパティと同様になりま す。 例えば、Tableページでは表示せず、Formページでのみ表示する属性がある場合は Display in Tables?の値をfalseに設定します。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-35 Allowing the user to sort data in a table page 問い合わせ結果をテーブルでソートする機能を追加することも可能です。ユーザーは列 のヘッダーをクリックすれば、その列で昇順/降順ソートを行うことができます。 この機能を実装するには、グループ定義のsortableプロパティをtrueに設定します。こ れにより、ビュー・オブジェクトの全ての問合せ可能な属性に対しソート機能が付加さ れます。 各ビュー・オブジェクトを確認し、ソート可能にしてはいけないと思われる属性が無い か確認してください。尚、エンティティ・オブジェクト及びビュー・オブジェクトを作 成すると、このプロパティはデフォルトでセットされます。 問合せ可能な属性を変更するには、以下の手順に従ってください: 1. ビュー・オブジェクトを編集し、属性を選択します。 2. 「ビュー属性」タブで、「問合せ可能」にチェックを入れます(もしくは外し ます)。 Limiting the number of records on a table page デフォルトでは、Table及びTable-Formレイアウトは存在する全てのレコードを表示し ます。レコードが多い場合は、一度に表示されるレコードの数を制限し、ポップリスト 及び「前へ」「次のxx行へ」リンクで目的のデータを検索するシステムを生成すること ができます。 3-36 1. アプリケーション・ストラクチャ・ファイル・エディタで、グループのUse Table Range?プロパティをtrueにします。 2. Table range sizeに一度に表示したい行数を入力します。 JHeadstart Application Generator JHeadstart Developer’s Guide この例ではuseTableRangeプロパティをtrueに、tableRangeSizeプロパティを6に設定 します。他のレコードへと遷移するためのポップリストとリンクが生成されているのが 確認できます。 Change related ADF Business Components Settings デフォルトでは、ADF BC ビュー・オブジェクトはデータベースから1行ずつデータを 取得します。 一度に複数行を取得したい場合は、この挙動はパフォーマンスに悪影響を与えかねませ ん。よって、ビュー・オブジェクトに以下の変更を追加することを推奨します。 JHeadstart Developer’s Guide 1. When Use Table Range? がtrueの場合は、`All Rows in Batches’の値をTable Range Sizeの値よりも1だけ大きくします。 2. レイアウトスタイルがTableまたはTable-formで、かつUse Table Range? が falseの場合は、ビュー・オブジェクトの設定を`All at once’にします。これは、 JHeadstart Application Generator 3-37 全ての行が表示されるためです。 Reference: ADF BCのチューニングで行うべきことは非常に数多くありま す。本セクションではJHeadstartプロパティに関連するものしか取り上げて ませんので、より詳細な情報についてはOracle Technetを参照してくださ い。 http://www.oracle.com/technology/products/jdev/tips/muench/voperftip s/index.html Show attributes not displayed in the table (UIX only) テーブルに全ての属性を表示しない場合、ユーザーが表示されていない属性を参照する ための機能が必要となるかもしれません。(尚、属性を表示する/しないはDisplay in tablesプロパティの値で決定されます)この場合は、グループのDetail Disclosureプロ パティをtrueに設定することで、非表示の属性を表示するための矢印を含む列が生成さ れます。このディテールセクションではDisplay in Tables?プロパティがfalseで、かつ Display?プロパティがtrueの属性を表示します。 この例では、EmployeesグループのDetail Disclosureプロパティがtrueに設定されてい ます。3行目のディテールが表示されている点に注意してください。ディテールセクシ ョンは、グループのcolumnsプロパティの設定に従って2列に表示されています。 3-38 JHeadstart Application Generator JHeadstart Developer’s Guide Creating Table-Form Pages Table-Formページは、TableフォーマットのページとFormページと呼ばれる単一行表示 用のページの組み合わせです。Tableページでは行の参照と更新が可能です。Tableペー ジでディテール表示用のボタンをクリックすると、選択した行が開かれ、更新や新規作 成ができます。 Attention: Table-FormページのTable部分についてはTableページと同様のプ ロパティが、Form部分についてはFormページと同様のプロパティが使用で きます。それぞれTableページとFormページについてのセクションを参照し てください。 Table-Formページ作成の手順は以下となります: 1. Layout Styleプロパティの値を‘table-form’に設定します。 2. 全く表示しない属性のDisplay?プロパティをfalseに設定します。 3. Tableページで表示する属性のDisplay in Tables?プロパティをtrueに設定しま す。 4. Formページで表示する属性のDisplay in Tables?プロパティをfalseに設定しま す。 5. Formページをボタンで呼び出すか、リンクで呼び出すかを決定し、Table-Form linkプロパティの値を設定します。アプリケーション・ストラクチャ・ファイ ル・エディタのヘルプを参照してください。 5でリンクを選択した場合、このようになります: Suggestion: リンクはdescriptor attributeに生成されます。そのため、 descriptorを一意キーに設定し、かつビュー・オブジェクトの最初の属性に設 定すると良いでしょう。 ボタンの場合は、以下のようになります: JHeadstart Developer’s Guide JHeadstart Application Generator 3-39 Creating Master-Detail Pages Master-Detailページを作成するには、以下の手順に従ってください: 1. アプリケーション・モジュールのデータモデルを確認します。マスター・ディ テールの関係は、ネストされたビュー・インスタンスとして表示されているは ずです。 Reference: Prepare Model for Generationのセクションも参照してください。 2. 3-40 JHeadstart Application Generator アプリケーション・ストラクチャ・ファイルで、マスターとなるページ用のグ ループと、ディテールとなるページ用のディテール・グループを作成します。 ディテール・グループとして選択できるのは、マスターとなるビュー・オブジ ェクトのディテール・ビュー・オブジェクトのみである点に注意してくださ JHeadstart Developer’s Guide い。ディテール・グループにビュー・オブジェクトが表示されない場合は、デ ータモデルを再度確認してください。 Master-detail on separate page Example 1. ディテール・グループのsamePageプロパティをfalseに設定します。これによ り、ディテールが別ページに表示されるようになります。 2. 親グループのタブ名をtabNameプロパティに入力します。 3. ヘッダ・バーに表示されるタイトルをdisplayTitleプロパティに表示します。 ‘Application Structure File Editor with master-detail on separate pages’ 下の例では、RegionグループとCountryグループが別ページに表示されるよう設定され ています。 Regionsタブに二つのサブページが生成されています。サブページのタイトルは displayTitleプロパティで決定されます。 国の一覧は二番目のページに表示されています。テーブルの上にRegionが表示されてい る点に注目してください。 Creating master-detail on same page マスターとディテールを同一ページに表示する手順は、以下の通りです: 1. 子となるグループのsamePageプロパティをtrueに設定します。 2. 子となるグループのヘッダ表示内容をディテール・グループのdisplayTitleプロ パティに入力します。 Warning: JHeadstartのデフォルトの設定では、同一ページに表示可能な子グ ループの数は10です。この値を変更するには、名前の末尾に`PC’が付く JHeadstart Generatorテンプレートを編集する必要があります。詳細は'Using Generator Templates'のセクションを参照してください。 Example JHeadstart Developer’s Guide ‘Application Structure File Editor with master-detail on same pages’: JHeadstart Application Generator 3-41 この例ではRegionとCountryがMaster-Detailレイアウトの形で同一ページに表示されて います。ディテールの上にあるヘッダはDisplay Titleプロパティで設定された値になり ます。 Creating Tree Layouts When your view type is UIX, you can use JHeadstart to generate tree controls. A tree control is extremely useful for showing hierarchical structures in your datamodel. ビューにUIXを使用するのであれば、JHeadstartでツリーを生成することあできます。 ツリーはデータモデルの階層構造を表示するのに非常に便利です。 例: 地域別に分類された地理上のエリア 部品表(Bill of Material) 組織図 このセクションでは、JHeadstartでツリーを生成する方法について解説します。 Generating a Basic Tree Most of the tree controls you will generate will be of the basic category. There are a few variations that will be explained in later sections: ツリーを生成する殆どの場合、最も基本的なツリーで事足りるでしょう。以下のような ツリーのバリエーションについては、後ろのセクションで解説します。 Variation: Basic Tree with navigation-only nodes Variation: Recursive Tree Variation: Recursive Tree with Limited Set of Root Nodes 3-42 JHeadstart Application Generator JHeadstart Developer’s Guide Variation: Tree showing only Children of selected Parent まずは、基本的なツリーの作成方法から始めて下さい。 HRサンプルスキーマでは、下図のように地理情報が階層構造になっています。 So this is our database diagram: REGIONS、COUNTRIES、そしてLOCATIONSを含むツリーを作成します。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-43 手順: 3-44 1. ツリーの各階層に対応するビュー・オブジェクトが存在することを確認して下さ い。また、ビュー・オブジェクト同士を結ぶビュー・リンクも必要です。この例で は、REGIONS、COUNTRIES、そしてLOCATIONSに対応する3つのビュー・オブ ジェクトと、これらを結ぶ2つの外部キーに対応するビュー・リンクが必要となりま す。アプリケーション・モジュールの使用可能なビューが下図のようになっている か確認してください。 2. 使用可能なビューから、データ・モデルにビュー・オブジェクトを組み込みます。 CountriesViewをRegionsViewの子に、そしてLocationsViewをCountriesViewの子 に設定します。子となるビューを選択する場合は、左側の画面でもインデントされ ている子のビューを選択する必要があるので注意して下さい。最終的には下図のよ うになります: 3. ツリーのノードのためにビュー・オブジェクトが別に必要となります。これらのビ ュー・オブジェクトは、データ・モデル内では子ではなく最上位の階層のビュー・ オブジェクトとして設定する必要がある点に注意して下さい。(下図参照) JHeadstart Application Generator JHeadstart Developer’s Guide 4. アプリケーション・ストラクチャ・ファイルにツリーに対応するグループが存在す ることを確認してください。下図のようになっていれば問題ありません: 5. Regionsグループ、及びそのディテール・グループのLayout Styleプロパティを'treeform'に設定します。このレイアウト・スタイルについては次のセクションで詳しく 解説します。 6. ツリーに使用するグループについて、以下の設定が必要になります: View Object Usageプロパティには、formレイアウトでデータの参照・更新を行う ためのビューを設定します。通常、最上位階層にある独立したビュー・オブジェク トを使用します。 Tree View Obj ect Usageプロパティはツリーの階層構造を表示するのに使用され、 ここでは子のグループを指定する必要があります。 New Application Structure Fileウィザードを使用した場合は、Tree View Obj ect Usageの値に生成されたView Obj ect Usageプロパティの値を入力し てください。次に、View Obj ect Usageプロパティに、そのビュー・オブジ ェクトのツリー用ビューを入力してください。(例:RegionsViewTreeSelect, CountriesViewTreeSelect) JHeadstart Developer’s Guide JHeadstart Application Generator 3-45 Attention: ツリー用に独立したビュー・オブジェクトを使用する理由は、他 でも使われているビュー・オブジェクトを指定するとツリーが正しく動作し ない可能性があるためです。 7. 3-46 各グループのDescriptor Attribute を設定し、ツリーで表示される属性を決定して 下さい。(例えば、RegionIdではなくRegionNameを表示する、等)この時、いく つかの属性を組み合わせた新規の属性を作成して使用することもできます。詳細は Creating a Logical View Descriptorを参照して下さい。 JHeadstart Application Generator JHeadstart Developer’s Guide 8. Formレイアウトのプロパティを必要に応じて変更し、JAGを実行してください。完 成されたアプリケーションは以下のようになります: ツリー・コントロールを使用し、階層構造をドリルダウンすることができます。 全ての階層において、レコードの編集が可能です。JHeadstartは、REGIONS、 COUNTRIES、及びLOCATIONSのメンテナンスページを生成しています。目的のメン テナンスページに遷移するには、ツリーのリンクをクリックします。 Variation: Basic Tree with navigation-only nodes もし、ツリーの特定の階層において編集機能がいらない場合(例えばREGIONと COUNTRYはLOCATIONへのドリルダウン機能のみ実装したい、等)は、Layout Style プロパティを`tree’に設定します。これにより、メンテナンス用のページは生成されなく なります。 既にツリーを生成済みの場合は、以下の手順を実行してください。 RegionsグループとCountries2グループのLayout S tyleプロパティを'tree'に変 更します。 Attention: このレイアウト・スタイルではView Obj ect Usageプロパティの 値は使用されません。この階層は編集不可になるためです。 再度アプリケーションを生成します。下図のようになるはずです: JHeadstart Developer’s Guide JHeadstart Application Generator 3-47 REGIONSの階層とCOUNTRIESの階層はリンクが表示されていない点に注目してくだ さい。 Variation: Recursive Tree 「自分自身を参照する外部キー」を持つテーブルがあった場合は、若干の変更が必要に なります。 例えば、従業員には上司がいますが、上司もまた従業員であるため、従業員から上司へ の外部キーはデータ・モデルではEMPLOYEESからEMPLOYEESへの外部キーとなりま す。 このような場合の手順は以下となります: 3-48 1. 自己参照型の外部キーをADFビジネス・コンポーネントの中でビュー・リンク として作成する必要があります。`New Business Components from Tables’ ウ ィザードを使用すれば、簡単に作成すること亜できます。 2. アプリケーション・モジュールのデータ・モデルは、階層が1段階さえあれば、 いくらでも深い階層を持つツリーを作成することができます。例えば、自己参 照を無数に持つ従業員表も、以下のようなデータ・モデルで事足ります: JHeadstart Application Generator JHeadstart Developer’s Guide 3. このような1階層のデータ・モデルではTreeSelect用のビューを作成しなくても 問題はありませんが、作成するように習慣づけることが望ましく、またツリー を拡張する必要が出てきた場合に役立ちます。 4. アプリケーション・ストラクチャ・ファイルでは自己参照を行っているビュ ー・オブジェクトに対応するグループが1つだけ必要になります。 5. Layout Styleプロパティの値を'tree-form'に変更します。 6. Change the Tree View Obj ect UsageにView Object Usageプロパティの値を入 力し、View Obj ect Usage プロパティの値にTreeSelect用のビューを入力しま す。 (例:EmployeesViewTreeSelect). 7. Descriptor Attributeを設定します。 8. Formレイアウトのプロパティを設定したら、JAGを再実行してください。 下図のようになります: ツリーは無制限に展開することができます。 Variation: Recursive Tree with Limited Set of Root Nodes 上図では従業員Andeが2カ所で表示されています。デフォルトでは、全ての従業員が最 上位の階層に登場しますが、これが望ましくない場合もあるでしょう。この例では、上 司がいない従業員を最上位の階層に、そして直属の部下を次の階層に…というのが理想 JHeadstart Developer’s Guide JHeadstart Application Generator 3-49 的です。これはデフォルト以外のビュー・オブジェクトを追加することで実現できま す。 以下の手順は、'Variation: Recursive Tree'のセクションの手順に従い、ツリーが生成済 みであることを前提とします。 ビジネス・コンポーネント・プロジェクトにて「新規ビュー・オブジェク ト」を選択します。 ビュー・オブジェクトを命名し(例:‘ManagersView’) 、エンティティ・オブ ジェクト及び属性を選択してください。 ビュー・オブジェクトのWhere句を追加します。今回のケースのようにルー ト・ノードのみが必要な場合は、自己参照外部キーの値がNULLのデータの みを取得します。ここでは、 ‘manager_id is null’となります。 このビュー・オブジェクトは新規であるため、ビュー・リンクも必要になり ます。ビュー・リンクを作成することで、JHeadstartはこのビュー・オブジ ェクトと、他の従業員に対応するビュー・オブジェクトとの関係を認識する ことができます。 ビジネス・コンポーネント・プロジェクトにて「新規ビュー・リンク」を選 択します。 ビュー・リンクを命名します。(例:MgrHasSubordinatesLink). 3-50 JHeadstart Application Generator JHeadstart Developer’s Guide 新規ビュー・リンク・ウィザードのstep 2では、2つのビューを結合する属性 を選択します。従業員と上司のケースでは、左側で ManagersView.EmployeeIdを、右側でEmployeesView.ManagerIdを選択し、 「追加」ボタンをクリックします。 新規に作成した'ManagersView'ビュー・オブジェクトをアプリケーション・ モジュールのデータ・モデルに追加します。また、'EmployeesView'を子とし て追加します。 Attention: ツリー用のビューを新規に作成する必要はありません。従業員と 上司の属性は同じなので、既存のビューを再利用することができます。 アプリケーション・ストラクチャ・ファイル・エディタで既存のEmployees グループをコピーし、サービス・ノードを選択してペースト後、Managersと 命名します。 既存のEmployeesグループをManagersグループのところにカット&ペースト します。これにより、EmployeesグループがManagersグループの子となりま す。保存し、ドロップダウンリストをリセットするためアプリケーション・ ストラクチャ・ファイル・エディタを閉じた後再度開いてください。 ManagersグループのTree View Obj ect Usageプロパティの値を 'ManagersView1'にします。また、EmployeesグループのTree View Obj ect Usageプロパティの値をManagersView1下のemployeesに対応するビュー名 ('EmployeesView2'等)に設定します。View Obj ect Usageプロパティは 'EmployeesViewTreeSelect'のままにします。 再生成すると、下図のようになります: JHeadstart Developer’s Guide JHeadstart Application Generator 3-51 Variation: Tree showing only Children of selected Parent ツリーに全てのデータを表示せず、特定の親に紐付く子のノードのみを表示したいケー スがあるかもしれません。例えば、ユーザーが最初に部門を選択したら、その部門に属 する従業員のツリーのみを表示したい場合などです。 以下の手順は、'Variation: Recursive Tree'のセクションの内容通りにツリーを作成した ことを前提としています。既に従業員ツリーが存在しますので、この上に部門を追加し ます。 アプリケーション・モジュールのデータ・モデルに必要な親子関係が含まれ ていることを確認してください。DepartmentsViewが親、EmployeesViewが 子となっている必要があります。 アプリケーション・ストラクチャ・ファイル・エディタで新たなベース・グ ループを作成し、Departmentsと命名します。View Object Usageプロパティ の値をDepartmentsViewとし、併せてTab Name、Display Titles、 Descriptor Attributeを設定します。 Advanced S earch?プロパティの値をsamePageに、Quick Search?プロパティ の値をsingleSearchFieldに、Single Search AttributeをDepartmentNameにそ れぞれ設定します。 EmployeesグループをDepartmentsグループにカット&ペーストし、 Departmentsグループの子とします。保存し、ドロップダウンリストをリセ ットするためにアプリケーション・ストラクチャ・ファイル・エディタを閉 じた再度開きます。 EmployeesグループのTree View Object Usageプロパティの値に Departmentsグループの子グループのビューを入力します。 EmployeesグループのView Obj ect Usageプロパティの値を 'EmployeesViewTreeSelect'からDepartmentsグループの子ビューに変更しま す。 Warning: 「ツリー選択用のビューには最上位にあるビューを使用する」と いう原則の例外は、ツリーがディテール・グループから派生し、親グループ がtreeレイアウトではない場合です。 アプリケーションを実行し、従業員が所属している部門を検索後Employeesタブをクリ ックします。すると、その部門に所属する従業員のツリーのみが表示されます。 3-52 JHeadstart Application Generator JHeadstart Developer’s Guide デフォルトで表示されている従業員が正しく部門と関連づけられているのは、 EmployeesグループのView Object UsageをDepartmentsグループの子ビューに設定した ためです。仮にEmployeesViewTreeSelectを使用していたら、従業員ではない`King’が デフォルトで表示される可能性があります。 `Executive’のような部門を選択した場合、また新たな悩みに直面することになります。 この部門は`King’が所属していますが、この従業員は他の部門の従業員の上司でもあり ます。ツリーで`Cambrault’を選択すると、編集ページでは`Da Haan’が表示されたまま になり、さらにEmployeesView3に該当するレコードが見つからなかった旨のエラーメ ッセージが表示されます。EmployeesView3にはCambraultのデータが含まれていない ためです。 Warning: この例のように、ツリーのノードを選択しても正しく動作しない のは以下の条件を満たしている場合です: 1. ツリーが子グループから開始されている 2. ツリーが自己参照型のビュー・オブジェクトから開始されている 3. 親の直下の子が、親の直下ではない自己参照型のビューを子として持 っている Suggestion: この問題は、最上位グループのView Obj ect Usageを変更する ことで解決できます。View Obj ect Usageで指定するビューは、全てのツリ ー・ノードを含むべきで、そのようなビューを指定することができない場合 JHeadstart Developer’s Guide JHeadstart Application Generator 3-53 は回避策をとる必要があります。一時的に親グループのレイアウト・スタイ ルを`tree’に変更し、子グループのView Obj ect Usageを設定した後で親グル ープのレイアウト・スタイルを元に戻してください。 Creating S huttle Layouts UIXを使用している場合は、JHeadstartでシャトルを生成することができます。 シャトルはユーザーにレコードのリストを表示し、選択済みリストから未選択リストへ のデータ移動(及びその逆)を可能にします。 以下はシャトルの使用例です: 1. 部門に所属する従業員を設定します。左側に他部門の従業員一覧を、右側に対 象部門に所属する従業員を表示します。下のスクリーンショットを参照してく ださい。JHeadstartではこれをparent-shuttleと呼んでいます。 2. ユーザーに職責を付与します。左側にユーザーが持っていない職責の一覧を表 示し、右側にユーザーが既に持っている職責の一覧を表示します。JHeadstart ではこれをintersection-shuttleと呼んでいます。 Creating Parent Shuttles Parent-shuttleは、親にディテールのレコードを紐づける場合に使用します。例えば、従 業員に部門を、あるいは顧客に担当営業を紐づける場合などです。Parent-shuttleは新規 レコードを作成することはなく、親レコードへのリンクを更新するだけです。 従業員の部門を設定するシャトルを作成します。手順は以下の通りです: 1. 3-54 DepartmentsViewに基づき、ベース・グループを作成します。Layout Styleを ‘form’に設定します。 JHeadstart Application Generator JHeadstart Developer’s Guide 2. EmployeesViewに基づき、ディテール・グループを作成します。このグループはシ ャトルの選択済みリストに使用されます。Layout Styleを‘parent-shuttle’に、 TabNameを‘Assign Employees to Departments’に、Display Title (plural) を ‘Employees in this Department’にそれぞれ設定します。 3. ModelプロジェクトにEmployeesエンティティ・オブジェクトのための新規デフォ ルト・ビュー・オブジェクトを作成します。ビュー・オブジェクトに名前を付け (例:EmployeesNotInDeptView)アプリケーション・モジュールに追加します。 Attention: この新規ビュー・オブジェクトは、ステップ2で使用したエンテ ィティ・オブジェクトと同じエンティティ・オブジェクトに基づいている必 要があります。従業員の部門設定は、このビュー・オブジェクトを更新する ためです。 4. ビュー・オブジェクトのWhere句を設定し、他部門の従業員のみを取得するよう変 更します。併せてOrder By句も設定します。 Attention: Where句の内容を()で囲んでいる点に注意してください。この ビュー・オブジェクトに対し検索を行う場合、検索時にAND句を追加するた め、()が無いと意図しない検索結果となってしまう可能性があるためで す。 JHeadstart Developer’s Guide 5. 新規ビュー・オブジェクトに基づき新規ルックアップを作成します。この例では、 上司のルックアップは使用しないため、これを更新しても構いません。View Obj ect Usageプロパティの値が新規ビューになっていることを確認してください。 また、titleプロパティを‘Unassigned Employees’に、Lookup Value Attributeを EmpIdに、 Lookup Display AttributeをLastNameに、Base Value Attribute及び Base Display AttributeをEmpIdに設定します。. 6. Query Bind Parametersプロパティの値を ${data.DepartmentsUIModel.DepartmentsDepartmentId}に設定します。親グループ とシャトルが同じページにある場合は、${bindings. DepartmentsDepartmentId}の ように書いても問題ありません。ADFは現在のUIモデルにあるものを参照するのに JHeadstart Application Generator 3-55 `bindings’キーを使用し、現在のbinding contextにあるものを参照するのに`data’キ ーを使用します。 7. 生成すると、以下のようなページになります: 8. シャトルの左側にクイックサーチを追加することもできます。追加すると、以下の ようになります: Attention: レコードを右から左に移動すると、その従業員は部門に属さなく なります。データベース側から見ると、department_idの値がnullになること を意味しますので、この列は必須ではない外部キー列でなくてはなりませ ん。 Suggestion: 必須外部キーを使用する場合は、シャトルのジェネレータ・テ ンプレートを変更し、右側にレコードを表示せず、部門から除去できないよ うにします。shuttleGroup.jutファイル及びshuttleChildGroup.jutを編集し、 3-56 JHeadstart Application Generator JHeadstart Developer’s Guide <trailing>タグから<contents>タグを取り除きます。(空の<list>タグ は残します)より詳細な情報については、Using Generator Templatesのセクシ ョンを参照してください。 紐づけられた子の情報は同じベース・グループの他の子グループにて参照す ることができます。 Creating Intersection Shuttles 2つのビュー・オブジェクト間のインターセクションを実装したい場合は、intersection shuttleを使用します。インターセクションは、2つのビュー・オブジェクト間で複数対 複数のリレーションが存在する場合に使用されます。例えば: ユーザーと職責との関係 従業員とプロジェクトとの関係. このようなケースでは、インターセクション表を作成して複数対複数のリレーションを 実装することが多いでしょう。Intersection shuttleを使えば、インターセクション表の 内容をメンテナンスすることができます。 HRスキーマにはインターセクション表が存在しないため、作成します: create table hirable (id number, employee_id number, department_id number); alter table hirable add constraint hir_pk primary key (id); alter table hirable add constraint hirdeptfk foreign key (department_id) references departments; alter table hirable add constraint hirempfk foreign key (employee_id) references employees; JHeadstart Developer’s Guide JHeadstart Application Generator 3-57 Hirable表はEmployeesとDepartmentsを複数対複数の関係で結びます。各部門は複数の 従業員を雇用可能です。各従業員は複数の部門から雇用されることが可能です。 新しく作成したテーブル用にビジネス・コンポーネントを生成します。エンティティ・ オブジェクト、アソシエーション、デフォルト・ビュー・オブジェクト、及びビュー・ リンクが必要になります。 Suggestion: 新規Modelプロジェクトを作成し、ビジネス・コンポーネント を全て作り直すのが最も簡単な方法です。これにより、必要なアソシエーシ ョンやビュー・リンクが全て作成されます。 Intersection Shuttleを作成する手順は以下の通りです: 3-58 1. Intersection Shuttleは新規レコードを作成するため、インターセクション表の主 キーの値を生成する仕組みが必要です。Generated Primary Key Valuesを参照 してください。 2. Hirableビュー・オブジェクトにEmployeesのLastName属性を追加します。 LastName属性はシャトルで表示するDescriptor Attributeとして必要です。Add attributes from other Entities to a View objectを参照してください。 3. DepartmentsViewに基づきベース・グループを作成します。Layout Styleプロ パティの値は ‘form’にしてください。 4. HirableViewに基づき、ディテール・グループを作成します。このディテール・ グループは、シャトルの「選択済み」リストを表示するのに使用します。 Layout Styleプロパティを‘intersection-shuttle’に、TabNameプロパティを ‘Select hirable Employees’に、Display Title (plural) を‘Hirable’に、Descriptor Attributeを`LastName’にそれぞれ設定します。 5. ModelプロジェクトでEmployeesエンティティ・オブジェクトに対応する新規デ フォルト・ビュー・オブジェクトを作成します(UnHiredEmployeesViewのよ うに命名してください)。新規に作成したビュー・オブジェクトをアプリケー ション・モジュールに追加します。 JHeadstart Application Generator JHeadstart Developer’s Guide JHeadstart Developer’s Guide 6. UnhiredEmployeesViewのWhere句を修正します。 7. Base the first lookup of employees on the new View Object created by setting the View Object Usageプロパティを設定し、ルックアップが新規に作成したビ ュー・オブジェクトに基づくようにします。また、ルックアップのAdvanced Searchを使用不可にします。Titleプロパティの値を‘Unhirable’にします。 8. Query Bind Parameters パラメータの値を ${bindings.DepartmentsDepartmentId}に設定します。 JHeadstart Application Generator 3-59 9. 3-60 JHeadstart Application Generator アプリケーションを生成します。 JHeadstart Developer’s Guide Query Behaviour このセクションでは、生成されたページの検索時の挙動について解説します。 Specifying Auto Query デフォルトでは、JHeadstartが生成したページはAuto Queryがonになっています。つま り、ユーザーがページにアクセスすると自動的にレコードの検索が行われるため、必要 以上に大きい検索結果を取得していることになります。 グループ及びルックアップの設定では、Auto Queryプロパティをfalseに設定すること が可能です。これにより、ユーザーからリクエストがあるまで検索が実行されなくなる ため、検索条件を指定させて取得するデータ量を制限することができます。 また、Maximum Number of S earch Hitsプロパティを使用することで、ユーザーによ り詳細な条件を指定することを強制できます。 Using Query Bind Parameters グループとルックアップは共にADFビュー・オブジェクトに基づいています。ビュー・ オブジェクトはSQL問い合わせを含んでおり、このSQLはデフォルトでは固定であるた め、データベースが変更されない限り必ず同じ結果を返します。しかし、ビュー・オブ ジェクトの検索を動的に変更したい場合もあるでしょう。例えば、部門に所属する従業 員の一覧を取得したい場合、ビュー・オブジェクトに部門IDを渡し、ビュー・オブジェ クトが必要なレコードのみを取得するといった具合です。 ADF BC View Objects have bind variables for this functionality. JHeadstart can at runtime pass values into these bind variables using the property このような機能を実装するために、ADF BC ビュー・オブジェクトにはバインド変数が あります。Query Bind Parametersプロパティを使用し、実行時にバインド変数に値を 渡すことができます。 「マネージャが存在する部門」を例に説明します: JHeadstart Developer’s Guide JHeadstart Application Generator 3-61 ベース・グループはdepartmentsで、レイアウト・スタイルは`form’、ルックアップの displayTypeプロパティは`choice’です。この状態で生成すると、以下のようになりま す: ドロップダウンリストには全従業員が表示されますが、マネージャはこの部門に所属す る従業員でなくてはなりません。つまり、DepartmentId=10という条件が必要になりま す。 これを、JHeadstartのQuery Bind Parametersを使用して実装します。 3-62 JHeadstart Application Generator JHeadstart Developer’s Guide JHeadstart Developer’s Guide 1. ModelプロジェクトでEmployeesエンティティ・オブジェクトのデフォルト・ビ ュー・オブジェクトを作成し、命名します(例:‘EmployeesInDeptView’)。 2. 作成したビュー・オブジェクトを編集し、バインド変数を使用したWhere句を 追加します。バインド変数は「:n(nは数字)」という記述になります。この 例では ‘department_id=:1’をWhere句に追加します。 3. ルックアップが子のビュー・オブジェクトに基づくよう設定し、Query Bind Parametersプロパティに${bindings.DepartmentsDepartmentId}と入力します。 4. アプリケーション・ストラクチャ・ファイル・エディタのヘルプでQuery Bind Parametersプロパティの項を参照してください。このケースでは、実行時に DepartmentIdはバインド変数「:1」に渡されます。尚、複数のバインド変数が ある場合は、Query Bind Parametersプロパティに「,」で区切って複数の値を 設定します。 5. 生成し、アプリケーションを実行します。ManagerIdのドロップダウンリスト がその部門に所属する従業員しか表示しないことを確認してください。 JHeadstart Application Generator 3-63 Query Bind Parametersはグループとルックアップの両方に使用できます。リクエスト やセッションのあらゆる値をバインドすることが可能です。JHeadstartは、バインド変 数の値が変更されたら自動的に再問い合わせを実行します。 Reference: OTNの ‘Quick Overview of JSTL, EL and how it's used in Oracle ADF’ も併せて参照してください: http://www.oracle.com/technology/products/jdev/collateral/papers/10g/j stl_el_adf/jstl_el_adf.html Creating a S earch Region 多くの場合、エンドユーザにデータを絞り込むための検索機能を提供する必要がありま す。本セクションでは、検索機能の実装について解説します。 JHeadstartでは、2通りの方法で検索機能を実装することができます: 1. Quick Search:生成されたページの上部に検索用のエリアが配置されます。基 本的に1項目のみを用いた検索となり、また範囲指定による検索はサポートされ ません。 2. Advanced Search:検索用のエリアは画面上部または別のページに配置されま す。複数項目を用いた検索や、範囲指定による検索が可能です。 S uggestion: 両方の検索を組み合わせて使用することも可能です。(例:頻 繁に使用される検索にはQuick Searchを、使用頻度が低い検索には Advanced Searchを使う) 検索用ページを作成する前に、準備作業が必要となります。 Determine which attributes should be displayed in the S earch Region (Queriable Attributes) 各ビュー・オブジェクトを確認し、問い合わせを許可しない属性を決定します。 検索機能を生成する場合、JAGはどの属性が問合せ可能であるかを知る必要がありま す。ビュー・オブジェクトで各属性の「問合せ可能」プロパティを設定してください。 3-64 JHeadstart Application Generator JHeadstart Developer’s Guide エンティティ・オブジェクトやビュー・オブジェクトを生成すると、このプロパティは デフォルトでチェックされています。 1. ビュー・オブジェクトエディタを開き、属性を選択します。 2. 「ビュー属性」タブn the 'View Attribute' tab, uncheck the Queriable checkbox. Using Quick Search Quick Searchを作成するにあたって、選択肢が2つあります。 1. 問い合わせに使用する属性が常に同じである場合、Quick Search?プロパティの 値を‘Single Field’に設定し、Single Search Attributeプロパティに使用する属性 を入力してください。 2. 検索に使用する属性をユーザーに選択させる場合、Quick Search?プロパティの 値を‘dropdownList’に設定します。これにより、JHeadstartはユーザーが属性を 選択するためのポップリストを生成します。ポップリストに表示されるのは、 問合せ可能な属性のみとなります。 Quick Search?プロパティを‘none’に設定すると、Quick Searchは使用不可になります。 Using Advanced S earch Advanced Searchに関しても、2つの選択肢があります。 1. 検索用エリアが表示項目と同じページに存在する 2. 検索用エリアが独立した別のページに存在する Advanced Search?プロパティを設定することにより、切り替えることができます。 検索用エリアのレイアウトに影響するプロパティは2つあります: JHeadstart Developer’s Guide JHeadstart Application Generator 3-65 1. formWidthは検索用エリアの幅を決定します。デフォルトでは10%となってお り、全アイテムが左寄せで表示されます。より大きな数値を指定すると、広が って表示されるようになります。 2. Advanced Search Layout columnsnプロパティは、アイテムを表示する列数を 決定します。デフォルトでは全アイテムが1列に表示されます。 Attention: FormレイアウトのページでformWidthプロパティを設 定すると、検索用エリアだけではなくページ全体のレイアウトに影 響しますので注意してください。 Using query operator デフォルトでは、文字列属性には‘StartsWith’(前方一致検索)オペレータが使用され、 それ以外では「=」オペレータが使用されます。 Suggestion: デフォルト時の設定はhiddenFormFields.uitで定義されていま す。 オペレータを変更するには属性のQuery Operatorプロパティを変更します。詳細は JHeadstartプロパティ・エディタのヘルプを参照してください。 Query Operatorを‘SetByUser’に設定すると、ユーザーが検索時にオペレータを選択す ることができるようになります。 Example: 3-66 Search for a range of values 1. Query Operatorプロパティを ‘SetByUser’. 2. アプリケーションを生成します。 3. 生成されたアプリケーションの‘Advanced Search’エリアは以下のようになって いるはずです: 4. JHeadstartはこのフィールドで使用可能なオペレータのポップリストを生成し ているのが確認できます。 JHeadstart Application Generator JHeadstart Developer’s Guide Transactional Behavior 本セクションでは、生成されたページにおけるトランザクションの挙動について解説し ます。Operationsグループのプロパティを使用します。 Specifying Insert Allowing inserting data in a form page Single-Row Insert allowed?プロパティは、新規レコード登録用のボタンを生成しま す。 Allowing the user to insert data in a table page ユーザーが新規レコードの登録を許可されている場合、1つ以上の空白行がテーブルの 最下部に表示されているべきです。ユーザーはその空白行に必要なデータを入力しま す。 この機能を実装するには、New Rowsプロパティに空白行の数を入力し、かつMultiRow insert allowed?プロパティにチェックを入れてください。 Build insert only screens ユーザーが新規レコードの登録のみが可能ページを作成することもできます。この場 合、このページから問い合わせはできません。Advanced Search? 及びQuick Search? をnoneに設定し、Auto Query ?を使用不可にします。 この状態で生成すると、警告が表示されます。グループ全体で問い合わせを許可しない ためには、ビュー・オブジェクトの設定を変更します。ビュー・オブジェクトエディタ の「チューニング」で、「行なし」に設定することで登録専用のビューにすることがで きます。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-67 Specifying Update Single-Row Update Allowed?プロパティ及びMulti-Row Update allowed? プロパティ を設定することで、Formレイアウト及びTableレイアウトからのデータの更新を許可し ます。 Attention: 複数行の更新はJHeadstartの機能です。標準のADFでは実装でき ません。 Specifying Delete Single-Row Delete Allowed?プロパティ及びMulti-Row Delete allowed? プロパティ を設定することで、Formレイアウト及びTableレイアウトからのデータの削除を許可し ます。 JAGは単一行のみ表示するページでは削除ボタンを、複数行を表示するページでは削除 用チェックボックスを生成します。 Example ‘Delete in a table layout’: ユーザーは削除対象の行を全て選択後、ボタンをクリックすることでデータを削除する ことができます。 3-68 JHeadstart Application Generator JHeadstart Developer’s Guide Example ‘Delete in a form layout’: JHeadstart Developer’s Guide JHeadstart Application Generator 3-69 Generating User Interface Widgets このセクションでは、生成されたアイテムのプロンプトやディスプレイ値の設定につい て解説します。その後、JHeadstartで生成することのできるwidgetについて説明しま す。 Specifying the Prompt デフォルトでは、画面に表示されるプロンプトは属性名と同じになっています。表示を 変更したい場合は、Promptプロパティを設定します。 Default Display Value ADF BCプロパティ・エディタでは、属性のDefault Display Valueプロパティでデフォ ルトの表示値を設定することができます。この値は、新規レコードの作成時に使用され ます。 例えば、新しい従業員はデフォルトで給料が「1000」だとします。 1. ADF BCプロパティ・エディタでデフォルト値を設定します。 2. アプリケーションを再生成・実行し、新規レコードを作成します。給料の項に デフォルト値が表示されます。 Using EL expressions Default Display Valueプロパティには、文字列以外にもExpression Language(EL)を 使用することができます。. 3-70 JHeadstart Application Generator JHeadstart Developer’s Guide これは、新しい従業員の給料が職種から決定される場合などに有効です。計算結果 (DataActionとして実装されます)はセッション・コンテキストにSalaryと呼ばれるオ ブジェクトと、getDefaultSalaryメソッドという形で保持されます。このような場合、 Default Display Valueプロパティには${salary.defaultSalary}と入力します。 今日の日付をデフォルト値として表示する場合にも、この方法で対応できます。 Default Display Type ADF BCプロパティ・エディタでは、各属性に対しDisplay Typeを設定することができ ます。しかし、この値を明示的に指定しなかった場合、JHeadstartは以下のルールに従 って自動的に値を設定します: 1. 属性がList Validator、DomainまたはdisplayTypeが`lov’ではないLookupを持っ ている場合、`choice’が設定されます。 2. displayTypeが`lov’であるLookupを持っている場合、`lov’が設定されます。 3. アイテムが更新可能ではなく、またイメージでもinterMediaでもない場合は `displayField’が設定されます。 4. 属性のタイプが`oracle.jbo.domain.Date’である場合、`dateField’が設定されま す。 5. 属性のタイプがinterMediaまたはBlobDomainの場合、更新可能な属性は `fileUpload’に、更新不可の場合は`fileDownload’に設定されます。 6. 属性のタイプが`oracle.ord.im.OrdImageDomain’かつ更新不可の場合、`image’ に設定されます。 7. 上記のいずれにも当てはまらない場合は`textInput’となります。 デフォルト値をオーバーライドする場合はDisplay Typeプロパティを設定します。 設定できるタイプは、以下のいずれかとなります: textInput checkBox JHeadstart Developer’s Guide JHeadstart Application Generator 3-71 choice list editor dateField datetimeField displayField secret fileUpload fileDownload image Generating a Text Item Define Attribute Display Width and Height デフォルトでは、属性は高さ=1行、幅=データ幅(テーブルの列幅)で表示されます。 ただし、テーブルの列幅が不明な場合や、サービス・レベルのDefault Display Width プロパティより値が大きい場合はこのプロパティの値が使用されます。 この値をオーバーライドするには、WidthプロパティとHeightプロパティを使用しま す。 3-72 JHeadstart Application Generator JHeadstart Developer’s Guide Setting Maximum Length HTMLページで入力できる文字数の制限は、属性によって決定づけられます。これを変 更するには属性のMaximum Lengthプロパティに文字数を入力します。 Generating a Dropdown List ドロップダウンリストは、選択肢がさほど多くない場合に使用します。また、ドロップ ダウンリストには以下の2種類があります: 値リストが静的な場合:選択肢はデータベースから取得せず、DomainかList Validatorから取得します。 値リストが動的な場合:ドロップダウンリストはビュー・オブジェクトに基 づいて作成する必要があります。 Static dropdown list based on a domain このオプションを使用するには、ドメイン定義ファイルにドメインを追加する必要があ ります。 ドメイン定義ファイルは以下のような構造に成っています: <DomainSet> <Domain> <AllowableValue> </AllowableValue> </Domain> </DomainSet> シンタックスのルールは以下の通りです: DomainSetには属性がありません。 Domain エレメントには属性が1つ(name)だけあります。 AllowableValueは属性が2つ(value、meaning)あります。 ドメイン定義ファイルの例: <?xml version = '1.0' encoding = 'UTF-8'?> <DomainSet> <Domain name="ExampleDomain"> <AllowableValue value="M" meaning="Male"/> <AllowableValue value="F" meaning="Female"/> </Domain> JHeadstart Developer’s Guide JHeadstart Application Generator 3-73 <Domain name="CommissionDomain"> <AllowableValue value="0.0" meaning="No Commission"/> <AllowableValue value="0.1" meaning="Low"/> <AllowableValue value="0.2" meaning="High"/> </Domain> </DomainSet> ドメイン定義ファイルでドメインの定義が完了したら、属性がドメインを使用できるよ うDomainプロパティを設定します。 アプリケーションを生成すると、ドロップダウンリストが表示されます。尚、Display Typeプロパティの設定は必要ありません。 Translation of static domains ドメイン定義ファイルの`meaning’は、1つの言語のみで定義されています。これを他の 言語に翻訳する必要がある場合は、サービスのGenerate NLS-enabled prompts and tabsプロパティをtrueに設定します。このプロパティが設定されると、JHeadstartは ApplicationResources.propertiesファイルにエントリを生成します。 Static dropdown list based on a List Validator ADF BCはエンティティ・オブジェクトにValidatorを追加することができます。 Validatorを使用することでModelレイヤにおいて値の妥当性チェックを行うことが可能 になります。 JHeadstartはList Validatorからドロップダウンリストを作成します。以下の例では、 List Validatorを使用してsalaryの値をチェックしています。 3-74 JHeadstart Application Generator JHeadstart Developer’s Guide 1. エンティティ・オブジェクトを編集し、検証ノードに行きます。属性を選択 肢、「新規」をクリックしてください。 2. 規則はList Validatorを選択肢、リテラル値を入力します。ここでは意味を入力 しない点に注意してください。 3. サービスのプロパティGenerate NLS -enabled prompts and tabsの値をtrueに設 定します。これにより、JHeadstartはリソース・バンドルにエントリを追加し ます。 4. アプリケーションを生成します。リソース・バンドルにエントリの意味を追加 してください。この例では、エントリは DOMAIN_EMPLOYEES_SALARY_<value>と命名されています。 Attention: ドメイン定義ファイルとList Validatorの違いは以下の通りです: ドメインはアプリケーション全体で共用できるのに対し、List JHeadstart Developer’s Guide JHeadstart Application Generator 3-75 Validatorは共用できません。属性毎に定義する必要があります。 List ValidatorはModelレイヤでのチェックを行います。 ドメイン定義ファイルでは、値毎に意味を設定できます。 Dynamic dropdown list based on a lookup 動的なリストが必要な場合は、ビュー・オブジェクトに基づいたルックアップから生成 します。手順は以下の通りとなります: 1. ビュー・オブジェクトに基づきルックアップを作成します。 2. displayTypeを`choice’に設定します。 3. Lookup Display Attributeプロパティに、ドロップダウンリストに表示したい 属性を設定します。 4. Lookup Value Attributeプロパティに、Base Value Attributeに値を渡すルック アップの属性を設定します。 5. Base Value AttributeとBase Display Attributeに、Lookup Value Attributeで 設定した属性の値を受け取るベース・グループの属性を設定します。 Generating List of Values テーブルに紐付いたルックアップのレコード件数が多い場合や、ルックアップに検索機 能を付加したい場合は以下の手順でLOV(List of Values = 値リスト)を使用します。 3-76 1. View Obj ect Usageの値が正しいことを確認してください。 2. ルックアップのDisplay Typeを`lov’に設定します。 3. Lookup Display Attributeプロパティに、LOVに表示させる属性を設定しま す。 JHeadstart Application Generator JHeadstart Developer’s Guide Add attributes from other Entities to a View object 場合によっては、ベース・ビュー・オブジェクトのルックアップ属性を定義する必要が あります。例えば、下図を参照してください。CountryIdはLocationsビュー・オブジェ クトの一部で、Countriesビュー・オブジェクトを参照する外部キーです。しかし、外 部キーを表示せず、より意味のあるフィールド(このケースでは、IDではなく国名)を 表示することが望ましい場合が多いでしょう。 これを実現するには、表示したい全ての属性をビュー・オブジェクトに含める必要があ ります。上記の例では、LocationsViewに国名(Country Name)を追加する必要があり ます。手順は以下の通りです: JHeadstart Developer’s Guide 1. ビュー・オブジェクトを右クリックし、「<ビュー・オブジェクト>の編集」 を選択します。 2. エンティティ・オブジェクトのノードで、画面の右側にベースとなるエンティ ティが選択済になっていることが確認できます。ルックアップ属性を追加する には、ルックアップ・エンティティを選択済リストに追加する必要がありま す。 JHeadstart Application Generator 3-77 3. 別名とアソシエーションの端を設定します。 4. 属性ノードに行きます。ベース・エンティティの全属性が選択済みになってい ますが、さらにビュー・オブジェクトにて表示するルックアップ・エンティテ ィ・オブジェクトの属性を追加します。 5. ルックアップ・エンティティのキー属性(以後ルックアップ・キーと呼びま す)は必ず含まれ、デフォルトでは分かりにくい名前が付与されています。例 えば、属性名が`Id’の場合、`Id1’と命名されます。各属性の設定画面で、 `LkpXxxId’(Xxxはエンティティ別名)のような分かりやすい名前を付けるこ とを推奨します。 6. また、他のルックアップ属性もそうと分かるような命名規則に従って名前を変 更する習慣をつけておくと良いでしょう。 7. ADF BCテスターでビュー・オブジェクトをテストします。CountryId属性を変 更すると、LkpCtrCountryNameの値が変わることを確認してください。 ビュー・オブジェクトの拡張が完了したところで、ページの定義についても変更を加え ます。 1. 3-78 JHeadstart Application Generator Base Display Attributeプロパティを設定し、ベース・ページに表示する属性を 決定します。 JHeadstart Developer’s Guide 2. 表示しない属性は、Displayプロパティの値をfalseに設定します。この例では CountryId属性を非表示にします。 3. 生成すると以下のような画面となります。 Attention: JHeadstart Developer’s Guide 1. View TypeがJSPの場合、ルックアップのフィールドは読取専用とな ります。そのため、値を選択するにはLOVを使う必要があります。 2. When your View Type is UIX, set Use LOV for validation? To true. See Use LOV for validation JHeadstart Application Generator 3-79 Use LOV for Validation このセクションの内容は、View TypeがUIXであること前提としています。 値リスト(List of Values)は、ユーザーが外部キー列の値を選択するための手助けとし て使用されます。ユーザーは値リストを参照し、必要に応じて絞り込みを行い値を選択 します。 しかし、多くの場合、ユーザーはどのような値が存在するかを知っており、値リストを 必要とするのは「滅多に使用しない値を入力する」などの特殊な状況となります。 JHeadstartは、上記の両方に対応する以下のようなページを作成することができます: 1. ユーザーは、ルックアップ属性の値(または値の一部)を入力します。 2. マッチする件数がカウントされます。 3. マッチ件数が1の場合、値リストウィンドウは表示されずに入力値を補完しま す。 4. マッチ件数が0または2以上の場合は値リストウィンドウが開かれ、ユーザーが 入力した値の検索結果が表示されます。 つまり、値リストウィンドウを表示するかどうかはシステム側で判断されます。これに より、ユーザーは逐次値リストウィンドウを開く手間から解放されます。 ページの作成手順は以下の通りです。EMPLOYEES表及びDEPARTMENTS表を例とし て使用しています。 3-80 1. ベース・ビュー・オブジェクトを拡張し、ルックアップ・ビュー・オブジェク トの属性を追加します。手順はDefining the Lookup Attributes in the view object を参照してください。この例では、EmployeesViewビュー・オブジェク トにDepartmentName属性を追加します。 2. アプリケーション・ストラクチャ・ファイルでベース・ビュー・オブジェクト に対応するグループと、ルックアップ・ビュー・オブジェクトに対応するルッ クアップを定義します。 3. グループのプロパティを必要に応じて設定します。 4. ルックアップのdisplayTypeを` lov’に設定します。併せてDisplay settingsプロ パティ・グループの他のプロパティも設定します。以下は設定例です: 5. ルックアップのUse LOV for Validation? (UIX only)プロパティを`true’に設定 します。 JHeadstart Application Generator JHeadstart Developer’s Guide 6. アプリケーションを生成します。 DepartmentNameフィールドで`F’と入力し、TABキーを押します。Fで始ま る名前の部門は1つしか存在しないため、値リストウィンドウは開かれず、部 門名は補完されます。 DepartmentNameフィールドで`CO’と入力し、TABキーを押します。COで 始まる名前の部門は複数存在するため、値リストウィンドウが開かれ問合せ が実行されます。 Warning: 例外として、Tableレイアウトの新規行では値リストウィンドウが 開かれず、値リストアイコンをクリックする必要があります。新規行で値リ ストによる検証を実行しょうとすると、JavaScriptエラーが表示されます。 尚、Formレイアウトではこの問題は発生しません。 Selecting multiple values in a List of Values このセクションの内容は、View TypeがUIXであること前提としています。 JHeadstartは、複数の値を選択可能な値リストを生成することができます。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-81 以下のようなデータモデルが存在する場合: ORDERは複数のORDER_ITEMSから構成するため、一度の注文に複数のPRODUCTSを 含めることができます。複数選択機能が存在しなかったら、ユーザーはORDER_ITEMS の新規レコード作成を何度も繰り返さなくてはなりません。 値リストで複数選択が可能であれば、注文内容全てを一度で入力することができます。 ただし、ORDER_ITEMSがTableレイアウトの場合に限ります。 複数選択可能な値リストは以下の手順で作成します: 1. 複数のORDER_ITEMSが同時に作成させるため、Business Components Model に主キーを自動生成する機能が必要となります。この例では、ORDER_ITEMS のLINE_ITEM_IDが生成されなくてはなりません。この手順についてはPrepare Model for generationで解説しています。 2. グループ定義を確認してください。ORDERSはFormレイアウトでも構いません が、ORDER_ITEMSはTableレイアウト、またPRODUCT_INFORMATIONがル ックアップであることがそれぞれ必須条件となります。 3. LOVのベース・グループのNew Rowsプロパティに0より大きい値を入力してく ださい。 4. ルックアップのdisplayTypeを`lov’に設定します。また、Set Allow multiple selection in lov? (UIX only) を`true’にします。 5. アプリケーションを生成します。 Attention: 複数選択可能な値リストと`Use Table Ranges’を組み合わせて使用 すると、新規に作成したレコードがすぐに表示されない場合があります。 例えば、range sizeが10であるテーブル・ページに複数選択可能な値リストが 存在しており、11行目∼20行目及び新規レコード作成用の空白行2行が表示さ れていたとします。空行のうち1行で複数選択可能な値リストを使用し、新規 レコードを3件作成すると、作成された3行のうち1行目はページの一番下(10 行目)に表示され、残りの2行は次ページに表示されます。 Generating a Date (time) Field ビュー・オブジェクトの属性の型が`Date’である場合、デフォルトでは表示タイプは `dateField’になります。dateFieldでは日付のみ入力可能になります。 3-82 JHeadstart Application Generator JHeadstart Developer’s Guide 属性のDisplay Typeプロパティを`dateTimeField’に変更すると、日付に加えて時間も入 力可能になります。 Specifying display format for date and datetime field サービスのプロパティDate Format及びDateTime Formatを変更することで、日付の表 示形式を定義することができます。ここで使用する文字列は java.text.SimpleDateFormatで定義されています。JAGはこれらのプロパティの 値を取得し、dateformat.propertiesファイルに反映します。このファイルは実行時に使 用されます。 Generating a Checkbox 取りうる値が2つしかない属性については、チェックボックスを生成することができま す。HRサンプルスキーマには該当する属性が存在しないため、この例ではYとNの2通 りの値を取るIND_LEASE_CARをEMPLOYEES表に追加しました。 チェックボックスの生成手順は以下の通りです: 1. ドメイン定義ファイルにドメインを追加します: <Domain name="BooleanDomain"> <AllowableValue value="Y" meaning="Yes"/> <AllowableValue value="N" meaning="No"/> </Domain> 2. Display Typeプロパティを`checkbox’にします。 3. Domainプロパティに`BooleanDomain’を設定します。 4. Default Display Valueプロパティにデフォルト値を設定します。 Attention: 検索用エリアではチェックボックスではなく、ドロップダウンリ ストとして表示されてしまいます。これは、検索時には以下の3つの状況があ JHeadstart Developer’s Guide JHeadstart Application Generator 3-83 り得るためです。 1. IndLeaseCar=’Y’であるレコードを検索したい 2. IndLeaseCar=’N’ であるレコードを検索したい 3. 検索時にIndLeaseCarの値を考慮しない File Upload, File Download and Showing Image Files BLOB型、ORDSYS.ORDIMAGE型、及びORDSYS.ORDDOC型のカラムに基づいてファ イルのアップロード・ダウンロードやイメージファイルの表示を行うページを生成する ことができます。 Suggestion: ORDSYS.ORDImageはOracle interMediaで定義されているオブ ジェクト型です。ORDImageはよく使われるデータ・フォーマットのプロパ ティを生成・拡張することができます。 ORDSYS.ORDDoc型は、オーディオやイメージ、動画データといったメディ ア・データをデータベースの列に格納するためのデータ型です。詳細は interMediaのドキュメントを参照してください。 デフォルトでは、JAGはこれらの列からfile uploadフィールドを生成します。 以下の例では、HRサンプルスキーマを用いて従業員の写真をアップロードするための file uploadフィールドを生成します。 1. 適切なデータ型を持つテーブルが存在している必要があります。以下のSQLを 実行してください。 create table emppicture (id number, photo ordsys.ordimage); alter table emppicture add constraint pic_pk primary key (id); 2. このテーブルに対応するADFエンティティ・オブジェクト及びADFビュー・オ ブジェクトを作成してください。ビュー・オブジェクトはADFアプリケーショ ン・モジュールに追加します。アプリケーション・ストラクチャ・ファイルに グループを追加し、アプリケーションを生成してください。以下のような画面 になります: Browseボタンを使用し、アップロードする画像ファイルを選択してください。 フィールドをファイルダウンロード用にしたい場合は、属性のDisplay Typeプロパティ を`fileDownload’に変更します。また、データベースに格納されている画像がHTMLで 表示できる形式(*.gifや*.jpgファイル等)の場合、Display Typeプロパティを`image’ に設定することもできます。 3-84 JHeadstart Application Generator JHeadstart Developer’s Guide Attention: display Typeを`image’に設定した場合は、Widthプロパティと Heigthプロパティも併せて設定してください。. Display Typeを`image’に設定し、アプリケーションを再生成すると以下のようになり ます: アップロードされるファイルのサイズを制限する場合は、struts-configの<controller>エ レメントに“maxFileSize”プロパティを追加します。 <controller processorClass="oracle.jheadstart.controller.struts.JhsRequestProcessor" forwardPattern="$P" maxFileSize="500K" locale="true"/> maxFileSizeで使用できる単位は"K"、"M"、及び"G"(それぞれキロバイト、メガバイ ト、ギガバイト)となります。デフォルトは250Mです。 Combining File Display Options 通常は、BLOB/OrdImage/OrdDocのいずれかである属性に対しオプション(ファイル アップロード、ファイルダウンロード、イメージ)は1つしか設定できません。1つの属 性に対し複数のオプションを設定したい場合は、ビュー・オブジェクトの一時属性を新 規に作成する必要があります。 手順は以下の通りとなります: JHeadstart Developer’s Guide 1. ADFビュー・オブジェクトを編集します。 2. 属性ノードに行きます。 3. 「新規」ボタンをクリックします。 4. 新規に作成する属性に名前をつけます(例:DownloadPhoto)。属性のタイプ (Blobdomain or OrdImageDomain or OrdDocDomain)を選択肢、「OK」を クリックします。. 5. ステップ3と4を繰り返し、他の属性も作成します。 6. Javaノードに行きます。 7. ビュー行クラスの「Javaファイルの生成」及び「アクセッサの生成」がチェッ クされていることを確認してください。 JHeadstart Application Generator 3-85 8. 「OK」をクリックします。 9. 生成されたViewRowImpl.javaを開き、新規に作成された属性に対応するgetメ ソッドのコードを変更します。 生成されたコード: public OrdImageDomain getDownloadPhoto() { return (OrdImageDomain)getAttributeInternal(DOWNLOADPHOTO); } 以下の通り変更: public OrdImageDomain getDownloadPhoto() { return getPhoto(); } 10. これで、同一カラムを使用する3つの一時属性が作成されました。各属性の display typeを別々に設定することができます。 11. アプリケーションを再生成します。 Store additional info of uploaded files ファイルをアップロードする際は、データベースにファイル名、ファイルサイズ、 MIMEタイプも保存することができます。ビュー・オブジェクトにそれぞれ対応する属 性を追加し、アップロードする属性のFile Name Attribute、File S ize Attribute、File Mime Type attributeプロパティを設定します。 Attention: interMediaオブジェクトにはgetmimetype()やgetcontentlength()と いった情報取得用のファンクションが組み込まれています。そのため、 interMediaを使用する場合はMIMEタイプを格納するための列を追加する必 要はありません。 3-86 JHeadstart Application Generator JHeadstart Developer’s Guide Customizing Page Layout Generation このセクションでは、より詳細なカスタマイズについて解説します。例えば、独自のル ック&フィールの生成などです。 Using Generator Templates Introduction アプリケーションを生成する際、JAGはテンプレートを使用します。各ページタイプの レイアウトや挙動はテンプレートによって決定されています。JAGはアプリケーショ ン・ストラクチャ・ファイルの内容でテンプレートのプレースホルダを置換し、アプリ ケーションを生成しています。 JHeadstartテンプレートは、プロジェクトのテンプレートディレクトリに格納されてい ます。テンプレートファイルには2種類あります: *.jjt: JSP生成時に使用されるテンプレート *.jut: UIX生成時に使用されるテンプレート JhsTemplates.jtpファイルに全てのテンプレートの内容及び場所が記されています。テ ンプレートを変更する際は、バックアップを取っておくことを推奨します。 サービスのレベルでは、Template Properties Fileプロパティを設定することでサービス 全体に適用されるテンプレートを作成することができます。 グループ単位の設定では、Template Properties Fileプロパティを設定することでサービ ス・レベルでの設定をオーバーライドすることができます。特定のページのみ独自の設 定が必要な場合などに使用してください。 Attention: UIXで使用するテンプレートと、JHeadstartテンプレートを混同 しないよう注意してください。 1. JHeadstartテンプレートは.jjtや.jutといった拡張子を持ち、テンプレ ートディレクトリに存在します。これらのテンプレートはアプリケー ションの生成時のみに使用され、実行時には使用されません。 2. UIXテンプレートは拡張し.uitを持ち、WEB-INFディレクトリに存在 します。このテンプレートは実行時に使用されます。 Example ここでは、テンプレートの使い方の例としてルック&フィールのカスタマイズを行いま す。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-87 1. Formレイアウトのページのボタン順序を確認してください。左側に「新規」ボ タン、右側に「保存」ボタンが表示されます。この順序を入れ替えてみます。 2. JhsTemplates.jtpをJhsTemplatesCustom.jtpとしてコピーします。Template Properties FileプロパティをJhsTemplatesCustom.jtpに変更します。 3. JhsTemplatesCustom.jtp.のの以下の箇所を変更します: 変更前:dataPage=template/dataPage 変更後:dataPage=template/dataPageCustom 4. dataPage.jutをdataPageCustom.jutとしてコピーします。(JSPを使用する場合は jjtファイルになります) 5. dataPageCustom.jutをJDeveloperで開きます。$NEW_BUTTON$プレースホル ダを$SAVE_BUTTON$プレースホルダの下に移動します。 6. アプリケーションを再生成すると、ボタンの順序が変更されます。 Use of properties in templates アプリケーション・ストラクチャ・ファイルに存在する全てのプロパティはテンプレー トでも使用することができます。例えば、グループのDisplay Titleプロパティの値を表 示したい場合は、$GROUP_DISPLAY_TITLE$プレースホルダをテンプレートの任意の 場所に配置します。他にも以下のプレースホルダが使用可能です: 1. $GROUP_<グループ・プロパティ名>$ は、グループのプロパティに対応しま す。 2. $SERVICE_<サービス・プロパティ名> は、サービスのプロパティに対応しま す。 3. $PARENT_<グループ・プロパティ名>$ は、親グループのプロパティに対応し ます。 4. $LOOKUP_<ルックアップ・プロパティ名>$ は、ルックアップのプロパティに 対応します。 5. $CHILD_GROUP_<子グループ番号>__<グループ・プロパティ名>$ は、子グ ループのプロパティに対応します。子グループの番号は1から始まります。 6. 各プレースホルダーの接頭辞に$NLSを追加すると、JHeadstartはエントリをリ ソース・バンドルに追加します。 さらに2つの特殊なトークンが存在します。 3-88 JHeadstart Application Generator JHeadstart Developer’s Guide 1. $GROUP_NR$ は、アプリケーション・ストラクチャ・ファイルにおけるグル ープのシーケンス番号です。 2. $CHILD_GROUP_<子グループ番号>_EXISTS$ は、該当する子グループが存在 するか否かによりtrueかfalseを返します。 アプリケーション・ストラクチャ・ファイルをJDeveloperエディタで開けば、プロパテ ィの名称を取得することができます。 XMLの属性を少々変更すれば、プレースホルダ名を導出することができます。例えば、 viewObjectUsageはVIEW_OBJECT_USAGEとなります。 Overriding token generation ジェネレータ・テンプレートには、生成プロセスをコントロールする要素も含まれてい ます。例えば、トークン$FORM_ITEMS$はフォームが生成される箇所を指定します。 デフォルトのトークンは以下の手順でオーバーライドすることができます。 1. JhsTemplates.jtpまたはグループのテンプレートファイルにトークンを追加しま す。トークンの値は、生成されるアイテムのコードが存在する場所となりま す。 例:FORM_ITEMS=template/mycustomform.uix 2. template/mypostgenchange.uixを編集します。 この手順は、生成後に行った編集を保存するのに適しています。最初の生成後に加えた 変更箇所のみを保存(例:mypostgenchange .uix)し、グループのテンプレートを定義 した後で上記手順の様にFORM_ITEMSをオーバーライドしてください。これにより、 アプリケーションを再生成しても変更が保持されます。 Custom properties and templates 本セクションでは、生成されたページにヘルプ用のエリアを追加する方法を説明しま す。また、カスタム・プロパティを使って生成されたページに情報を追加する方法も解 説します。まず生成されたページを変更し、その後テンプレートの変更を行います。 1. JHeadstart Developer’s Guide 生成された任意のUIXファイルをJDeveloperのビジュアル・エディタで開きま す。 JHeadstart Application Generator 3-89 2. ナビゲータで`standardPageLayout’エレメント下の`standardPageLayout named Children’ノードを開きます。 3. `end’にcontentContainerを挿入します: 4. contentContainerにstyledTextエレメントを挿入します。 3-90 5. styledTextエレメントのtextプロパティに"$GROUP_PROPERTY_1$"と入力しま す。 6. UIXページのソースで、上記手順により追加されたコードの箇所を確認しま す。以下のコードが追加されています。 <end> <contentContainer> JHeadstart Application Generator JHeadstart Developer’s Guide <contents> <styledText text="$GROUP_PROPERTY_1$"/> </contents> </contentContainer> </end> 行:</templates:standardPageLayout>の上にあります。 これで、生成されたページのカスタマイズは完了です。次はJHeadstartテンプレートに 対しても同様の変更を加え、全てのページに変更が適用されるようにします。 1. JhsTemplates.jtpをJhsTemplatesCustom.jtpとしてコピーします。グループの Template Properties FileプロパティをJhsTemplatesCustom.jtpに変更します。 2. JhsTemplatesCustom.jtpを変更します。 変更前:dataPage=template/dataPage 変更後:dataPage=template/dataPageCustom 3. dataPage.jutをdataPageCustom.jutとしてコピーします。JSPを使用する場合 は.jjtファイルを使用してください。 4. dataPageCustom.jutを開き、以下の行: </templates:standardPageLayout> の上に、生成されたページに追加されたコードをコピー&ペーストします。. 5. JHeadstartベース・グループのプロパティCustom Property 1に値を入力しま す。 6. アプリケーションを生成します。JAGはCustom Property 1に入力したテキスト をページに配置します。 カスタムプロパティを使用することで、生成されたページに画像やボタン、タイトル、 テキスト等を自由に追加することができます。手順はテンプレートに $GROUP_PROPERTY_*$プレースホルダを追加し、アプリケーション・ストラクチャ・ ファイル・エディタでプロパティを入力するだけです。 Expression Language in Custom Properties プロパティでELを使用することもできます。 JHeadstart Developer’s Guide 1. Custom Property 1の値を”Output of EL: ${nls.ADVANCED_SEARCH}”に変更 します。 2. ページを生成します。 JHeadstart Application Generator 3-91 以下のようなページが生成されます: Specifying the overall Look and Feel using UIX Templates アプリケーションの外観はUIXにより決定づけられていますが、UIXテンプレートを変 更することでカスタマイズが可能です。 テンプレートを使用する利点は以下の通りです: 1. ルック&フィールの定義を行うのが一度で済み、その定義がアプリケーション 全体に適用されます。 2. テンプレートを変更・新規作成することで、独自のルック&フィールを容易に 適用することができます。 Attention: カスタムのルック&フィールを実装するにはJHeadstart及びビュ ー・テクノロジの知識が必要となるため、決して易しいタスクではありませ ん。 JHeadstartは多くのテンプレートファイルを使用します: jheadstartLibrary.uit このファイルには、他のどのテンプレートファイルを使用するか、という情報が 含まれています。 standardPageLayout.uit 全てのページは、このテンプレートを使用します。 これらのテンプレートを変更するか、新規のテンプレートを作成し、テンプレートライ ブラリに追加することで独自のルック&フィールを作成することができます。 全てのテンプレートファイルは、サービスのAll template files, should be located in the UIX folder you have specified in the JS P/UIX Common Virtual Directoryプロパティで 設定したUIXフォルダにあります。JAGによって生成されたJHeadstartテンプレートも このフォルダに置かれます。 テンプレートの作成方法については、JDeveloperオンラインヘルプにあるUIX Developers Guideを参照してください。 Reference: 以下の`How To create a Look and Feel for ADF UIX’も参照してく ださい。 http://www.oracle.com/technology/products/jdev/howtos/10g/adf_uix_laf _ht/index.html 3-92 JHeadstart Application Generator JHeadstart Developer’s Guide Specifying the overall Look and Feel for your JS P application JSPアプリケーションの外観はアプリケーション・ストラクチャ・ファイルで指定した スタイル・シート(CSS)及びいくつかのインクルード・ファイルで決定されます。 JHeadstartに付属するCSSやJSPインクルード・ファイルをカスタマイズすることで独自 のルック&フィールを作成することができます。本章はCSSやJSPインクルード・ファイ ルの使用方法については解説しませんが、JHeadstartを使用した簡単なカスタマイズの 例を紹介します。 Change the Corporate or Product Branding JSPインクルード・ディレクトリにあるheader.jspを変更することで、ロゴ等の変更がで きます。 Example: Change header image <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> <table id="header" width="100%"> <tr> <td align="left"> <img src="<c:out value='${applicationScope.requestContextPath}/images/<your image here>'/>" alt="Oracle" border="0"> </td> </tr> <tr> <td align="left"> <font class="header"> <application name here>/font> </td> </tr> </table> <br/> Including Copyright コピーライトはfooter.jspファイルに含まれます。 Example: <table id="footer" width="100%" class="footer"> <tr> <td align="left"> <br/> © <copy right message here>. All rights reserved. </td> </tr> </table> JHeadstart Developer’s Guide JHeadstart Application Generator 3-93 Internationalization JAGはリソース・バンドルを生成してくれるため、英語以外の言語や複数言語対応のア プリケーションを作成する手助けとなります。 Generating the application in a specific language デフォルトでは、アプリケーションは英語(言語コード:en)で生成されます。 JHeadstartは、他にも以下の言語をサポートします。将来のバージョンではさらに言語 が追加される可能性があります。 Brazilian Portuguese (pt-BR) Croatian (hr) Dutch (nl) French (fr) German (de) Japanese (ja) Korean (kr) Norwegian (no) Serbian (sr) Slovenian (sl) Spanish (es) アプリケーション・ストラクチャ・ファイルでいずれかの言語を指定すれば、リソー ス・バンドルは翻訳されて生成されます。この時、ビュー・オブジェクトやタイトルは その言語で記述されているとみなされます。 他の言語が必要になった場合の手順は以下の通りです: 3-94 1. ブラウザの言語を変更し、言語コードを調べます。 2. サービスのGenerator Language Codeプロパティに言語コードを指定します。 3. サービスのGenerator Country Codeプロパティに国コードを指定します。 4. リソース・バンドルのエントリを翻訳します。 5. アプリケーション・ストラクチャ・ファイルの`Override NLS Resource Bundles’ をfalseに設定します。これにより、JHeadstartがキーを上書きするこ とを防止することができます。 6. <HTMLルート・ディレクトリ>\jheadstart\messages.jsを編集し、メッセージ を追加します。 7. JSPカレンダを変更します。(UIXカレンダは多くの言語に対応済みです)次のセ クションを参照してください。 8. リソース・バンドルにJHSメッセージのエントリを追加します。 (例については jhsadfrt_source.zip内のJhsUserMessages_<language>.javaファイルを参照して ください) JHeadstart Application Generator JHeadstart Developer’s Guide Attention: 特殊文字を使用する言語の場合、リソースバンドルはproperties ファイルではなくjavaファイルを使用してください。また、Javaリソース・ バンドルにエントリを追加したらコンパイル(リビルド)するのを忘れない でください。コンパイルを行わなかったら、JAGは次回の実行時に変更した リソース・バンドルを上書きしてしまいます。 9. ユーザーがOSとブラウザのロケールを合わせていることを確認してください。 これは、機能によりどちらのロケールを参照するかが異なるためです。 エンコーディングを変更する場合は、以下の手順に従ってください: 1. JHeadstartはブラウザやOSの言語により、キャラクタ・エンコーディングを動 的に変更します。特定のキャラクタセットに固定したい場合は、web.xmlファ イルを以下のように変更します: <filter> <filter-name>CharacterEncodingFilter</filter-name> <display-name>CharacterEncodingFilter</display-name> <filterclass>oracle.jheadstart.controller.CharacterEncodingFilter</ filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> 2. JDeveloperのエンコーディングを変更します。「ツール」− 「設定」− 「環 境」にて、「エンコーディング」をUTF-8に設定します。JHeadstartは、 JDeveloperのエンコーディング設定をアプリケーション・ストラクチャ・ファ イルに適用します。また、全てのUIモデルもこのエンコーディングに従いま す。 3. JHeadstartジェネレータ・テンプレートのエンコーディングをUTF-8に変更しま す。テンプレートの場所についてはUsing Generator Templatesを参照してくだ さい。テンプレートのエンコーディング設定は、生成されたページに影響しま す。 4. ドメイン定義ファイルのエンコーディングを変更します。 Suggestion: 正しく表示されない特殊文字がある場合は、Unicodeの使用を見 当してください。native2asciiツール ( http://java.sun.com/j2se/1.3/docs/tooldocs/win32/native2ascii.html) を 使用することにより、適切に変換できます。 また、下記の場所にJDeveloperエクステンションもあります: http://www.oracle.com/technology/products/jdev/htdocs/partner s/addins/exchange/native2ascii/index.html Translating the JS P Calendar JSPで使用するカレンダはサードパーティ製となります。現状では前述の一覧にある言 語しかサポートしていないため、他の言語を使用する場合はプロジェクトディレクトリ の/web/jheadstart/calendarにあるcalendar.jsを編集する必要があります。 月の訳はgetMonthSelectファンクションで指定します。例えば、ドイツ語の部分は 以下のようになっています: // IF GERMAN JHeadstart Developer’s Guide JHeadstart Application Generator 3-95 else if (selectedLanguage == "de") { monthArray = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'); } 他の言語の場合も同様の形式で記述してください。SelectedLanguageは使用するシステ ムの言語設定を参照します( Javascriptのnavigator.language() (Netscape) または navigator.userLanguage (IE))。言語名の最初の2文字が言語を特定します。残りの3 文字は言語のサブタイプ(例:en_us)を刺します。 曜日の訳はcreateWeekdayListで指定します。ドイツ語の場合は以下のようになりま す: // IF GERMAN else if (selectedLanguage == "de") { weekdayList = new Array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'); weekdayArray = new Array('So','Mo','Di','Mi','Do','Fr', 'Sa'); } こちらも、上記形式のコードを追加してください。 最後に「本日」という単語の訳が必要となります。getTodayPhraseファンクション で指定してください。 Generating a multi-language application 複数言語対応のアプリケーションが必要な場合は、以下の手順に従ってください。 1. アプリケーション・ストラクチャ・ファイルにて`Generate NLS enabled Prompts and Tabs’ をtrueに設定します。これにより、言語に依存するテキスト 全てがリソース・バンドルに含まれます。 2. JAGを対応する言語・国の数だけ実行します。 3. 対応する言語に、前セクションの一覧に無い言語がある場合は前セクションの 手順を行う必要があります。 Suggestion: いくつかのメッセージ( JHS-エラーやJBO-エラー) は、エラーk − どをリソースバンドルのエントリに追加することで対応できます。リソー スバンドルを変更した場合は、コンパイル(リビルド)を必ず実行してくだ さい。 3-96 JHeadstart Application Generator JHeadstart Developer’s Guide What was generated for what purpose 本セクションでは、JHeadstartによって生成されるファイルについて説明します。 When generating for the first time in a proj ect JHeadstartはテンプレートをベースに生成を行います。これらのファイルは、プロジェ クトにまだ存在しない場合のみ追加されます。 FileType Location Purpose JhsTemplates.jtp /properties JHeadstart テンプレートファイルの名称及び場所を指定します。 *.jjt and *.jut /template ページを生成するためのテンプレートです。Using Generator Templates 参照 First and next time generation JHeadstartはView及びModelレイヤのための以下のファイルを生成します。 File Type /File Location When Purpose UIX pages UI Pages Virtual Directory property at service level View Type is UIX User Interface XMLを使用してアプリケーシ ョンのページを定義します。. UIT templates / UI Pages Virtual Directory property at service level View Type is UIX UIXによって使用されるテンプレートで す。 dateformat.properties Java Source Path of JDeveloper project Always サービスのDate Format及びDateTime Formatプロパティで設定された日付フォー マットです。 DataBindings.cpx Java Source Path of JDeveloper project Always ADF Modelレイヤのファイルです。 *UIModel.xml View Base property at service level Always ADF Data Bindingsの定義情報です。 NLS Resource Bundle NLS Resource Bundle property at service level Always 言語依存テキストを保持するリソー ス・バンドルです。 JSP Pages UI Pages Virtual Directory property at service level View Type is JSP アプリケーションのJSPファイルです。 JSP includes JSP/UIX Common Virtual Directory property at service level View Type is JSP アプリケーションのJSPファイルです。 JHeadstart Developer’s Guide JHeadstart Application Generator 3-97