ユーザーのプロジェクト管理タスクをサポートするために、プロジェクトのレポートとフォームのページを開発します。
このレッスンについて
これまでに、アプリケーションの作成ウィザードを使用して、DEMO_PROJECTS
表のレポートとフォームを生成しました。以前のレッスンで、これは未加工のHomeおよびTeam Membersのページに類似した一部のデフォルト出力を生成しました。ただしプロジェクト・レポートが対話グリッドを使用し、プロジェクト・フォームが別のページ(モーダル・ダイアログではありません)である点が異なります。
Maintain Projectフォームは、マスター・ディテール・フォーム(略して「マスター・ディテール」)です。マスター・ディテールは、データベースの2つの表の1対多関係を示します。通常、マスター・ディテール・フォームには、1つのHTMLフォーム内にマスター行および複数のディテール行が表示されます。このフォームを使用すると、2つの表またはビューに対し、値の挿入、更新および削除を行うことができます。
このレッスンでは、共有コンポーネントに共有値リスト(LOV)を作成し、ページ・デザイナでそれをレポートに追加する方法を学習します。また、統一した外観になるようにレポートを調整し、Team Membersレポートのように見えるようにします。
フォームについては、開発者ツールバーのライブ・テンプレート・オプションを使用して、ランタイムでページを直接変更する方法を学習します。続いてページ・デザイナで、静的な値リスト、動的アクションおよび検証を作成する方法を学習します。
最後に、ページ・デザイナで、ページ同士でサブ・リージョンをコピーする方法を学習します。
ここから開始:
Basic Projects App Export - Topic 5.sql前のレッスンを完了していない場合、付録「作業領域へのアプリケーションのインストール」を使用して上述のSQLスクリプトを作業領域にインポートし、このレッスンから先に学習を続けられます。このスクリプトは、このチュートリアル付属の.zipファイルを解凍した場所の/filesサブディレクトリにあります。
まず、DEMO_PROJECTS
のSQL問合せを更新してプロジェクト・レポート・ページを更新し、主レポートでデフォルトの表示列を再構成します(Team Membersページに対して行ったことに似ています)。
Team Membersページとは異なり、プロジェクト・レポート・ページは対話グリッドを使用します。対話グリッドは対話モード・レポートに似ていますが、より多くの機能を備えており、データ・セットとのより高度な対話をサポートします。
SQL問合せと対話グリッドの列表示を更新するには、次のステップを実行します。
ランタイム内の無関係な列を削除するには、次のステップを実行します。
2つの列はデフォルトでソートできないので(NameとDescription)、この機能を有効化してください。
対話グリッドで列のソートを有効化するには、次のステップを実行します。
プロパティ・エディタでソート属性を検索するには、「フィルタ・プロパティ」に検索を入力します。
ランタイムを見ると、プロジェクト・レポートのProject Lead列には、現在ユーザーの名前でなく数値のIDが表示されています。これは、技術的には正確ですが、ユーザー・フレンドリではありません。
Project Lead IDは、DEMO_PROJECTS
表から導入されます。ただし、DEMO_TEAM_MEMBERS
表には、各製品リーダーのIDに関連付けられた名前があります。数値IDをチーム・メンバーの名前に変換するには、2つの表の間に接続を作成する必要があります。
Project Lead列に2つの表を接続し、共有の値リスト(LOV)を作成して、Projectsページの対話グリッドに追加します。
「共有コンポーネント」メニューにアクセスするには、次のステップを実行します。
共有LOVを作成するには、次のステップを実行します。
これで値リストを作成できました。次に、それをProjects対話グリッドのPROJECT_LEAD列に追加します。
ページ・デザイナの列に値リストを追加するには、次のステップを実行します。
アプリケーションの作成ウィザードはページに自動的にボタンを生成しますが、ユーザーに最適になるように、常に必要に応じて評価、再構成してください。
「作成」ボタンを「ブレッドクラム」リージョンに移動します(Team Membersレポート・ページで行った操作に似ています)。
さらに、対話グリッドの外観テンプレートを対話モード・レポートのものに変更して、外観がアプリケーション全体で整合的になるようにします。
ページ・デザイナでボタンを移動するには、次のステップを実行します。
Projectsリージョンの外観テンプレートを変更するには、次のステップを実行します。
ランタイムで、対話グリッドを更新して読みやすくしてください。
ページ上の位置に固定させることで、プロジェクトの名前に優先順位をつけます。続いて、グリッドの端に「説明」列を移動し、「アクション」メニューの「データ」サブメニューを使用してすべての列にデフォルトのソート・ルールを適用します。
対話グリッドで列を固定するには、次のステップを実行します。
列の順序を変更するには、次のステップを実行します。 ヒント:
作成日でレコードをソートするには、次のステップを実行します。
アプリケーションの操作性にとって整合性は重要です。Maintain Team Memberモーダル・ダイアログの外観と機能に適合するように、Projectフォーム・モーダル・ダイアログのプロパティを更新します。チュートリアルのここまでで、新しいページに同じ組み合せの設定を適用してきたので、これについては多少ご存知でしょう。
開発者ツールバーのライブ・テンプレート・オプションを使用してランタイムでフォームの外観を変更し、続いてページ・デザイナに切り替えてより細かい変更を行います(たとえばボタンの移動やフィールドの条件変更)。
Maintain Projectページに移動するには、次のステップを実行します。
ライブ・テンプレート・オプションを使用してページを更新するには、次のステップを実行します。
Projectsレポートの場合、「ブレッドクラム」リージョンのページの右上に「作成」ボタンを移動しました。Maintain Projectフォームでは同じスペースが空である点に注意してください。ページ・デザイナでの「作成」ボタンのデフォルトの位置はページの右上隅ですが、プレースホルダにはいかなるボタンでも配置できます(特に、今のところ何もそこにないため)。
一部のフィールドを必須に変更し、「Project Lead」フィールドにTEAM MEMBERS LOVを追加する必要があります(Maintain Team Memberフォームに対して行った変更に似ています)。
まずボタンから始めます。
プロジェクト・エントリのナビゲーション・ボタンを「作成」位置に移動するには、次のステップを実行します。
「名前」フィールドを必須にするには、次のステップを実行します。
Project Leadフィールドに値リストを追加するには、次のステップを実行します。
現在、プロジェクトを更新するためには、「ステータス」フィールドにユーザーが手動で単語「割当て済」 「進行中」または「完了」のいずれかを入力する必要があります。このプロセスは低速で、ヒューマン・エラーが起こりやすいものです。このフィールドを、選択可能なオプションのリストに変換しましょう。
以前に、2つの表を問い合せて、「Project Lead」フィールドの数値IDを名前に置換する動的リスト(TEAM MEMBERS)を作成しました。ステータス情報は1つの表に収められるため、Projectステータス・リストにはより単純な静的リスト要素を使用できます。
可能なオプションのリストを作成して「Maintain Project」フォームの「ステータス」フィールドに適用します。
静的値のリストを定義するには、次のステップを実行します。
プロジェクトが「完了」に更新される日付をユーザーに入力させるのが、適切な業務プラクティスです。
プロジェクトのステータスが「完了」に変更された場合に「完了日」を必須にするには、次のステップを実行します。
アイテムが必須の場合はしばしば、プロパティ・エディタで「外観: テンプレート」を「必須」に、「検証: 必須の値」を「はい」に更新します。ただし、「必須の値」属性は変更しないでください。アイテムが必須であるのはステータスが「完了」のときのみで、他のステータスの場合は必須でないからです。
次に、後でカスタム検証を追加してこのビジネス・ルールに対応します。
Oracle Application Expressでの動的アクションは、JavaScriptやAJAXを使用しないで宣言的にクライアント側動作を定義するために使用されます。そのかわり、Application Expressエンジンは、宣言に基づいて必要なコードを実装します。
P5_STATUSアイテムに動的アクションを追加して、「完了」に設定されたら「完了日」フィールドが表示されるようにします。
動的アクションを作成するには、次のステップを実行します。
「表示」、「有効化」および「ツリーを開く」などの動的アクション・タイプの場合、対応する反対のアクションも含めることが重要です。それにより、WHEN条件がTrueと評価された場合に影響を受ける要素が一定の方向に設定され、WHEN条件がFalseと評価された場合に反対に設定されます。ここでは、P5_STATUSが「完了」と等しい場合にP5_COMPLETED_DATEアイテムが表示され、他のいずれかのステータスが選択された場合は非表示にされます。反対のアクションを追加するには、次のステップを実行します。
完了日の検証を追加して、ユーザーがステータスを「完了」に変更したら完了日の追加も必須になるようにします。
完了日の検証を追加するには、次のステップを実行します。
完了日が先の日付でないことの検証を追加するには、次のステップを実行します。
これまでのトピックで、「Maintain Team Member」フォームに対して「Audit Details」というサブ・リージョンを作成しました。そのリージョンに含まれる4つのアイテムは「Maintain Project」ページのものと同じで、まったく同じデータベース列に関連付けられているため、「Maintain Project」フォームにコピーすることで時間を多少節約できます。リージョンをコピーすると、以前に定義したテンプレートとテンプレート・オプションもコピーされます。
まず、「Maintain Project」フォームの4つの既存の監査詳細列を削除し、「Maintain Team Member」フォームから「Maintain Project」フォームに「Audit Details」サブ・リージョンをコピーして、コピー先に完全に合うように変更します。
注意:
監査列を削除しない場合、コピーされた「Audit Details」リージョンのアイテム名は一意の名前に変更され、すべてのページ・アイテムが確実に一意の名前を持つようにされます(たとえば、P5_CREATEDがその宛先にコピーされると、P5_CREATED_1に名前を変更されます)。この自動的な名称変更はページ処理を中断しませんが、この手法はお薦めしません。「Maintain Project」フォームの4つの既存の監査アイテムを削除するには、次のステップを実行します。
ページ3からページ5に「Audit Details」サブ・リージョンをコピーするには、次のステップを実行します。
「Maintain Project」フォームの「Audit Details」サブ・リージョンを更新するには、次のステップを実行します。
「Projects」レポートと「Maintain Project」フォームに実質的な変更を加えました。次のレッスンでは、フォームにさらにリージョンを追加して、ユーザーがプロジェクトの詳細をさらに表示して、プロジェクト管理を高度に制御できるようにします。
次のレッスンに進みます。