このチュートリアルでは、プロジェクトに関連する問題の割当て、ステータスおよび進捗を追跡するアプリケーションを作成およびデプロイする方法を説明します。また、プロジェクトの計画、基礎となるデータベース・オブジェクトの作成、デモンストレーション・データのロード、機能豊富なユーザー・インタフェースの作成など、堅牢な問題追跡アプリケーションの作成に必要なすべてのステップを実際に行います。
注意: このチュートリアルを完了するには、約4、5時間かかります。特定の演習を試す前に、資料に慣れるため、最初にドキュメント全体を通して読むことをお薦めします。 |
この項の内容は次のとおりです。
スケジュールどおりに予算内でプロジェクトを完了するには、効率的にプロジェクトを管理する必要があります。すべてのプロジェクトには、追跡し、優先順位を付けて管理する必要がある複数の問題があります。
このビジネス例では、MRVL Companyには、会社が利益をあげるためにスケジュールどおりに完了する必要があるいくつかのプロジェクトがあります。プロジェクトが期限内に完了しないと、減収につながります。会社のプロジェクト・リーダーは、手動でノートブックにステータスを記録したり、テキスト文書で問題を編成したり、スプレッドシートを使用して問題を分類するなど、様々な問題追跡方法を使用します。
プロジェクト・リーダーは、ホスティングされたアプリケーションをOracle Application Expressに作成することで、一元的に問題を簡単に記録および追跡できます。この方法によって、プロジェクト・リーダーが必要なデータのみにアクセスし、致命的な問題がに対する処置が行われているかどうかを簡単に管理できるようになります。
Oracle Application Expressアプリケーションで開発を開始する前に、まず、アプリケーション要件を定義する必要があります。その後、定義した要件を使用して、データベース、およびユーザー・インタフェースでデータを受け入れて表示する方法のアウトラインを設計します。
このビジネス例では、プロジェクト・リーダーが、追跡の必要がある情報、セキュリティ要件、データ管理機能およびデータの表示方法を定義する要件を決定します。
この項の内容は次のとおりです。
現在、情報の追跡方法は、プロジェクト・リーダーによって若干異なります。同時に、すべてのプロジェクト・リーダーは、次の情報がアプリケーションに必要であると考えています。
問題のサマリー
問題の詳細
問題を発見したユーザー
問題が発見された日付
問題が関連するプロジェクト
問題を割り当てられたユーザー
問題の現在のステータス
問題の優先順位
目標とする解決日
実際の解決日
進捗レポート
解決のサマリー
プロジェクト・リーダーは、すべての情報にアクセスできるすべてのユーザーを監視する必要があるため、次のアクセス・ルールに従っています。
各チーム・メンバーおよびプロジェクト・リーダーが一度に割り当てられるのは、1つのプロジェクトのみです。
各チーム・メンバーおよびプロジェクト・リーダーは、1つのプロジェクトに割り当てられる必要があります。
マネージャは、特定のプロジェクトには割り当てられません。
マネージャのみがプロジェクトおよびユーザーを定義および管理できます。
すべてのユーザーが新しい問題に取り組むことができます。
割り当てられた後は、割り当てられたユーザーまたはプロジェクト・リーダーのみがその問題に関するデータを変更できます。
マネージャには、特定の問題の詳細にアクセスしなくても、データのサマリーを表示するビューが必要です。
次に、プロジェクト・リーダーは、システムに情報を入力する方法を決定します。このプロジェクトでは、ユーザーは、次の操作を行う権限が必要です。
問題の作成
問題の割当て
問題の編集
プロジェクトの作成
プロジェクトの管理
ユーザーの作成
ユーザー情報の管理
プロジェクト割当ての管理
データをアプリケーションに入力した後、ユーザーはそのデータを表示する必要があります。ユーザーが次の内容を表示できるようにする必要があることをチームで決定します。
プロジェクトごとのすべての問題
プロジェクトごとの未解決の問題
プロジェクトごとの期限切れ問題(すべてのユーザー用)
最近発見された問題
未割当ての問題
プロジェクトごとの問題のサマリー(マネージャ用)
指定した月ごとの解決済問題
カレンダに示される問題解決日
ユーザーごとの問題解決にかかる日数
最後に、プロジェクト・リーダーは、アプリケーションによって次の特別な機能がサポートされる必要があることを決定します。
問題がユーザーに割り当てられた際に、ユーザーに通知します。
問題が期限切れになった際に、プロジェクト・リーダーに通知します。
データベース要件を定義した後は、これらの要件をデータベースの設計、およびユーザー・インタフェースでデータを受け入れて表示する方法のアウトラインに適用します。このステップでは、基礎となるデータベース内の表に情報を編成する方法について検討する必要があります。「計画およびプロジェクト分析」で示す要件に従って、このプロジェクトでは、3つの表を作成する必要があります。
Projects
: すべての現行のプロジェクトを追跡します。
People
: 問題を処理するために割り当てることが可能なユーザーに関する情報が含まれています。
Issues
: 問題に関するすべての情報(関連するプロジェクト、問題に割り当てられたユーザーなど)を追跡します。
これらの表をサポートするには、表に加えて、順序、トリガーなどの追加のデータベース・オブジェクトも作成する必要があります。すべての表にシステム生成の主キーを使用すると、カスケード更新を実行しなくてもすべてのデータを編集できます。
この項の内容は次のとおりです。
各プロジェクトには、プロジェクト名、プロジェクトの開始日、目標とする終了日、実際の終了日の列を含める必要があります。これらの日付列は、未処理の問題がプロジェクト終了日に間に合うかどうかを確認するのに役立ちます。 表14-1に、Projects表に含まれる列を示します。
表14-1 Projects表の詳細
列名 | タイプ | サイズ | NOT NULL? | 制約 | 説明 |
---|---|---|---|---|---|
project_id |
integer |
該当なし |
はい |
主キー |
数値による各プロジェクトの一意の識別情報です。 トリガーを使用して順序に従って移入されます。 |
project_name |
varchar2 |
100 |
はい |
一意キー |
各プロジェクトの一意の英数字名です。 |
start_date |
date |
該当なし |
はい |
なし |
プロジェクト開始日です。 |
target_end_date |
date |
該当なし |
はい |
なし |
目標とするプロジェクト終了日です。 |
actual_end_date |
date |
該当なし |
いいえ |
なし |
実際の終了日です。 |
各ユーザーには、定義された名前およびロールがあります。プロジェクト・リーダーおよびチーム・メンバーには、プロジェクトも割り当てられています。カレント・ユーザーに組織内のロールを割り当てる場合は、ユーザー名に電子メール・アドレスを使用します。
表14-2に、People表に含まれる列を示します。
表14-2 People表の詳細
列名 | タイプ | サイズ | NOT NULL? | 制約 | 説明 |
---|---|---|---|---|---|
person_id |
integer |
該当なし |
はい |
主キー |
各ユーザーを識別する数値IDです。 トリガーを使用して順序に従って移入されます。 |
person_name |
varchar2 |
100 |
はい |
一意キー |
各ユーザーを識別する一意の名前です。 |
person_email |
varchar2 |
100 |
はい |
なし |
ユーザーの電子メール・アドレスです。 |
person_role |
varchar2 |
7 |
はい |
チェック制約 |
各ユーザーに割り当てられたロールです。 |
注意: このアプリケーションは、この演習用に簡略化されています。通常、ユーザー・データはより複雑で、多くの場合、企業の人事システムから抽出されます。また、通常、ユーザーは一度に複数のプロジェクトに取り組みます。ユーザーに割り当てるロールを動的にする必要がある場合は、People表に関連する外部キーを持つ個別の表としてロールを実装します。 |
プロジェクト・リーダーは、アプリケーション要件の定義時に、各ユーザーに割り当てた個別の問題を追跡することを決定しました。問題は、監査証跡を提供する追加の列とともに列に含まれます。監査証跡では、問題を作成したユーザー、問題が作成された日付、問題を最後に変更したユーザーおよびその変更が行われた日付が追跡されます。
表14-3に、Issues表に含まれる列を示します。
表14-3 Issues表の詳細
列名 | タイプ | サイズ | NOT NULL? | 制約 | 説明 |
---|---|---|---|---|---|
issue_id |
integer |
該当なし |
はい |
主キー |
問題を識別する一意の数値IDです。 トリガーを使用して順序に従って移入されます。 |
issue_summary |
varchar2 |
200 |
はい |
なし |
問題の簡潔なサマリーです。 |
issue_description |
varchar2 |
2000 |
いいえ |
なし |
問題の詳細です。 |
identified_by |
integer |
該当なし |
はい |
「People」への外部キー |
問題を発見したユーザーです。 |
identified_date |
date |
該当なし |
はい |
なし |
問題が発見された日付です。 |
related_project |
integer |
該当なし |
はい |
「Projects」への外部キー |
問題に関連するプロジェクトです。 |
assigned_to |
integer |
該当なし |
いいえ |
「People」への外部キー |
この問題を所有しているユーザーです。 |
status |
varchar2 |
8 |
はい |
チェック制約 |
問題のステータスです。新しい場合は |
priority |
varchar2 |
6 |
いいえ |
チェック制約 |
問題の優先順位です。 |
target_resolution_date |
date |
該当なし |
いいえ |
なし |
目標とする解決日です。 |
progress |
varchar2 |
2000 |
いいえ |
なし |
問題の進捗です。 |
actual_resolution_date |
date |
該当なし |
いいえ |
なし |
問題の実際の解決日です。 |
resolution_summary |
varchar2 |
2000 |
いいえ |
なし |
解決のサマリーです。 |
created_date |
date |
該当なし |
はい |
なし |
トリガーによって移入されます。 |
created_by |
varchar2 |
60 |
はい |
なし |
この問題を作成したユーザーです。 |
last_modified_date |
date |
該当なし |
いいえ |
なし |
トリガーによって移入されます。 |
注意: 実際のアプリケーションでは、より高コストの監査を行う必要があります。たとえば、最後の変更のみでなく、データに対して行われたすべての変更を追跡する必要があります。データに対して行われたすべての変更を追跡するには、Issues表にリンクする追加の表が必要です。問題に割り当てられる有効な優先順位を動的にする必要がある場合は、Issues表に関連する外部キーを持つ個別の表を追加する必要があります。 |
アプリケーション作成の最初のステップとして、データベース・オブジェクトを作成します。
この項の内容は次のとおりです。
Oracle Application Expressにオブジェクトを作成するにはいくつかの方法があります。次の選択肢があります。
「オブジェクト・ブラウザ」でのオブジェクトの作成: 「オブジェクト・ブラウザ」を使用して表、ビュー、索引、順序、タイプ、パッケージ、プロシージャ、ファンクション、データベース・リンクのトリガー、マテリアライズド・ビューおよびシノニムを作成します。ウィザードでは、選択したデータベース・オブジェクトを作成する場合に必要な選択肢の概要を確認できます。「オブジェクト・ブラウザ」でオブジェクトを作成するには、「SQLワークショップ」、「オブジェクト・ブラウザ」にナビゲートし、「作成」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』の「オブジェクト・ブラウザを使用したデータベース・オブジェクトの管理」を参照してください。
SQLコマンドの実行: SQLコマンドを実行するには、それらのコマンドを「SQLコマンド」に入力または貼り付けます。「SQLコマンド」にアクセスするには、「作業領域」ホームページで「SQLワークショップ」アイコンをクリックした後、「SQLコマンド」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』の「SQLコマンドの使用」を参照してください。
スクリプトのアップロード: すべての必要なcreate object文を含むスクリプトをSQLの「スクリプト・リポジトリ」にアップロードします。スクリプトをアップロードするには、「作業領域」ホームページで「SQLワークショップ」をクリックし、「SQLスクリプト」をクリックした後、「アップロード」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』の「SQLスクリプトのアップロード」を参照してください。
オンラインでのスクリプトの作成:スクリプトをスクリプト・リポジトリにオンラインで作成します。この演習では、この方法を使用してデータベース・オブジェクトを作成します。スクリプトをオンラインで作成するには、「作業領域」ホームページで「SQLワークショップ」アイコンをクリックし、「SQLスクリプト」を選択した後、「作成」をクリックします。『Oracle Database Application Expressユーザーズ・ガイド』の「スクリプト・エディタでのSQLスクリプトの作成」を参照してください。
この演習では、スクリプトを作成して実行します。
スクリプトを作成してデータベース・オブジェクトを作成するには、次のステップを実行します。
Oracle Application Expressにログインします。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「SQLスクリプト」をクリックします。
「作成」をクリックします。
「スクリプト・エディタ」で、次のステップを実行します。
「スクリプト名」で、DDL for Issue Management Application
と入力します。
「アプリケーション・データベース・オブジェクトのDDLの作成」のデータ定義言語(DDL)をコピーしてスクリプトに貼り付けます。
「保存」をクリックします。
「SQLスクリプト」ページで、DDL for Issue Management Applicationのアイコンをクリックします。
「スクリプト・エディタ」が表示されます。
「実行」をクリックします。
サマリー・ページが表示されます。
再度、「実行」をクリックします。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
「オブジェクト・ブラウザ」を使用してデータベース・オブジェクトを表示できます。
「オブジェクト・ブラウザ」でデータベース・オブジェクトを表示するには、次のステップを実行します。
「作業領域」ホームページに戻ります。「ホーム」ブレッドクラム・リンクをクリックします。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。
ページの左側にある「オブジェクト」リストから、「表」を選択します。
特定のオブジェクトの詳細を表示するには、次の表のいずれかを選択します。
HT_ISSUES
HT_PEOPLE
HT_PROJECTS
参照: 『Oracle Database Application Expressユーザーズ・ガイド』の「オブジェクト・ブラウザを使用したデータベース・オブジェクトの管理」 |
すべての必要なデータベース・オブジェクトを作成した後、表にデータをロードします。データは、SQLスクリプトで使用可能なインポート機能を使用して、手動でロードできます。ただし、次の演習では、SQLスクリプトを使用してデモンストレーション・データをロードします。
「アプリケーション・データベース・オブジェクトのDDLの作成」からコピーしたDDLを確認します。デモンストレーション・データ用の領域を確保するには、主キーに使用されている順序が40から始まっていることに注意してください。BEFORE INSERT
トリガーは、主キー値が指定されていない場合にのみ順序がアクセスされるようにコーディングされています。このため、データをロードするために無効にする必要はありません。
この項の内容は次のとおりです。
Projects表にデータをインポートするには、次のステップを実行します。
「SQLワークショップ」ブレッドクラム・リンクをクリックします。
「SQLスクリプト」をクリックします。
「作成」をクリックします。
「スクリプト・エディタ」に、次のように指定します。
「スクリプト名」に、Load Project Data
と入力します。
「スクリプト」に、次の文をコピーして貼り付けます。
INSERT INTO ht_projects (project_id, project_name, start_date, target_end_date) VALUES (1, 'Internal Infrastructure', sysdate-150, sysdate-30) / INSERT INTO ht_projects (project_id, project_name, start_date, target_end_date) VALUES (2, 'New Payroll Rollout', sysdate-150, sysdate+15) / INSERT INTO ht_projects (project_id, project_name, start_date, target_end_date) VALUES (3, 'Email Integration', sysdate-120, sysdate-60) / INSERT INTO ht_projects (project_id, project_name, start_date, target_end_date) VALUES (4, 'Public Website Operational', sysdate-60, sysdate+30) / INSERT INTO ht_projects (project_id, project_name, start_date, target_end_date) VALUES (5, 'Employee Satisfaction Survey', sysdate-30, sysdate+60) /
「保存」をクリックします。
「SQLスクリプト」ページで、Load Project Dataのアイコンをクリックします。
「スクリプト・エディタ」が表示されます。
「実行」をクリックします。
サマリー・ページが表示されます。
再度、「実行」をクリックします。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
プロジェクトは作成されましたが、プロジェクトをカレントにするには日付を更新する必要があります。これを行うには、別のスクリプトを実行します。
プロジェクトの日付を更新してプロジェクトをカレントにするには、次のステップを実行します。
「SQLスクリプト」ブレッドクラム・リンクをクリックします。
「作成」をクリックします。
「スクリプト・エディタ」で、次のステップを実行します。
「スクリプト名」に、Update Project Dates
と入力します。
「スクリプト」に、次の文をコピーして貼り付けます。
UPDATE ht_projects SET start_date = sysdate-150, target_end_date = sysdate-30 WHERE project_id = 1 / UPDATE ht_projects SET start_date = sysdate-150, target_end_date = sysdate+15 WHERE project_id = 2 / UPDATE ht_projects SET start_date = sysdate-120, target_end_date = sysdate-60 WHERE project_id = 3 / UPDATE ht_projects SET start_date = sysdate-60, target_end_date = sysdate+30 WHERE project_id = 4 / UPDATE ht_projects SET start_date = sysdate-30, target_end_date = sysdate+60 WHERE project_id = 5 /
「保存」をクリックします。
「SQLスクリプト」ページで、Update Project Datesのアイコンをクリックします。
「スクリプト・エディタ」が表示されます。
「実行」をクリックします。
再度、「実行」をクリックします。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
Projects表にデータをロードした後、「People」データをロードできます。Projects表の外部キーのため、「People」データは「Projects」データの後にロードする必要があります。SQLワークショップでスクリプトを作成および実行して、People表にデータをロードします。
People表にデータをロードするには、次のステップを実行します。
「SQLスクリプト」ブレッドクラム・リンクをクリックします。
「SQLスクリプト」ページで、「作成」をクリックします。
「スクリプト・エディタ」で、次のステップを実行します。
「スクリプト名」に、Load People Data
と入力します。
「スクリプト」に、次の文をコピーして貼り付けます。
INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (1, 'Joe Cerno', 'joe.cerno@mrvl-bademail.com', 'CEO', null) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (2, 'Kim Roberts', 'kim.roberts@mrvl-bademail.com', 'Manager', null) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (3, 'Tom Suess', 'tom.suess@mrvl-bademail.com', 'Manager', null) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (4, 'Al Bines', 'al.bines@mrvl-bademail.com', 'Lead', 1) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (5, 'Carla Downing', 'carla.downing@mrvl-bademail.com', 'Lead', 2) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (6, 'Evan Fanner', 'evan.fanner@mrvl-bademail.com', 'Lead', 3) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) values (7, 'George Hurst', 'george.hurst@mrvl-bademail.com', 'Lead', 4) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (8, 'Irene Jones', 'irene.jones@mrvl-bademail.com', 'Lead', 5) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (9, 'Karen London', 'karen.london@mrvl-bademail.com', 'Member', 1) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) values (10, 'Mark Nile', 'mark.nile@mrvl-bademail.com', 'Member', 1) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (11, 'Jane Kerry', 'jane.kerry@mrvl-bademail.com', 'Member', 5) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (12, 'Olive Pope', 'olive.pope@mrvl-bademail.com', 'Member', 2) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (13, 'Russ Sanders', 'russ.sanders@mrvl-bademail.com', 'Member', 3) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (14, 'Tucker Uberton', 'tucker.uberton@mrvl-bademail.com', 'Member', 3) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (15, 'Vicky Williams', 'vicky.willaims@mrvl-bademail.com', 'Member', 4) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (16, 'Scott Tiger', 'scott.tiger@mrvl-bademail.com', 'Member', 4) / INSERT INTO ht_people (person_id, person_name, person_email, person_role, assigned_project) VALUES (17, 'Yvonne Zeiring', 'yvonee.zeiring@mrvl-bademail.com', 'Member', 4) /
「保存」をクリックします。
「SQLスクリプト」ページで、Load People Dataのアイコンをクリックします。
「スクリプト・エディタ」が表示されます。
「実行」をクリックします。
再度、「実行」をクリックします。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
ロードする必要がある最後のデータは「Issues」データです。「People」データの場合と同様に、Issues
表に移入するスクリプトを作成および実行します。
Issues
表にデータをロードするには、次のステップを実行します。
「SQLスクリプト」ブレッドクラム・リンクをクリックします。
「作成」をクリックします。
「スクリプト・エディタ」で、次のステップを実行します。
「スクリプト名」に、Load Issue Data
と入力します。
「スクリプト」に、「問題スクリプトの作成」のスクリプトをコピーして貼り付けます。
「保存」をクリックします。
「SQLスクリプト」ページで、Load Issue Dataのアイコンをクリックします。
「スクリプト・エディタ」が表示されます。
「実行」をクリックします。
再度、「実行」をクリックします。
「スクリプト結果の管理」ページに、実行のためにスクリプトが送信されたことを示すメッセージが表示されます。
アプリケーションをサポートするオブジェクトを作成し、デモンストレーション・データをロードした後、ユーザー・インタフェースを作成します。この演習では、アプリケーション・ビルダーで「アプリケーションの作成」ウィザードを使用してアプリケーションを作成した後で、「計画およびプロジェクト分析」で説明したデータ管理およびデータ表示機能をサポートするページを作成します。
この項の内容は次のとおりです。
「アプリケーションの作成」ウィザード使用して、ユーザーがレポートを表示したり、選択した表のデータをスキーマ内に作成することができるページを含むアプリケーションを作成します。また、先にアプリケーションを作成し、その後、ページを追加することもできます。概要ページのカスタマイズがアプリケーション要件に含まれているため、この演習では、後者の方法を使用します。
アプリケーションを作成するには、次のステップを実行します。
「ホーム」ブレッドクラム・リンクをクリックします。
「作業領域」ホームページで、「アプリケーション・ビルダー」をクリックします。
「作成」をクリックします。
「方法」で、「アプリケーションの作成」を選択して「次へ」をクリックします。
「名前」で、次のステップを実行します。
「名前」に、Issue Tracker
と入力します。
「アプリケーションの作成」で、「最初から」を選択します。
「次へ」をクリックします。
次に、空白ページを追加します。「ページの追加」で、次のように実行します。
「ページ・タイプの選択」で、「空白」を選択します。
「ページの追加」をクリックします。
「次へ」をクリックします。
「タブ」で、「タブなし」を選択して「次へ」をクリックします。
「共有コンポーネント」で、デフォルトの「いいえ」を受け入れて「次へ」をクリックします。
「属性」で、「認証スキーム」、「言語」、「ユーザー言語プリファレンスの派生元」にデフォルトを受け入れて、「次へ」をクリックします。
「ユーザー・インタフェース」で、「テーマ10」を選択して「次へ」をクリックします。
「作成」をクリックします。
アプリケーションを表示するには、次のステップを実行します。
「アプリケーション」ホームページの「アプリケーションの実行」アイコンをクリックします。
プロンプトが表示されたら、作業領域のユーザー名およびパスワードを入力して、「ログイン」をクリックします。詳細は、「アプリケーション認証の概要」を参照してください。
この認証は、新しく作成したアプリケーションのデフォルトのセキュリティの一部です。 図14-1に示すとおり、ホームページが表示されます。
ページにコンテンツはありませんが、「アプリケーションの作成」ウィザードによって次のアイテムが作成されていることに注意してください。
ナビゲーション・リンク: ページの右上にナビゲーション・バー・エントリが表示されます。「ログアウト」によって、ユーザーはアプリケーションからログアウトできます。
開発者リンク: ページに「開発者」ツールバーが表示されます。これらのリンクは、開発者としてログインした場合にのみ表示されます。アプリケーションの実行権限のみを持つユーザーには、これらのリンクは表示されません。
「開発者」ツールバーの「アプリケーション」をクリックして、「アプリケーション」ホームページに戻ります。
「アプリケーションの作成」ウィザードによって「ログイン」ページも作成されていることに注意してください。
基本的なアプリケーション構造を作成した後、個々のページを作成します。
まず、ユーザーがデータを表示したり、データを表に追加できるページを作成する必要があります。これを行うには、「レポート付きの表のフォーム」ウィザードを使用します。このウィザードを使用して、各表にレポート・ページおよびメンテナンス・ページを作成します。
この項の内容は次のとおりです。
HT_PROJECTS
表を管理するためのページを作成するには、次のステップを実行します。
「アプリケーション」ホームページで、「ページの作成」をクリックします。
「フォーム」を選択して「次へ」をクリックします。
「レポート付きの表のフォーム」を選択して「次へ」をクリックします。
「表/ビューの所有者」で、適切なスキーマを選択して「次へ」をクリックします。
「表/ビューの名前」で、「HT_PROJECTS
」を選択して「次へ」をクリックします。
「レポート・ページの定義」で、次のステップを実行します。
「ページ番号」に、2
と入力します。
「ページ名」および「リージョン・タイトル」に、Projects
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「列の選択」で、PROJECT_ID
以外のすべての列を選択して「次へ」をクリックします。
プロジェクト名は一意で、プロジェクトを識別します。外部キーを簡略化し、カスケード更新を有効にするためにIDが追加されています。
「リンク・イメージの編集」で、4番目のオプション(「編集」という単語)を選択して「次へ」をクリックします。
「フォーム・ページの定義」で、次のステップを実行します。
「ページ」に、3
と入力します。
「ページ名」および「リージョン・タイトル」に、Create/Edit Project
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「主キー」で、デフォルトの「PROJECT_ID」を受け入れて「次へ」をクリックします。
「ソース・タイプ」で、デフォルトの「既存のトリガー」を受け入れて「次へ」をクリックします。
「列の選択」で、すべての列を選択して「次へ」をクリックします。
「プロセス・オプションを指定」で、「挿入」、「更新」および「削除」のデフォルト値を受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
「ページの実行」アイコンをクリックします。
図14-2に示すとおり、新しく作成されたレポートにデモ・データが表示されます。
「編集」リンクをクリックして既存の行を表示するか、または「作成」ボタンをクリックして新しいレコードを作成します。 「Employee Satisfaction Survey」の左にある「編集」アイコンをクリックすると、図14-3のようなフォームが表示されます。
書式マスクを日付に追加して、「Projects」レポート・ページの外観を変更できます。
「Create/Edit Projects」ページで書式マスクを日付に追加するには、次のステップを実行します。
ページ2(「Projects」)のページ定義に移動します。
「開発者」ツールバーで「アプリケーション」をクリックします。
「アプリケーション」ホームページで、「2 - Projects」をクリックします。
「リージョン」で、「Projects」の横にある「レポート」をクリックします。
START_DATE
の書式を編集します。
START_DATE
の左にある「編集」アイコンをクリックします。
「列属性」ページが表示されます。
「列の書式」で、「数値/日付書式」にDD-MON-YYYY
と入力します。
TARGET_END_DATE
の書式を編集します。
ページの上部にある「次へ」ボタン(>)をクリックして、次のレポート・アイテムに移動します。
「列属性」ページが表示されます。
「列の書式」で、「数値/日付書式」にDD-MON-YYYY
と入力します。
ACTUAL_END_DATE
の書式を編集します。
ページの上部にある「次へ」ボタン(>)をクリックして、次のレポート・アイテムに移動します。
「列属性」ページが表示されます。
「列の書式」で、「数値/日付書式」にDD-MON-YYYY
と入力します。
「変更の適用」をクリックします。
「レポート属性」ページが表示されます。
PROJECT_ID
のヘッダー「編集」を削除します。
START_DATE
、TARGET_END_DATE
および ACTUAL_END_DATE
列に対して、「列の位置合せ」および「ヘッダーの位置合せ」で、「中央」を選択します。
次に、ユーザーが列ヘッダーでソートできるようにします。
列ヘッダーのソートを有効にするには、PROJECT_ID
以外のすべての列で、「ソート」を選択します。
PROJECT_NAME
の「ソート順序」で、「1」を選択します。
これを選択すると、PROJECT_NAME
がデフォルトのソート基準列として指定されます。この機能は、ユーザーの選択によって変更される場合があります。
「ソート」までスクロールします。「昇順イメージ」および「降順イメージ」で、グレーの矢印を選択します。
「メッセージ」までスクロールします。「データが見つからなかった場合のメッセージ」に、次のように入力します。
No Projects found.
ページ上部の「変更の適用」をクリックします。
行った変更を表示するには、ページの右上にある「ページの実行」アイコンをクリックします。
図14-4に示すとおり、「Project Name」列にソート制御が追加されたことと、「Start Date」および「Target End Date」列の日付書式が変更されたことを確認してください。
次に、「Project Name」フィールドを拡大し、日付フィールドを縮小するには、「Create/Edit Project」をカスタマイズする必要があります。日付ピッカーのタイプを変更したり、日付書式マスクを追加したり、目標とする終了日および実際の終了日が開始日の後であるかどうかを確認する検証を追加することも必要です。
「Project Name」フィールドを拡大し、日付フィールドを縮小するには、次のステップを実行します。
ページ3(「Create/Edit Project」)のページ定義に移動します。
「開発者」ツールバーで、「アプリケーション」をクリックします。
「3 - Create/Edit Project」をクリックします。
「アイテム」で、「すべて編集」アイコンをクリックします。
「すべて編集」アイコンは、鉛筆が付いた小さいグリッドに似ています。
右にスクロールし、「幅」列を設定するには、次のステップを実行します。
「Project Name」に、60
と入力します。
「Start Date」に、12
と入力します。
「Target End Date」に、12
と入力します。
「Target End Date」に、12
と入力します。
「変更の適用」をクリックします。
ページ定義に戻ります。右上にある「ページの編集」アイコンをクリックします。「ページの編集」アイコンは、小さな緑色の紙と鉛筆に似ています。
日付ピッカーのタイプを変更して日付書式マスクを追加するには、次のステップを実行します。
アイテムP3_START_DATE
を編集します。
「アイテム」で、「P3_START_DATE」をクリックします。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
「変更の適用」をクリックします。
アイテムP3_TARGET_END_DATE
を編集します。
「アイテム」で、「P3_TARGET_END_DATE」を選択します。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
「変更の適用」をクリックします。
アイテムP3_ACTUAL_END_DATE
を編集します。
「アイテム」で、「P3_ACTUAL_END_DATE」を選択します。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
「変更の適用」をクリックします。
次に、目標とする終了日および実際の終了日が開始日の後であるかどうかを確認する検証を追加します。
検証を追加するには、次のステップを実行します。
「ページ・プロセス」の「検証」で、「作成」アイコンをクリックします。
「レベル」で、デフォルトの「アイテム・レベルの検証」を受け入れて「次へ」をクリックします。
「アイテム」で、「Create/Edit Project: 40. P3_TARGET_END_DATE (Target End Date)」を選択して「次へ」をクリックします。
「検証方法」で、「PL/SQL」を選択して「次へ」をクリックします。
作成する検証タイプを指定します。デフォルトの「PL/SQL式」を受け入れて、「次へ」をクリックします。
「検証名」で、TARGET_AFTER_START
と入力して「次へ」をクリックします。
「検証」で、次のステップを実行します。
「検証」に、次のように入力します。
to_date(:P3_ACTUAL_END_DATE,'DD-MON-YYYY') >= to_date(:P3_START_DATE,'DD-MON-YYYY')
「エラー・メッセージ」に、次のように入力します。
Actual End Date must be same or after Start Date.
「次へ」をクリックします。
「条件」で、次のステップを実行します。
「条件タイプ」で、「式1のアイテムの値がNOT NULL」を選択するか、ショートカット・リンク「アイテムがNOT NULL」をクリックします。
「式1」に、次のように入力します。
P3_ACTUAL_END_DATE.
これを選択すると、ユーザーが実際の終了日を入力した場合にのみこの検証が実行されます。
「作成」をクリックします。
行った変更を表示するには、ページの右上にある「ページの実行」アイコンをクリックします。 (図14-5を参照。)
最初の「Projects」ページの作成が完了した後で、ユーザーを管理するためのページを作成します。
この項の内容は次のとおりです。
HT_PEOPLE
表を管理するためのページを作成するには、次のステップを実行します。
「開発者」ツールバーで「アプリケーション」をクリックします。
「ページの作成」をクリックします。
「フォーム」を選択して「次へ」をクリックします。
「レポート付きの表のフォーム」を選択して「次へ」をクリックします。
「表/ビューの所有者」で、適切なスキーマを選択して「次へ」をクリックします。
「表/ビューの名前」で、「HT_PEOPLE」を選択して「次へ」をクリックします。
「レポート・ページの定義」で、次のステップを実行します。
「ページ」に、4
と入力します。
「ページ名」および「リージョン・タイトル」に、People
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「列の選択」で、PERSON_ID
以外のすべての列を選択して「次へ」をクリックします。
「リンク・イメージの編集」で、4番目のオプション(「編集」という単語)を選択して「次へ」をクリックします。
「フォーム・ページの定義」で、次のステップを実行します。
「ページ番号」に、5
と入力します。
「ページ名」および「リージョン・タイトル」に、Create/Edit Person Information
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「主キー」で、デフォルトの「PERSON_ID」を受け入れて「次へ」をクリックします。
主キー列のソースを指定します。デフォルトの「既存のトリガー」を受け入れ、「次へ」をクリックします。
「列の選択」で、すべての列を選択して「次へ」をクリックします。
「挿入」、「更新」および「削除」で、デフォルト値を受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
ページのプレビューを表示するには、「ページの実行」をクリックします。 図14-6に示すとおり、新しく作成されたレポートにデモ・データが表示されます。
ユーザーを追加または編集するためのページのプレビューを表示するには、左端の列の「編集」ボタンをクリックします。
次に、Projects表への結合が含まれ、ヘッダーが変更されるように問合せを変更して、「People」レポート・ページを変更します。
Projects表への結合が含まれるように問合せを変更するには、次のステップを実行します。
ページ4(「People」)のページ定義に移動します。
実行中のフォームを表示している場合は、「開発者」ツールバーの「アプリケーション」をクリックします。
「アプリケーション」ホームページで、「4 - People」をクリックします。
「リージョン」で、「People」をクリックします。
「ソース」までスクロールします。
「リージョン・ソース」で、既存の問合せを次と置き換えます。
SELECT a."PERSON_ID", a."PERSON_NAME", a."PERSON_EMAIL", a."PERSON_ROLE", b."PROJECT_NAME" FROM "#OWNER#"."HT_PEOPLE" a, "#OWNER#"."HT_PROJECTS" b WHERE a.assigned_project = b.project_id (+)
プロジェクトの割当てはオプションであるため、外部結合が必要であることに注意してください。
ヘッダーを変更するには、次のステップを実行します。
ページ上部の「レポート属性」タブをクリックします。
「列属性」で、次の列ヘッダーを編集します。
PERSON_IDのヘッダー「編集」を削除します。
PERSON_NAMEのヘッダーをName
に変更します。
PERSON_EMAILのヘッダーをEmail
に変更します。
PERSON_ROLEのヘッダーをRole
に変更します。
PROJECT_NAMEのヘッダーをAssigned Project
に変更して、「ヘッダーの位置合せ」で「左」を選択します。
次に、列ヘッダーのソートを有効にします。
列ヘッダーのソートを有効にするには、次のステップを実行します。
PERSON_ID以外のすべての列で、「ソート」を選択します。
PERSON_NAME
のソート順序で、「1」を選択します。
これを選択すると、PERSON_NAME
がデフォルトのソート基準列として指定されます。この機能は、ユーザーの選択によって変更される場合があります。
「ソート」までスクロールします。「昇順イメージ」および「降順イメージ」で、グレーの矢印を選択します。
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No people found.
ページの上部の「変更の適用」をクリックします。
次に、LOVを追加して「Create/Edit People」ページをカスタマイズし、ユーザーが「Role」または「Assigned Project」を簡単に選択できるようにします。
「Projects」のLOVを追加するには、次のステップを実行します。
ページ5(「Create/Edit Person」)のページ定義に移動します。
フォームを表示している場合は、「開発者」ツールバーの「アプリケーション」をクリックします。
「アプリケーション」ホームページで、「5 - Create/Edit Person Information」をクリックします。
「共有コンポーネント」で、「LOV」を検索して「作成」アイコンをクリックします。
「ソース」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「名前およびタイプ」で、次のステップを実行します。
「名前」に、PROJECTS
と入力します。
「タイプ」で、「動的」を選択します。
「次へ」をクリックします。
「問合せ」で、既存の文を次と置き換えます。
SELECT project_name d, project_id v FROM ht_projects ORDER BY d
「LOVの作成」をクリックします。
「Roles」のLOVを追加するには、次のステップを実行します。
「共有コンポーネント」で、「LOV」を検索して「作成」アイコンをクリックします。
「ソース」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「名前およびタイプ」で、次のステップを実行します。
「名前」に、ROLES
と入力します。
「タイプ」で、「静的」を選択します。
「次へ」をクリックします。
表14-4に示す表示値と戻り値の組合せを入力します。
「LOVの作成」をクリックします。
「LOV」ページで、右上にある「ページの編集」アイコンをクリックします。
P5_PERSON_ROLEの表示属性を編集するには、次のステップを実行します。
「アイテム」で、「P5_PERSON_ROLE」をクリックします。
「名前」セクションの「表示形式」リストから、「ラジオ・グループ」を選択します。
「ラベル」までスクロールします。
「ラベル」をRole
に変更します。
「要素」で、「フォーム要素オプション属性」に次のように入力します。
class="instructiontext"
これによって、各ラジオ・グループ・オプションに関連付けられたテキストがページの他のアイテムと同じサイズになるように指定されます。
「LOV」までスクロールします。
「名前付きLOV」リストから「ROLES」を選択します。
「変更の適用」をクリックします。
P5_ASSIGNED_PROJECT
の表示属性を編集するには、次のステップを実行します。
「アイテム」で、「P5_ASSIGNED_PROJECT」をクリックします。
「名前」セクションの「表示形式」リストから、「選択リスト」を選択します。
「LOV」までスクロールします。
「LOV」で、次のステップを実行します。
「名前付きLOV」リストから「PROJECTS」を選択します。
次に、基礎となる列が必須とならないように指定します。
「NULL表示値」に、次のように入力します。
- None -
「変更の適用」をクリックします。
フィールドおよびフィールド・ラベルの表示を変更するには、次のステップを実行します。
「アイテム」で、「すべて編集」アイコンをクリックします。
P5_PERSON_NAME
に対して、次のステップを実行します。
「プロンプト」に、Name
と入力します。
「幅」に、60
と入力します。
P5_PERSON_EMAIL
に対して、次のステップを実行します。
「プロンプト」に、Email Address
と入力します。
「幅」に、60
と入力します。
「変更の適用」をクリックします。
右上にある「ページの編集」アイコンをクリックして、ページ5のページ定義に戻ります。
「レポート付きの表のフォーム」ウィザードによって、「Name」、「Email」および「Role」のNOT NULL検証が作成されました。リーダーおよびメンバーにプロジェクトが割り当てられ、CEOおよびマネージャには割り当てられないようにするには、別の検証を手動で作成する必要があります。通常は、高速の組込み検証タイプを使用することをお薦めします。ただし、この複合タイプの検証では、PL/SQL検証を作成します。
適切なユーザーがプロジェクトに割り当てられていることを確認する検証を追加するには、次のステップを実行します。
「ページ・プロセス」の「検証」で、「作成」アイコンをクリックします。
「レベル」で、デフォルトの「アイテム・レベルの検証」を受け入れて「次へ」をクリックします。
「アイテム」で、「Create/Edit Person Information: 50. P5_ASSIGNED_PROJECT(Assigned Project)」を選択して「次へ」をクリックします。
「検証」に、次のように入力します。
「PL/SQL」を選択して「次へ」をクリックします。
デフォルトの「PL/SQL式」を受け入れて、「次へ」をクリックします。
「順序と名前」で、次のステップを実行します。
「検証名」に、PROJECT_MAND_FOR_LEADER_AND_MEMBER
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「検証およびエラー・メッセージを指定」で、次のステップを実行します。
「検証」に、次のように入力します。
(:P5_PERSON_ROLE IN ('CEO','Manager') AND :P5_ASSIGNED_PROJECT = '%'||'null%') OR (:P5_PERSON_ROLE IN ('Lead','Member') AND :P5_ASSIGNED_PROJECT != '%'||'null%')
Oracle Application Expressでは、NULLは%null%
として渡されます。また、データの処理時に%null%
はNULLと置換されます。このため、検証に%null%
を含めるには、文字列が認識および置換されないように分割する必要があります。
「エラー・メッセージ」に、次のように入力します。
Leads and Members must have an Assigned Project. CEO and Managers cannot have an Assigned Project.
「次へ」をクリックします。
「作成」をクリックします。
行った変更を表示するには、ページの右上にある「ページの実行」アイコンをクリックします。 図14-8に示すとおり、更新されたフォームが表示されます。
図14-8 更新された「Create/Edit Person Information」フォーム
レコードをいくつか入力して検証をテストします。プロジェクトを指定してCEOを入力し、次に、プロジェクトを指定せずにリーダーを入力します。いずれの場合も失敗し、定義したエラー・メッセージが表示されます。
最後に、HT_ISSUES
用のページを作成する必要があります。このアプリケーションには、「Issues」の複数のビューが必要です。これらのビューは、1つのレポートとして作成するか、または別々のレポートとして作成することができます。この演習では、「Issues」メンテナンス・フォームを含む複雑なレポートを作成します。このメンテナンス・フォームを複数の場所にリンク付けします。最終的に、問題を発見したユーザー、プロジェクト、割り当てられたユーザー、ステータスまたは優先順位ごとの問題が「Issues」レポートに表示されます。
この項の内容は次のとおりです。
HT_ISSUES
を管理するためのレポートを作成するには、次のステップを実行します。
「開発者」ツールバーで「アプリケーション」をクリックします。
「ページの作成」をクリックします。
「フォーム」を選択して「次へ」をクリックします。
「レポート付きの表のフォーム」を選択して「次へ」をクリックします。
「表/ビューの所有者」で、適切なスキーマを選択して「次へ」をクリックします。
「表/ビューの名前」で、「HT_ISSUES」を選択して「次へ」をクリックします。
「レポート・ページの定義」で、次のステップを実行します。
「ページ番号」に、6
と入力します。
「ページ名」および「リージョン・タイトル」に、Issues
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「列の選択」で、次のステップを実行します。
[Ctrl]キーを押しながら、次の列を選択します。
ISSUE_SUMMARY
IDENTIFIED_BY
RELATED_PROJECT
ASSIGNED_TO
STATUS
PRIORITY
TARGET_RESOLUTION_DATE
ACTUAL_RESOLUTION_DATE
「次へ」をクリックします。
「リンク・イメージの編集」で、4番目のオプション(「編集」という単語)を選択して「次へ」をクリックします。
「フォーム・ページの定義」で、次のステップを実行します。
「ページ番号」に、7
と入力します。
「ページ名」および「リージョン・タイトル」に、Create/Edit Issue
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「主キー」で、デフォルトの「ISSUE_ID」を受け入れて「次へ」をクリックします。
「主キー列のソースの定義」で、デフォルトの「既存のトリガー」を受け入れて「次へ」をクリックします。
「列の選択」で、すべての列を選択して「次へ」をクリックします。
「挿入」、「更新」および「削除」で、デフォルト値「はい」を受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
「ページの編集」をクリックします。
次の理由で「Create/Edit」ページを調整します。
ユーザーが外部キー列を簡単に選択するためのLOVの追加
アイテムの編成およびクリーンアップ
「監査」列の表示の変更
データ・エントリを高速にするためのボタンの追加
次に、「Status」、「Priorities」および「People」のLOVを追加する必要があります。
「Status」のLOVを追加するには、次のステップを実行します。
ページ7(「Create/Edit Issue」)のページ定義に移動します。ページ定義で、「ページ」フィールドに7と入力して「実行」をクリックします。
「共有コンポーネント」の「LOV」で、「作成」アイコンをクリックします。
「LOVの作成」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「LOVの作成」で、次のステップを実行します。
「名前」に、STATUS
と入力します。
「タイプ」で、「静的」を選択します。
「次へ」をクリックします。
表14-5に示す表示値と戻り値の組合せを入力します。
「LOVの作成」をクリックします。
「Priorities」のLOVを追加するには、次のステップを実行します。
「LOV」ページで、「作成」をクリックします。
「LOVの作成」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「LOVの作成」で、次のステップを実行します。
「名前」に、PRIORITIES
と入力します。
「タイプ」で、「静的」を選択します。
「次へ」をクリックします。
表14-6に示す表示値と戻り値の組合せを入力します。
「LOVの作成」をクリックします。
「People」のLOVを追加するには、次のステップを実行します。
「LOV」ページで、「作成」をクリックします。
「LOVの作成」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「LOVの作成」で、次のステップを実行します。
「名前」に、PEOPLE
と入力します。
「タイプ」で、「動的」を選択します。
「次へ」をクリックします。
「問合せ」で、既存の文を次と置き換えます。
SELECT person_name d, person_id v FROM ht_people ORDER BY 1
「LOVの作成」をクリックします。
ページ7のページ定義に移動します。
次に、個々のアイテムを編集します。
P7_IDENTIFIED_BY
を編集するには、次のステップを実行します。
ページ7の「ページ定義」の「アイテム」で、「P7_IDENTIFIED_BY」をクリックします。
「名前」セクションの「表示形式」リストから、「選択リスト」を選択します。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PEOPLE」を選択します。
「NULLを表示」で、「はい」を選択します。ベース列は必須ですが、リストの最初の名前がデフォルトの値にならないようにする必要があります。
「NULL表示値」に、次のように入力します。
- Select Person -
ページの上部にある「次へ」ボタン(>)をクリックして、次のアイテムP7_IDENTIFIED_DATE
に移動します。
「ページ・アイテムの編集」ページが表示されます。
P7_IDENTIFIED_DATE
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
「デフォルト」までスクロールして、次のステップを実行します。
「デフォルト値」に、次のように入力します。
to_char(sysdate,'DD-MON-YYYY')
「デフォルト値のタイプ」で、「PL/SQL式」を選択します。
ページの上部にある「次へ」ボタン(>)をクリックして、次のアイテムP7_RELATED_PROJECTに移動します。
「ページ・アイテムの編集」ページが表示されます。
P7_RELATED_PROJECT
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「選択リスト」を選択します。
「LOV」までスクロールします。「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PROJECTS」を選択します。
「NULLを表示」で、「はい」を選択します。
「NULL表示値」に、次のように入力します。
- Select Project -
ページの上部にある「次へ」ボタン(>)をクリックして、P7_STATUS
に移動します。
P7_STATUS
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「ラジオ・グループ」を選択します。
「ラベル」で、「ラベル」フィールドに次のように入力します。
Status:
「要素」で、「フォーム要素オプション属性」フィールドに次のように入力します。
class="instructiontext"
「デフォルト値」で、「デフォルト値」フィールドにOpen
と入力します。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「STATUS」を選択します。
「列の数」に、3と入力します。
これを選択すると、3つの有効な値を横に並べて表示することができます。
ページの上部にある「次へ」ボタン(>)をクリックして、P7_PRIORITY
に移動します。
P7_PRIORITY
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「ラジオ・グループ」を選択します。
「ラベル」で、「ラベル」フィールドに次のように入力します。
Priority:
「要素」で、「フォーム要素オプション属性」フィールドに次のように入力します。
class="instructiontext"
「デフォルト値」で、「デフォルト値」にOpen
と入力します。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PRIORITIES」を選択します。
「NULLを表示」で、「はい」を選択します。
「列の数」に、4と入力します。
この選択は、3つの有効な値とNULL値が存在しているということを反映しています。
「NULL表示値」に、次のように入力します。
None-
ページの上部にある「次へ」ボタン(>)をクリックして、P7_TARGET_RESOLUTION_DATE
に移動します。
P7_TARGET_RESOLUTION_DATE
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
ページの上部にある「次へ」ボタン(>)をクリックして、P7_ACTUAL_RESOLUTION_DATE
に移動します。
P7_ACTUAL_RESOLUTION_DATE
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「日付ピッカー(DD-MON-YYYY)」を選択します。
「変更の適用」をクリックします。
現在、すべてのアイテムが1つの大きいリージョンにグループ化されています。論理グループにアイテムを表示すると、ユーザーはデータ・エントリを簡単に行うことができます。このため、次に、「Buttons」、「Progress」、「Resolution」および「Audit Information」という4つの新しいリージョンを作成します。また、既存のリージョンの名前を変更します。
新しいリージョンを作成してアイテムをグループ化するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「複数のHTML」を選択して、「次へ」をクリックします。
最初の行では、次の操作を行います。
「順序」に、5
と入力します。
「タイトル」に、Buttons
と入力します。
「テンプレート」で、「タイトルなしのボタン・リージョン」を選択します。
2番目の行では、「タイトル」にProgress
と入力します。
3番目の行では、「タイトル」にResolution
と入力します。
4番目の行では、「タイトル」に監査情報
と入力します。
「リージョンの作成」をクリックします。
新しいリージョンの作成後、最初のリージョン「Create/Edit Issue」の名前を変更します。
「リージョン」で、「Create/Edit Issue」をクリックします。
「タイトル」に、次のように入力します。
Issue Identification
「変更の適用」をクリックします。
次に、各アイテムを適切なリージョンに移動します。一部のアイテムの幅を変更する必要もあります。
アイテムを適切なリージョンに移動するには、次のステップを実行します。
「アイテム」で、「すべて編集」アイコンをクリックします。
「ページ・アイテム」サマリー・ページが表示されます。
「リージョン」で、次のアイテムの「Progress」を選択します。
P7_ASSIGNED_TO
P7_STATUS
P7_PRIORITY
P7_TARGET_RESOLUTION_DATE
P7_PROGRESS
「リージョン」で、次のアイテムの「Resolution」を選択します。
P7_ACTUAL_RESOLUTION_DATE
P7_RESOLUTION_SUMMARY
「リージョン」で、次のアイテムの「監査情報」を選択します。
P7_CREATED_DATE
P7_CREATED_BY
P7_LAST_MODIFIED_DATE
P7_LAST_MODIFIED_BY
「幅」で、次のように編集します。
P7_ISSUE_SUMMARYに、60
と入力します。
P7_IDENTIFIED_DATEに、12
と入力します。
P7_TARGET_RESOLUTION_DATEに、12
と入力します。
P7_ACTUAL_RESOLUTION_DATEに、12
と入力します。
「変更の適用」をクリックします。
右上にある「ページの編集」アイコンをクリックして、ページ7のページ定義に戻ります。
ボタンを「ボタン」リージョンに移動するには、次のステップを実行します。
「ボタン」で、「すべて編集」アイコンをクリックします。
すべてのボタンの「リージョン」で、「ボタン」を選択します。
「変更の適用」をクリックします。
右上にある「ページの編集」アイコンをクリックして、ページ7のページ定義に戻ります。
「監査」列は、表示可能かつ編集不可にする必要があるため、表示専用にします。次の演習では、「監査情報」リージョンの条件を作成します。結果として、「監査情報」リージョンは、ユーザーが既存の問題を編集する場合は表示されますが、新しい問題を作成する場合は表示されなくなります。
「監査情報」リージョンの条件を作成するには、次のステップを実行します。
「リージョン」で、「監査情報」をクリックします。
「条件付き表示」までスクロールします。
「条件タイプ」で、「式1のアイテムの値がNULL」を選択します。
「式1」に、次のように入力します。
P7_ISSUE_ID
「変更の適用」をクリックします。
次に、「監査」列を表示専用に変更します。
P7_CREATED_DATE
を編集するには、次のステップを実行します。
「アイテム」で、「P7_CREATED_DATE」をクリックします。
「名前」セクションの「表示形式」リストから、「テキストとして表示(状態を保存する)」を選択します。
「ラベル」で、次のステップを実行します。
「ラベル」に、次のように入力します。
Created Date:
「テンプレート」で、「ヘルプ付きのオプションのラベル」を選択します。
「HTML表のセル属性」に、次のように入力します。
class="instructiontext"
「ソース」で、「書式マスク」に次のように入力します。
DD-MON-YYYY
ページの上部にある「次へ」ボタン(>)をクリックして、次のアイテムP7_CREATED_BY
に移動します。
P7_CREATED_BY
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「テキストとして表示(状態を保存する)」を選択します。
「ラベル」で、次のステップを実行します。
「ラベル」に、次のように入力します。
Created By:
「テンプレート」で、「ヘルプ付きのオプションのラベル」を選択します。
「HTML表のセル属性」に、次のように入力します。
class="instructiontext"
ページの上部にある「次へ」ボタン(>)をクリックして、次のアイテムP7_LAST_MODIFIED_DATE
に移動します。
P7_LAST_MODIFIED_DATE
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「テキストとして表示(状態を保存する)」を選択します。
「ラベル」で、次のステップを実行します。
「ラベル」に、次のように入力します。
Last Modified Date:
「テンプレート」で、「ヘルプ付きのオプションのラベル」を選択します。
「HTML表のセル属性」に、次のように入力します。
class="instructiontext"
「ソース」で、「書式マスク」に次のように入力します。
DD-MON-YYYY
ページの上部にある「次へ」ボタン(>)をクリックして、次のアイテムP7_LAST_MODIFIED_BY
に移動します。
P7_LAST_MODIFIED_BY
を編集するには、次のステップを実行します。
「名前」セクションの「表示形式」リストから、「テキストとして表示(状態を保存する)」を選択します。
「ラベル」で、次のステップを実行します。
「ラベル」に、次のように入力します。
Last Modified By:
「テンプレート」で、「ヘルプ付きのオプションのラベル」を選択します。
「HTML表のセル属性」に、次のように入力します。
class="instructiontext"
「変更の適用」をクリックします。
「レポート付きの表のフォーム」ウィザードによって、「Issue Summary」、「Identified By」、「Related Project」、「Status」、「Created Date」および「Created By」のNOT NULL検証が作成されています。「監査」列はトリガーによって設定されるため、これらの検証を削除する必要があります。
NOT NULL検証を削除するには、次のステップを実行します。
次のステップを実行して、「P7_CREATED_DATEがNULLでない」を削除します。
「ページ・プロセス」の「検証」で、「P7_CREATED_DATEがNULLでない」をクリックします。
「削除」をクリックします。
「OK」をクリックして選択を確認します。
次のステップを実行して、「P7_CREATED_BYがNULLでない」を削除します。
「ページ・プロセス」の「検証」で、「P7_CREATED_BYがNULLでない」をクリックします。
「削除」をクリックします。
「OK」をクリックして選択を確認します。
この「作成/編集」ページは複数の場所からコールされるため、ユーザーは、表示を終了すると、コール元ページに戻る必要があります。これを行うには、「Create/Edit」ページにアイテムを作成してブランチを変更します。「Create/Edit」ページがコールされるたびに、コール元ページの番号を指定してアイテムを設定する必要があります。
非表示アイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「非表示」を選択して「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、次のように入力します。
P7_PREV_PAGE
「リージョン」で、「Issue Identification」を選択します。
「次へ」をクリックします。
「アイテムの作成」をクリックします。
ページ7のページ定義が表示されます。
次に、「取消」ボタンを編集します。
「取消」ボタンを編集するには、次のステップを実行します。
「ボタン」で、「取消」をクリックします。
「オプションのURLリダイレクト」までスクロールします。
「ページ」に、次のように入力します。
&P7_PREV_PAGE.
末尾のピリオドに注意してください。
「変更の適用」をクリックします。
次に、ブランチを編集します。
ブランチを編集するには、次のステップを実行します。
「ブランチ」で、「プロセスの後」ブランチ、「ページに移動」を選択します。
「アクション」で、「ページ」に次のように入力します(ピリオドを含めます)。
&P7_PREV_PAGE.
「変更の適用」をクリックします。
次に、ユーザーが一度に複数の問題を追加できる機能を追加します。これを行うには、まず新しいボタンを追加し、次に新しいブランチを作成します。
新しいボタンを追加するには、次のステップを実行します。
「ボタン」で、「コピー」アイコンをクリックします。
コピーする「ボタン」に、CREATEと入力します。
「ターゲット・ページ」で、デフォルトの「7」を受け入れて「次へ」をクリックします。
「新しいボタン」で、次のステップを実行します。
「ボタン名」で、CREATE_AGAIN
と入力します。
「ラベル」に、作成後、別のものの作成
と入力します。
「ボタンをコピー」をクリックします。
現在、「ボタンをコピー」は、機能的に「作成」ボタンと同様に動作します。次に、「作成」ページでユーザーを保持するブランチを作成します。
このブランチによって、P7_PREV_PAGEの再設定も行われます。これは、ページのキャッシュが消去されるとそのアイテムの値が失われるためです。この新しいブランチの順序には0を指定します。順序を0に設定すると、このブランチはデフォルトのブランチの前に起動されます(ただし、「作成後、別のものを作成」ボタンが使用されている場合のみ)。
「作成」ページでユーザーを保持するブランチを作成するには、次のステップを実行します。
「ページ・プロセス」の「ブランチ」で、「作成」アイコンをクリックします。
「ポイントおよびタイプ」で、デフォルトを受け入れて「次へ」をクリックします。
「ターゲット」で、次のステップを実行します。
「ページ」に、7
と入力します。
「キャッシュのクリア」に、7
と入力します。
「次のアイテムを設定」に、次のように入力します。
P7_PREV_PAGE
「次の値を使用」に、次のように入力します(ピリオドを含めます)。
&P7_PREV_PAGE.
「次へ」をクリックします。
「ブランチ条件」で、次のステップを実行します。
「順序」に、0と入力します。
「対象ボタン」で、「CREATE_AGAIN」を選択します。
「ブランチの作成」をクリックします。
ページ7のページ定義が表示されます。
「ブランチ」で、7の横にある新しく作成したブランチ「ページに移動」を選択します。
「アクション」で、「プロセスの成功メッセージを含める」チェック・ボックスを選択します。
「変更の適用」をクリックします。
変更を表示するには、「ページの実行」アイコンをクリックします。 図14-9に示すとおり、新しいフォームが表示されます。
作成したブランチによって、P7_PREV_PAGEの値が検索されます。このページは別のページからコールされなかったため、値は設定されていません。次に、これを修正する必要があります。
次に、問合せの動的変更がサポートされるように「Issues」レポート・ページを調整します。これを行うには、次の操作を実行する必要があります。
新しいリージョンへの「作成」ボタンの移動およびラベルの編集
ユーザーによる問合せの制限を可能にする新しいアイテムの作成
新しいアイテムを参照するためのWHERE
句の追加
各ユーザー名およびプロジェクトを表示するためのレポート列属性の変更
ヘッダーの変更
「作成」ボタン用の新しいリージョンを作成するには、次のステップを実行します。
ページ6(「Issues」)のページ定義に移動します。
「リージョン」で、「作成」アイコンをクリックします。
「HTML」を選択して「次へ」をクリックします。
リージョン・コンテナとして「HTML」を選択し、「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Buttons
と入力します。
「リージョン・テンプレート」で、「タイトルなしのボタン・リージョン」を選択します。
「表示ポイント」で、「ページ・テンプレート・ボディ (2. リージョン・コンテンツより下のアイテム)」を選択します。
「次へ」をクリックします。
「リージョンの作成」をクリックします。
「作成」ボタンを「ボタン」リージョンに移動するには、次のステップを実行します。
「ボタン」で、「作成」リンクをクリックします。
「名前」で、「Text Label/Alt」フィールドに次のように入力します。
Add a New Issue
「表示」で、「リージョン」フィールドの「表示」で「ボタン」を選択します。
「オプションのURLリダイレクト」で、次のステップを実行します。
「次のアイテムを設定」に、次のように入力します。
P7_PREV_PAGE
「次の値を使用」に、6
を入力します。
「変更の適用」をクリックします。
次に、IDではなく、ユーザーおよびプロジェクトの実際の値が表示されるように問合せを変更した後、レポートの表示をクリーンアップします。
ISSUE_IDの列属性を編集するには、次のステップを実行します。
「リージョン」で、「Issues」の横にある「レポート」をクリックします。
「レポート属性」ページが表示されます。
ISSUE_IDの左にある「編集」アイコンをクリックします。
「列リンク」までスクロールします。「列リンク」で、次のステップを実行します。
「アイテム2」の「名前」に、次のように入力します。
P7_PREV_PAGE
「アイテム2」の「値」に、6と入力します。
「変更の適用」をクリックします。
IDENTIFIED_BY
、RELATED_PROJECT
およびASSIGNED_TO
の列属性を編集するには、次のステップを実行します。
IDENTIFIED_BY
の左にある「編集」アイコンをクリックします。
「表形式フォームの要素」までスクロールします。「表示形式」で、「テキストとして表示(LOVに基づき、状態は保存しない)」を選択します。
「LOV」までスクロールします。「名前付きLOV」で、「PEOPLE」を選択します。
ページの上部に戻って「次へ」アイコン(>)をクリックします。
RELATED_PROJECTの「列属性」ページが表示されます。
「表形式フォームの要素」までスクロールします。「表示形式」で、「テキストとして表示(LOVに基づき、状態は保存しない)」を選択します。
「LOV」までスクロールします。「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PROJECTS」を選択します。
「NULLを表示」で、「はい」を選択します。
「NULLテキスト」に、ハイフン(-)を入力します。
ページの上部に戻って「次へ」アイコン(>)をクリックします。
ASSIGNED_TOの「列属性」ページが表示されます。
「表形式フォームの要素」までスクロールします。「表示形式」で、「テキストとして表示(LOVに基づき、状態は保存しない)」を選択します。
「LOV」までスクロールします。「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PEOPLE」を選択します。
「NULLを表示」で、「はい」を選択します。
「NULLテキスト」に、ハイフン(-)を入力します。
「変更の適用」をクリックします。
「レポート属性」ページが表示されます。
次に、レポート属性を変更して、レポートの表示方法をカスタマイズします。
レポートの表示を変更するには、次のステップを実行します。
「ヘッダー・タイプ」(「列属性」上部のラジオ・グループ行)から、デフォルトの「カスタム」を受け入れます。
ISSUE_IDのヘッダー・テキストを削除します。
ISSUE_SUMMARYのヘッダーをSummary
に変更します。
TARGET_RESOLUTION_DATEに対して、次のステップを実行します。
ヘッダーに強制折返しを設定します。「ヘッダー」に、次のように入力します。
Target<br>Resolution<br>Date
「列の位置合せ」で、「中央」を選択します。
「ヘッダーの位置合せ」で、「中央」を選択します。
ISSUE_IDでソートするには、次のステップを実行します。
ISSUE_ID以外のすべての列で、「ソート」を選択します。
ISSUE_SUMMARYの「ソート順序」で、「1」を選択します。
「レイアウトおよびページ区切り」までスクロールします。次のように指定します。
「NULL値の表示形式」に、ハイフン(-)を入力します。
「行数」に、5
と入力します。
「ソート」で、「昇順イメージ」および「降順イメージ」のグレーの矢印を選択します。
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No issues found.
「変更の適用」をクリックします。
この時点で、レポートは適切に表示されますが、エンド・ユーザーによるフィルタ処理はサポートされません。この機能を追加するには、まず、ユーザーによる問合せの値の設定を可能にするアイテムを作成します。レポートの上に表示される新しいリージョンにこれらの新しいアイテムを格納します。
新しいリージョンを作成するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「HTML」を選択して、「次へ」をクリックします。
リージョン・コンテナとして「HTML」を選択し、「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Issue Report Parameters
と入力します。
「リージョン・テンプレート」で、デフォルトの「レポート・リージョン」を受け入れます。
「順序」に、5
と入力します。
「次へ」をクリックします。
「リージョンの作成」をクリックします。
次に、アイテムを作成します。
「Identified By」のアイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの選択肢の「選択リスト」を受け入れて「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P6_IDENTIFIED_BY
と入力します。
「リージョン」で、「Issue Report Parameters」を選択します。
「次へ」をクリックします。
「LOVの指定」で、次のステップを実行します。
「名前付きLOV」で、「PEOPLE」を選択します。
「NULLテキスト」に、次のように入力します。
- All -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
「Assigned To」のアイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの選択肢の「選択リスト」を受け入れて「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P6_ASSIGNED_TO
と入力します。
「リージョン」で、「Issue Report Parameters」を選択します。
「次へ」をクリックします。
「LOVの指定」で、次のステップを実行します。
「名前付きLOV」で、「PEOPLE」を選択します。
「NULLテキスト」に、次のように入力します。
- All -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
「Status」のアイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの選択肢の「選択リスト」を受け入れて「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P6_STATUS
と入力します。
「リージョン」で、「Issue Report Parameters」を選択します。
「次へ」をクリックします。
「LOVの指定」で、次のステップを実行します。
「名前付きLOV」で、「STATUS」を選択します。
「NULLテキスト」に、次のように入力します。
- All -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
「Priority」のアイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの選択肢の「選択リスト」を受け入れて「次へ」をクリックします。
「アイテム名および表示位置を指定」で、次のステップを実行します。
「アイテム名」に、P6_PRIORITY
と入力します。
「リージョン」で、「Issue Report Parameters」を選択します。
「次へ」をクリックします。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PRIORITIES」を選択します。
「NULLテキスト」に、次のように入力します。
- All -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性の指定」で、デフォルト値を受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
「Related Project」のアイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの選択肢の「選択リスト」を受け入れて「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P6_RELATED_PROJECT
と入力します。
「リージョン」で、「Issue Report Parameters」を選択します。
「次へ」をクリックします。
「LOVの指定」で、次のステップを実行します。
「名前付きLOV」で、「PROJECTS」を選択します。
「NULLテキスト」に、次のように入力します。
- All -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
次に、「実行」ボタンを作成します。このボタンによって、ユーザーは、レポート・パラメータを選択した後、問合せを実行できます。ボタンは、リージョン位置に作成するか、またはアイテム間に表示することができます。
「実行」ボタンを作成するには、次のステップを実行します。
「ボタン」で、「作成」アイコンをクリックします。
「ボタン・リージョン」で、「Issue Report Parameters」を選択して「次へ」をクリックします。
「ボタン位置」で、「このリージョン・アイテムで表示されるボタンの作成」を選択します。
これを選択すると、最後のレポート・パラメータの右側にボタンが表示されます。
「次へ」をクリックします。
「ボタン属性」で、次のステップを実行します。
「ボタン名」に、P6_GO
と入力します。
「ボタン・スタイル」で、「テンプレート・ベースのボタン」を選択します。
「テンプレート」で、「ボタン」を選択します。
「ボタンの作成」をクリックします。
ページ6のページ定義が表示されます。
現在、アイテムは重なって表示されます。空白をより効果的に使用するには、横に並んで表示されるようにP6_RELATED_PROJECT、 P6_STATUSおよびP6_PRIORITYの位置を変更します。最初の行にP6_RELATED_PROJECT、P6_STATUS、2番目の行にP6_PRIORITYをデプロイします。
P6_RELATED_PROJECT、P6_STATUSおよびP6_PRIORITYの位置を変更するには、次のステップを実行します。
「アイテム」で、「すべて編集」アイコンをクリックします。
P6_RELATED_PROJECT、P6_STATUSおよびP6_PRIORITYの「新しい行」で「いいえ」を選択します。
「変更の適用」をクリックします。
右上にある「ページの編集」アイコンをクリックして、ページ6のページ定義に戻ります。「ページの編集」アイコンは、小さな緑色の紙と鉛筆に似ています。
次に、パラメータに対応するようにレポートを変更する必要があります。これを行うには、次のように問合せのWHERE
句を変更する必要があります。
WHERE (IDENTIFIED_BY = :P6_IDENTIFIED_BY OR :P6_IDENTIFIED_BY = '-1') AND (RELATED_PROJECT = :P6_RELATED_PROJECT OR :P6_RELATED_PROJECT = '-1') AND (ASSIGNED_TO = :P6_ASSIGNED_TO OR :P6_ASSIGNED_TO = '-1') AND (STATUS = :P6_STATUS OR :P6_STATUS = '-1') AND (PRIORITY = :P6_PRIORITY OR :P6_PRIORITIY = '-1')
先行するWHERE
句を使用するには、「Issues」リージョンを「SQL問合せを戻すPL/SQLファンクション本体」に変換する必要があります。
「Issues」リージョンを「SQL問合せを戻すPL/SQLファンクション本体」に適用するには、次のステップを実行します。
「リージョン」で、「Issues」をクリックします。
「名前」の「タイプ」で、「SQL問合せ(SQL問合せを戻すPL/SQLファンクション本体)」を選択します。
「リージョン・ソース」で、既存の文を次と置き換えます。
DECLARE q VARCHAR2(32767); -- query w VARCHAR2(4000) ; -- where clause we VARCHAR2(1) := 'N'; -- identifies if where clause exists BEGIN q := 'SELECT "ISSUE_ID", '|| ' "ISSUE_SUMMARY", '|| ' "IDENTIFIED_BY", '|| ' "RELATED_PROJECT", '|| ' "ASSIGNED_TO", '|| ' "STATUS", '|| ' "PRIORITY", '|| ' "TARGET_RESOLUTION_DATE", '|| ' "ACTUAL_RESOLUTION_DATE" '|| ' FROM "#OWNER#"."HT_ISSUES" '; IF :P6_IDENTIFIED_BY != '-1' THEN w := ' IDENTIFIED_BY = :P6_IDENTIFIED_BY '; we := 'Y'; END IF; IF :P6_RELATED_PROJECT != '-1' THEN IF we = 'Y' THEN w := w || ' AND RELATED_PROJECT = :P6_RELATED_PROJECT '; ELSE w := ' RELATED_PROJECT = :P6_RELATED_PROJECT '; we := 'Y'; END IF; END IF; IF :P6_ASSIGNED_TO != '-1' THEN IF we = 'Y' THEN w := w || ' AND ASSIGNED_TO = :P6_ASSIGNED_TO '; ELSE w := ' ASSIGNED_TO = :P6_ASSIGNED_TO '; we := 'Y'; END IF; END IF; IF :P6_STATUS != '-1' THEN IF we = 'Y' THEN w := w || ' AND STATUS = :P6_STATUS '; ELSE w := ' STATUS = :P6_STATUS '; we := 'Y'; END IF; END IF; IF :P6_PRIORITY != '-1' THEN IF we = 'Y' THEN w := w || ' AND PRIORITY = :P6_PRIORITY '; ELSE w := ' PRIORITY = :P6_PRIORITY '; we := 'Y'; END IF; END IF; IF we = 'Y' THEN q := q || ' WHERE '|| w; END IF; RETURN q; END;
「変更の適用」をクリックします。
このファンクションでは、まず、変数q
が元のSELECT
文に設定されることに注意してください。次に、ユーザーが設定した変数で構成されるWHERE
句(w
)が作成されます。いずれかの変数が設定されている場合、WHERE
句は、元のSELECT
文に追加され、その新しいSELECT
文がデータベースに渡されます。
これで、レポートの作成は完了です。「ページの実行」アイコンをクリックします。 図14-10に示すような、更新されたレポートが表示されます。
レポート・パラメータを変更するには、「Issue Report Parameters」で新しく選択を行って「実行」をクリックします。
現在、問題を編集して割り当てることができます。次に、ユーザーによる複数の問題の一括割当ておよび「Related Project」、「Status」および「Priority」の変更を可能にする新しいページを追加します。
表形式フォームの作成
複数の問題の割当てをサポートする新しいページを追加するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「フォーム」を選択して「次へ」をクリックします。
「表形式フォーム」を選択して「次へ」をクリックします。
「表/ビューの所有者」で、次のステップを実行します。
「表/ビューの所有者」で、適切なスキーマを選択します。
この演習では、ユーザーが問題を作成または削除できるようにすることではなく、問題を割り当てたり既存のレコードを更新できるようにすることがこのフォームの目的としています。
「実行可能な操作」で、「更新のみ」を選択します。
「次へ」をクリックします。
「表/ビューの名前」で、「HT_ISSUES」を選択して「次へ」をクリックします。
「表示列」で、次のステップを実行します。
[Ctrl]キーを押しながら、次の列を選択します。
ISSUE_SUMMARY
IDENTIFIED_BY
IDENTIFIED_DATE
RELATED_PROJECT
ASSIGNED_TO
STATUS
PRIORITY
「次へ」をクリックします。
「主キー」で、デフォルトの「ISSUE_ID」を受け入れて「次へ」をクリックします。
「主キーのソース」で、デフォルトの「既存のトリガー」を受け入れて「次へ」をクリックします。
「更新可能な列」で、次のステップを実行します。
[Ctrl]キーを押しながら、次の列を選択します。
RELATED_PROJECT
ASSIGNED_TO
STATUS
PRIORITY
「次へ」をクリックします。
「ページおよびリージョン属性」で、次のステップを実行します。
「ページ」に、8
と入力します。
「ページ名」に、Assign Issues
と入力します。
「リージョン・タイトル」に、Assign Issues
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「ボタン・ラベル」で、次のステップを実行します。
「「取消」ボタン・ラベル」で、デフォルトを受け入れます。
「「送信」ボタン・ラベル」に、変更の適用
と入力します。
「次へ」をクリックします。
「ブランチ」でデフォルト値を受け入れ、「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
初期表形式フォームを作成した後、問題を簡単に選択するためにLOVを追加する必要があります。また、未割当ての問題のみが表示されるように問合せを制限する必要があります。
LOVを追加するには、次のステップを実行します。
「成功」ページで、「ページの編集」をクリックします。
ページ8(「Assign Issues」)のページ定義が表示されます。
「リージョン」で、「Assign Issues」をクリックします。
「ソース」の「リージョン・ソース」で、既存の文を次と置き換えます。
SELECT "ISSUE_ID", "ISSUE_SUMMARY", "IDENTIFIED_BY", "IDENTIFIED_DATE", "RELATED_PROJECT", "ASSIGNED_TO", "STATUS", "PRIORITY" FROM "#OWNER#"."HT_ISSUES" WHERE assigned_to IS NULL
レポート属性を編集するには、次のステップを実行します。
ページ上部の「レポート属性」タブを選択します。
ISSUE_SUMMARYのヘッダーを編集します。
ISSUE_SUMMARYの「ヘッダー」フィールドに次のように入力します。
Summary
ISSUE_IDでソートするには、次のステップを実行します。
ISSUE_ID以外のすべての列で、「ソート」を選択します。
IDENTIFIED_DATEの「ソート順序」で、「1」を選択します。
IDENTIFIED_BYの次の属性を編集します。
IDENTIFIED_BYの左にある「編集」アイコンをクリックします。
「表形式フォームの要素」の「表示形式」で、「テキストとして表示(LOVに基づき、状態は保存しない)」を選択します。
「LOV」までスクロールします。
「名前付きLOV」で、「PEOPLE」を選択します。
ページの上部にある「次へ」ボタン(>)をクリックして、IDENTIFIED_DATEに移動します。
IDENTIFIED_DATEの次の属性を編集します。
「列の書式」で、「数値/日付書式」にDD-MON-YYYY
と入力します。
ページの上部にある「次へ」ボタン(>)をクリックして、RELATED_PROJECT列に移動します。
RELATED_PROJECTの次の属性を編集します。
「表形式フォームの要素」の「表示形式」で、「選択リスト(名前付きLOV)」を選択します。
「LOV」の「名前付きLOV」で、「PROJECTS」を選択します。
ページの上部にある「次へ」ボタン(>)をクリックして、ASSIGNED_TO列に移動します。
ASSIGNED_TOの次の属性を編集するには、次のステップを実行します。
「表形式フォームの要素」の「表示形式」で、「選択リスト(名前付きLOV)」を選択します。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PEOPLE」を選択します。
「NULLを表示」で、「はい」を選択します。
「NULLテキスト」に、ハイフン(-)を入力します。
ページの上部にある「次へ」ボタン(>)をクリックして、STATUS列に移動します。
STATUSの次の属性を編集するには、次のステップを実行します。
「表形式フォームの要素」の「表示形式」で、「選択リスト(名前付きLOV)」を選択します。
「LOV」の「名前付きLOV」で、「STATUS」を選択します。
ページの上部にある「次へ」ボタン(>)をクリックして、PRIORITY列に移動します。
PRIORITYの次の属性を編集するには、次のステップを実行します。
「表形式フォームの要素」の「表示形式」で、「選択リスト(名前付きLOV)」を選択します。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PRIORITIES」を選択します。
「NULLを表示」で、「はい」を選択します。
「NULLテキスト」に、ハイフン(-)を入力します。
「変更の適用」をクリックします。
「レポート属性」ページが表示されます。
「ソート」までスクロールします。「昇順イメージ」および「降順イメージ」で、グレーの矢印を選択します。
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No Unassigned Issues.
「変更の適用」をクリックします。
ウィザードによって、不要な「取消」ボタンが作成されています。
この「取消」ボタンを削除するには、次のステップを実行します。
ページ8のページ定義で、「ボタン」セクションにある「取消」をクリックします。
「削除」をクリックします。
「OK」をクリックして選択を確認します。
これで、表形式フォームの作成は完了です。新しいフォームを表示するには、「ページの実行」アイコンをクリックします。 図14-11に示すとおり、「Assign Issues」フォームが表示されます。
問題を割り当てるには、「Assigned To」リストから選択を行って「変更の適用」をクリックします。問題が割り当てられると、その問題は表示されなくなることに注意してください。
最後に、4つのサマリー・レポートを追加する必要があります。
この項の内容は次のとおりです。
問題のサマリーを示すレポートを使用すると、プロジェクトを選択し、そのプロジェクトに関連する問題のサマリーを表示できます。このレポートには、次のサマリー情報が含まれています。
最初に問題が発見された日付
最後に問題が終結した日付
問題の合計数
ステータス別の問題数
優先順位の未解決の問題数
ステータス別の割当て
このレポートを作成するには、情報を2つのSQL文でコーディングします。1つ目の文は単一の結果を持つ情報を収集し、2つ目の文は複数の結果を持つ情報を収集します。
プロジェクト別の問題サマリーのレポートを追加するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「レポート」を選択して「次へ」をクリックします。
「SQLレポート」を選択して「次へ」をクリックします。
「ページ属性」で、次のステップを実行します。
「ページ」に、9
と入力します。
「ページ名」に、Issue Summary by Project
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「SQL問合せ」で、次のステップを実行します。
次のSQL SELECT文を入力します。
SELECT MIN(identified_date) first_identified, MAX(actual_resolution_date) last_closed, COUNT(issue_id) total_issues, SUM(DECODE(status,'Open',1,0)) open_issues, SUM(DECODE(status,'On-Hold',1,0)) onhold_issues, SUM(DECODE(status,'Closed',1,0)) closed_issues, SUM(DECODE(status, 'Open',decode(priority,null,1,0), 0)) open_no_prior, SUM(DECODE(status, 'Open',decode(priority,'High',1,0), 0)) open_high_prior, SUM(DECODE(status, 'Open',decode(priority,'Medium',1,0), 0)) open_medium_prior, SUM(DECODE(status, 'Open',decode(priority,'Low',1,0), 0)) open_low_prior FROM ht_issues WHERE related_project = :P9_PROJECT
「次へ」をクリックします。
「レポート属性」で、次のステップを実行します。
「レポート・テンプレート」で、デフォルトの「デフォルト: 縦のレポート、look 1(NULL列を含む)」を受け入れます。
「リージョン名」に、Issue Summary by Project
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
1つ目の問合せを作成したら、ヘッダーを編集し、関連するプロジェクトを制御するアイテムを作成する必要があります。最初に、レポートの上に表示されるリージョン(プロジェクト・パラメータが含まれる)を作成します。
レポートの上に表される新しいリージョンを作成するには、次のステップを実行します。
「成功」ページで、「ページの編集」をクリックします。
ページ9(「Issue Summary by Project」)のページ定義が表示されます。
「リージョン」で、「作成」アイコンをクリックします。
「HTML」を選択して「次へ」をクリックします。
リージョン・コンテナとして「HTML」を選択し、「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Issue Summary Report Parameters
と入力します。
「表示ポイント」で、「ページ・テンプレート・ボディ (2. リージョン・コンテンツより下のアイテム)」を選択します。
「順序」に、5
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「リージョンの作成」をクリックします。
プロジェクト・アイテムを作成するには、次のステップを実行します。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、デフォルトの「選択リスト」を受け入れて「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P9_PROJECT
と入力します。
「リージョン」で、「Issue Summary Report Parameters」を選択します。
「次へ」をクリックします。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PROJECTS」を選択します。
「NULLテキスト」に、次のように入力します。
- Select -
「NULL値」に、次のように入力します。
- 1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、-1
と入力します。
「アイテムの作成」をクリックします。
問合せを実行する「実行」ボタンを作成するには、次のステップを実行します。
「ボタン」で、「作成」アイコンをクリックします。
「ボタン・リージョン」で、「Issue Summary Report Parameters」を選択して「次へ」をクリックします。
「ボタン位置」で、「このリージョン・アイテムで表示されるボタンの作成」を選択して「次へ」をクリックします。
「ボタン属性」で、次のステップを実行します。
「ボタン名」に、P9_GO
と入力します。
「ボタン・スタイル」で、「テンプレート・ベースのボタン」を選択します。
「テンプレート」で、「ボタン」を選択します。
「ボタンの作成」をクリックします。
次に、レポート・リージョンのヘッダーおよびレポート設定を編集する必要があります。また、ユーザーがプロジェクトを選択している場合に、条件に合わせて表示するレポート・リージョンを設定する必要もあります。
ヘッダーおよびレポート設定を編集するには、次のステップを実行します。
「リージョン」で、「Issue Summary by Project」の横にある「レポート」をクリックします。
「ヘッダー・タイプ」で、「カスタム」を選択します。
「列属性」で、次のステップを実行します。
FIRST_IDENTIFIEDのヘッダーを次のように変更します。
First Issue Identified:
LAST_CLOSEDのヘッダーを次のように変更します。
Last Issue Closed:
TOTAL_ISSUESのヘッダーを次のように変更します。
Total Issues:
OPEN_ISSUESのヘッダーを次のように変更します。
Open Issues:
ONHOLD_ISSUESのヘッダーを次のように変更します。
On-Hold Issues:
CLOSED_ISSUESのヘッダーを次のように変更します。
Closed Issues:
OPEN_NO_PRIORのヘッダーを次のように変更します。
Open Issues with No Priority:
OPEN_HIGH_PRIORのヘッダーを次のように変更します。
Open Issues of High Priority:
OPEN_MEDIUM_PRIORのヘッダーを次のように変更します。
Open Issues of Medium Priority:
OPEN_LOW_PRIORのヘッダーを次のように変更します。
Open Issues of Low Priority:
「レイアウトおよびページ区切り」までスクロールします。次のように指定します。
「NULL値の表示形式」に、ハイフン(-)を入力します。
「ページ区切りスキーム」で、「- ページ区切りが選択されていない -」を選択します。
ページ上部の「リージョン定義」タブを選択します。
「条件付き表示」までスクロールします。
「条件タイプ」で、「式1のアイテムの値が、式2のコロンで区切られたリストに含まれない」を選択します。
「式1」に、P9_PROJECT
と入力します。
「式2」に、-1
と入力します。
「変更の適用」をクリックします。
ステータス別の割当てを取得する問合せを作成するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「レポート」を選択して「次へ」をクリックします。
「レポート実装」で、「SQLレポート」を選択して「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Assignments by Status
と入力します。
「列」で、「2」を選択します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「ソース」で、次のステップを実行します。
「SQL問合せ、またはSQL問合せを戻すPL/SQLファンクションを入力」に、次のように入力します。
SELECT p.person_name, i.status, COUNT(i.issue_id) issues FROM ht_issues i, ht_people p WHERE i.related_project = :P9_PROJECT AND i.assigned_to = p.person_id GROUP BY person_name, status
「ページごとの行数」に、20
と入力します。
「ブレーク列」で、「列1」を選択します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「条件付き表示」で、次のステップを実行します。
「条件タイプ」で、「式1のアイテムの値が、式2のコロンで区切られたリストに含まれない」を選択します。
「式1」に、次のように入力します。
P9_PROJECT
「式2」に、-1
と入力します。
「リージョンの作成」をクリックします。
ヘッダーおよびレポート設定を編集するには、次のステップを実行します。
「リージョン」で、「Assignments by Status」の横にある「レポート」をクリックします。
「ヘッダー・タイプ」で、「カスタム」を選択します。
PERSON_NAMEのヘッダーをAssigned To
に変更します。
「レイアウトおよびページ区切り」までスクロールします。「ページ区切りスキーム」で、「選択リストの1から15 16から30の範囲の行(ページ区切りあり)」を選択します。
「メッセージ」までスクロールします。「データが見つからなかった場合のメッセージ」に、次のように入力します。
No issues found.
「変更の適用」をクリックします。
新しく作成したレポートを表示するには、「ページの実行」アイコンをクリックします。最初は、プロジェクトが選択されていないため、データは表示されません。プロジェクトを選択して「実行」をクリックします。 レポートが図14-12に示すように表示されます。
「Resolved by Month Identified」レポートは、折れ線グラフです。このレポートは、最初に、終結した各問題の解決にかかった日数を計算し、その問題が発見された月ごとに平均値を計算して、最後に、月別に表示します。
「Resolved by Month Identified」レポートを追加するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「チャート」を選択して「次へ」をクリックします。
「SVGチャート」を選択して「次へ」をクリックします。
「折れ線」を選択して「次へ」をクリックします。
「ページ属性」で、次のステップを実行します。
「ページ番号」に、10
と入力します。
「ページ名」および「リージョン名」に、Resolved by Month Identified
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「問合せ」で、次のステップを実行します。
「シリーズ名」に、Resolved
と入力します。
「SQL」に次の内容を入力します。
SELECT NULL l, TO_CHAR(identified_date,'Mon YYYY') month, AVG(actual_resolution_date-identified_date) days FROM ht_issues WHERE status = 'Closed' GROUP BY TO_CHAR(identified_date,'Mon YYYY')
この問合せにはリンクはありません。つまり、l列です。発見された日付から月が抽出されるため、データを月別にグループ化できます。最後に、その月に発見された問題を終結するためにかかった平均日数が計算されます。
「データが見つからなかった場合のメッセージ」に、次のように入力します。
No Closed Issues found.
「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
次に、正しい軸ラベルを追加して、チャート・タイトルと凡例をオフにします。
チャートを編集するには、次のステップを実行します。
「成功」で、「ページの編集」を選択します。
ページ10(「Resolved by Month Identified」)のページ定義が表示されます。
「リージョン」で、「Resolved by Month Identified」の横にある「SVGチャート」を選択します。
「チャートの設定」で、次のステップを実行します。
「チャート高さ」に、300
と入力します。
「凡例を表示」を選択解除します。
「軸の設定」までスクロールします。
「X軸のタイトル」に、Date Identified
と入力します。
「Y軸のタイトル」に、Days to Resolve
と入力します。
「変更の適用」をクリックします。
「Target Resolution Dates」レポートは、終結していない問題と、問題の解決目標日となっている日に割り当てられたユーザーが表示されるカレンダです。
解決目標日のカレンダを作成するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「カレンダ」を選択して「次へ」をクリックします。
「SQLカレンダ」を選択して「次へ」をクリックします。
「ページ属性」で、次のステップを実行します。
「ページ番号」に、11
と入力します。
「ページ名」および「リージョン名」に、Target Resolution Dates
と入力します。
「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「表/ビューの所有者」で、次のステップを実行します。
「SQL問合せを入力」に、次のように入力します。
SELECT I.TARGET_RESOLUTION_DATE, I.ISSUE_SUMMARY || ' ('||nvl(P.PERSON_NAME,'Unassigned') ||') ' disp, I.ISSUE_ID FROM HT_ISSUES I, HT_PEOPLE P WHERE I.ASSIGNED_TO = P.PERSON_ID (+) AND (I.RELATED_PROJECT = :P11_PROJECT OR :P11_PROJECT = '-1') AND I.STATUS != 'Closed'
「次へ」をクリックします。
次のことに注意してください。
target_resolution_date
は、問題が表示される日です。
issue_summary
は、割り当てられたユーザーと連結しています。
issue_id
は、表示されませんが、ユーザーが問題を表示して編集できるようにするリンクの作成に使用されます。
「日付列」および「表示列」で、次のステップを実行します。
「日付列」で、「TARGET_RESOLUTION_DATE」を選択します。
「表示列」で、「DISP」を選択します。
「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
ユーザーが1つのプロジェクトまたはすべてのプロジェクトを検索できるようにするには、アイテムを追加する必要があります。
プロジェクトの検索をサポートするアイテムを追加するには、次のステップを実行します。
「成功」で、「ページの編集」を選択します。
ページ11(「Target Resolution Dates」)のページ定義が表示されます。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプ」で、「選択リスト」を選択して「次へ」をクリックします。
「リスト制御タイプの選択」で、「選択リスト」を選択して「次へ」をクリックします。
「表示位置および名前」で、次のステップを実行します。
「アイテム名」に、P11_PROJECT
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「LOV」で、次のステップを実行します。
「名前付きLOV」で、「PROJECTS」を選択します。
「NULLテキスト」に、次のように入力します。
- All Projects -
「NULL値」に、次のように入力します。
-1
「次へ」をクリックします。
「アイテム属性」で、デフォルトを受け入れて「次へ」をクリックします。
「ソース」で、「デフォルト」に、次のように入力します。
-1
「アイテムの作成」をクリックします。
問合せを実行する「実行」ボタンを作成するには、次のステップを実行します。
「ボタン」で、「作成」アイコンをクリックします。
「ボタン・リージョン」で、「Target Resolution Dates」を選択して「次へ」をクリックします。
「ボタン位置」で、「このリージョン・アイテムで表示されるボタンの作成」を選択して「次へ」をクリックします。
「ボタン属性」で、次のステップを実行します。
「ボタン名」に、P11_GO
と入力します。
「ボタン・スタイル」で、「テンプレート・ベースのボタン」を選択します。
「テンプレート」で、「ボタン」を選択します。
「ボタンの作成」をクリックします。
最後に、カレンダ属性を変更して、問題を表示し、その問題を編集するためのリンク・サポートを追加する必要があります。これを実行するには、ページ7(「View/Edit Issues」)をコールし、そのページからすべてのデータを消去し、コール元のページはページ11であるということを指定して、現行の問題のIDに渡す必要があります。その後で、問合せが終結した問題を除外する際に表示するコメントを追加する必要があります。
カレンダ属性を変更するには、次のステップを実行します。
「リージョン」で、「Target Resolution Dates」の右にある「カレンダ」をクリックします。
「列リンク」までスクロールし、次のように入力します。
「ページ」に、7
と入力します。
「キャッシュのクリア」に、7
と入力します。
「次のアイテムを設定」に、次のように入力します。
P7_ISSUE_ID,P7_PREV_PAGE
「次の値を使用」に、次のように入力します。
#ISSUE_ID#,11
ページ上部の「リージョン定義」タブを選択します。
「ヘッダーおよびフッター」までスクロールします。
「リージョン・フッター」に、次のように入力します。
This excludes Closed issues.
「変更の適用」をクリックします。
新しく作成したカレンダを表示するには、「ページの実行」アイコンをクリックします。 レポートが図14-14に示すように表示されます。「毎週」または「毎日」をクリックすると、対応するカレンダ表示で見ることができます。
また、問題について表示されたテキストをクリックすると、「Edit Issue」ページも表示できます。カレンダに戻るには、「取消」をクリックします。
「Average Days to Resolve」レポートは、棒グラフで、終結した各問題の解決にかかった日数を計算し、その数の平均値を担当者別に計算します。
「Average Days to Resolve」レポートを追加するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「チャート」を選択して「次へ」をクリックします。
「HTMLチャート」を選択して「次へ」をクリックします。
「棒(HTML)」を選択して「次へ」をクリックします。
「ページ属性」で、次のステップを実行します。
「ページ」に、12
と入力します。
「ページ名」および「リージョン名」に、Average Days to Resolve
と入力します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「タブ・オプション」で、デフォルトの「タブを使用しない」を受け入れて「次へ」をクリックします。
「チャート定義」で、次のステップを実行します。
「チャートのSQL」で、既存の文を次と置き換えます。
SELECT NULL l, NVL(p.person_name,'None Assigned') person, AVG(i.actual_resolution_date-i.identified_date) days FROM ht_issues i, ht_people p WHERE i.assigned_to = p.person_id (+) AND i.status = 'Closed' GROUP BY p.person_name
前述のSELECT文の内容は、次のとおりです。
1番目に選択されるアイテムはリンクです。このレポートは他のページにリンクしないため、NULL
が選択されています。
2番目のアイテムはユーザーの名前です(assigned_to
がNULL
の場合はNone Assigned
)。
3番目に選択されるアイテムは、そのユーザーがすべての問題の解決にかかった平均日数です。問題のステータスは、終結を示しています。
「サマリーに含める」で、「データ・ポイント数」のみを選択します。その他のオプションは、すべて選択解除します。
残りのデフォルトを受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
詳細ページがすべて完成したら、コンテンツをホームページに追加し、すべてのページを結びつける必要があります。このセクションでは、次の情報を表示するように、ホームページを変更します。
使用可能なすべてのレポートのメニュー
メンテナンス・ページへのナビゲーション
新しい問題を追加するボタン
期限切れの問題
最近発見された問題
プロジェクト別の未解決の問題のチャート
未割当ての問題
この項の内容は次のとおりです。
最初に、リストとして実装されるメニューを追加します。
メニューを追加するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「共有コンポーネント」アイコンをクリックします。
「ナビゲーション」で、「リスト」をクリックします。
「作成」をクリックします。
「名前」に、Main Menu
と入力します。
「リスト・テンプレート」で、「縦のサイドバー・リスト」を選択します。
「作成」をクリックします。
リストを作成したら、これにリスト・アイテムを追加します。各レポート・ページに対し、1つのリスト・アイテムを追加する必要があります。
「Assign Issues」のリスト・アイテムを追加するには、次のステップを実行します。
ページの右側の「リスト・エントリの作成」ボタンをクリックします。
「リスト・エントリ・ラベル」に、Assign Issues
と入力します。
「ターゲット」で、次のように入力します。
「ページ」で、「8」を選択します。
「このページのページ区切りをリセット」を選択します。
「作成」をクリックします。
「リスト・エントリ」ページが表示されます。
ここで、さらに4つのリスト・アイテム(アプリケーションの各レポートに1つずつ)を作成する必要があります。
さらに4つのリスト・アイテムを追加するには、次のステップを実行します。
「リスト・エントリ」ページで、「リスト・エントリの作成」をクリックします。
次のステップを実行して、「Issues」のリスト・アイテムを定義します。
「順序」に、20
と入力します。
「リスト・エントリ・ラベル」に、Issues
と入力します。
「ターゲット」で、次の各項目を指定します。
「ページ」で、「6
」を選択します。
「このページのページ区切りをリセット」を選択します。
「キャッシュのクリア」に、6と入力します。
これによって、ページ6のすべての選択項目がセッション・ステートから消去されます。
「作成後、別のものを作成」をクリックします。
次のステップを実行して、「Issues Summary」のリスト・アイテムを定義します。
「順序」に、30
と入力します。
「リスト・エントリ・ラベル」に、Issue Summary by Project
と入力します。
「ターゲット」で、次の各項目を指定します。
「ページ」で、「9」を選択します。
「このページのページ区切りをリセット」を選択します。
「キャッシュのクリア」に、9と入力します。
「作成後、別のものを作成」をクリックします。
「Resolved by Month Identified」のリスト・アイテムを定義するには、次のステップを実行します。
「順序」に、40
と入力します。
「リスト・エントリ・ラベル」に、Resolved by Month Identified (chart)
と入力します。
「ターゲット」の「ページ」で、「10」を選択します。
「作成後、別のものを作成」をクリックします。
「Target Resolution Dates」のリスト・アイテムを定義するには、次のステップを実行します。
「順序」に、50
と入力します。
「リスト・エントリ・ラベル」に、Target Resolution Dates (calendar)
と入力します。
「ターゲット」で、次の各項目を指定します。
「ページ」で、「11」を選択します。
「このページのページ区切りをリセット」を選択します。
「作成後、別のものを作成」をクリックします。
「Average Days to Resolve」のリスト・アイテムを定義するには、次のステップを実行します。
「順序」に、60
と入力します。
「リスト・エントリ・ラベル」に、Average Days to Resolve (chart)
と入力します。
「ターゲット」の「ページ」で、「12」を選択します。
「作成」をクリックします。
リストを作成したら、これをホームページに含める必要があります。左マージンにリストを表示するには、ページ・テンプレートを、該当するリージョン位置をサポートするテンプレートに変更する必要があります。
ホームページのページ・テンプレートを変更するには、次のステップを実行します。
右上にある「ページの編集」アイコンをクリックします。
ページ12(「Average Days to Resolve」)のページ定義が表示されます。
「ページ」フィールドに、1
と入力して「実行」をクリックします。
「ページ」で、「ページ属性の編集」アイコンをクリックします。
「ページ属性」ページが表示されます。
「表示属性」の「ページ・テンプレート」で、「サイドバー付きのタブなし」を選択します。
「変更の適用」をクリックします。
次に、メニューを含めるリージョンを作成します。
新しいリージョンを作成するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「リスト」を選択して「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Menu
と入力します。
「リージョン・テンプレート」で、「テンプレートなし」を選択します。
「表示ポイント」で、「ページ・テンプレートのリージョン位置2」を選択するか、またはクイック・リンク「[Pos. 2]」を選択します。
「次へ」をクリックします。
「ソース」で、「Main Menu」を選択します。
「リスト・リージョンの作成」をクリックします。
次に、メンテナンス・ナビゲーションをリストとして追加する必要があります。このリストは、左マージンのレポートのすぐ下に表示されます。
「アプリケーション」ホームページに移動します。
「共有コンポーネント」アイコンをクリックします。
「ナビゲーション」で、「リスト」をクリックします。
「作成」をクリックします。
「名前」に、Maintenance
と入力します。
「リスト・テンプレート」で、「縦のサイドバー・リスト」を選択します。
「作成」をクリックします。
次に、3つのリスト・アイテムを作成します。1つ目のリスト・アイテムは、2つのナビゲーション・リージョン間のセパレータとなります。他の2つは、ユーザーとプロジェクトの表示を可能にします。
リスト・アイテムを追加するには、次のステップを実行します。
「リスト・エントリを作成 」をクリックします。
1つ目のリスト・アイテムを定義するには、次のステップを実行します。
「リスト・エントリ・ラベル」に、次のように入力します。
「ターゲット」の「ページ」で、「1」を選択します。
「作成後、別のものを作成」をクリックします。
次のステップを実行して、「Projects」のリスト・アイテムを定義します。
「順序」に、20
と入力します。
「リスト・エントリ・ラベル」に、次のように入力します。
Projects
「ターゲット」で、次のステップを実行します。
「ページ」で、「2」を選択します。
「このページのページ区切りをリセット」を選択します。
「作成後、別のものを作成」をクリックします。
次のステップを実行して、「People」のリスト・アイテムを定義します。
「順序」に、30
と入力します。
「リスト・エントリ・ラベル」に、次のように入力します。
People
「ターゲット」で、次のステップを実行します。
「ページ」で、「4」を選択します。
「このページのページ区切りをリセット」を選択します。
「作成」をクリックします。
リージョンを作成して新しいリストを表示するには、次のステップを実行します。
右上にある「ページの編集」アイコンをクリックします。
「リージョン」で、「作成」アイコンをクリックします。
「リスト」を選択して「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Maintenance
と入力します。
「リージョン・テンプレート」で、「テンプレートなし」を選択します。
「表示ポイント」で、「ページ・テンプレートのリージョン位置2」を選択するか、またはクイック・リンク「[Pos. 2]」を選択します。
「次へ」をクリックします。
「ソース」で、「Maintenance」を選択します。
「リスト・リージョンの作成」をクリックします。
次に、ユーザーをページ7(「Create/Edit Issue」)にナビゲートするボタンを作成します。
ボタンを含めるリージョンを作成するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「HTML」を選択して「次へ」をクリックします。
リージョン・コンテナとして「HTML」を選択し、「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Buttons
と入力します。
「リージョン・テンプレート」で、「テンプレートなし」を選択します。
「表示ポイント」で、「ページ・テンプレートのリージョン位置1」を選択するか、またはクイック・リンク「[Pos. 1]」を選択します。
「次へ」をクリックします。
「リージョンの作成」をクリックします。
ボタンを追加するには、次のステップを実行します。
「ボタン」で、「作成」アイコンをクリックします。
「ボタン・リージョン」で、「ボタン」を選択して「次へ」をクリックします。
「ボタン位置」で、デフォルトの「リージョン位置にボタンを作成」を受け入れて「次へ」をクリックします。
「ボタン属性」で、次のステップを実行します。
「ボタン名」に、ADD
と入力します。
「ラベル」に、次のように入力します。
Add a New Issue
「アクション」で、「ページを送信せずにURLにリダイレクト」を選択します。
「次へ」をクリックします。
「ボタン・テンプレート」で、「ボタン」を選択して「次へ」をクリックします。
「位置」で、「リージョンの上部」を選択し、残りのデフォルトを受け入れて「次へ」をクリックします。
「ブランチ」ページで、正しいページをコールし、キャッシュを消去して、「作成」および「取消」ボタンによってユーザーがホームページに戻されることを指定する必要があります。
「ブランチ」で、次の各項目を指定します。
「ページ」で、「7」を選択します。
「キャッシュのクリア」に、7
と入力します。
「次のアイテムを設定」に、次のように入力します。
P7_PREV_PAGE
「次の値を使用」に、1
を入力します。
「ボタンの作成」をクリックします。
次に、ホームページにコンテンツを追加します。この演習では、期限切れの問題を表示するレポートを追加します。このレポートの問合せによって、未解決のすべての問題と、過ぎてしまった解決目標日が取得されます。
期限切れの問題を表示するレポートを追加するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「レポート」を選択して「次へ」をクリックします。
「レポート実装」で、「SQLレポート」を選択して「次へ」をクリックします。
「表示属性」で、「タイトル」フィールドにOverdue Issues
と入力して「次へ」をクリックします。
「ソース」で、「SQL問合せの入力」に、次の文を入力します。
SELECT i.issue_id, i.priority, i.issue_summary, p.person_name assignee, i.target_resolution_date, r.project_name FROM ht_issues i, ht_people p, ht_projects r WHERE i.assigned_to = p.person_id (+) AND i.related_project = r.project_id AND i.target_resolution_date < sysdate AND i.status != 'Closed'
割当てはオプションであるため、外部結合が必要です。
「リージョンの作成」をクリックします。
リージョンを作成したら、ヘッダーを編集し、サマリーに問題の詳細を表示するリンクを作成する必要があります。
列ヘッダーを編集するには、次のステップを実行します。
「リージョン」で、「Overdue Issues」の横にある「レポート」をクリックします。
「ヘッダー・タイプ」で、「カスタム」を選択します。
ISSUE_IDのヘッダーを削除します。
ISSUE_SUMMARYの「ヘッダー」に次のように入力します。
Summary
ASSIGNEEで、ヘッダーを次のように変更します。
Assigned To
TARGET_RESOLUTION_DATEに対して、次のステップを実行します。
「ヘッダー」に、次のように入力します。
Target<br>Resolution<br>Date
「列の位置合せ」で、「中央」を選択します。
「ヘッダーの位置合せ」で、「中央」を選択します。
ISSUE_IDで、「表示」を選択解除します。
これによって、問合せはリンクに渡されますが、表示はされなくなります。
ISSUE IDでソートするには、ISSUE_ID以外のすべての列で「ソート」を選択します。
TARGET_RESOLUTION_DATEの「ソート順序」で、「1」を選択します。
ISSUE_SUMMARYの「ソート順序」で、「2」を選択します。
ISSUE_SUMMARYの列属性を編集するには、次のステップを実行します。
ISSUE_SUMMARYの左にある「編集」アイコンをクリックします。
「列リンク」までスクロールして、次のステップを実行します。
「リンク・テキスト」で、クイック・リンク「[Icon 3]」をクリックします。
「ページ」で、「7」を選択します。
「キャッシュのクリア」で、「7」を選択します。
「アイテム1」に、次の名前を入力します。
P7_ISSUE_ID
「アイテム1」に、次の値を入力します。
#ISSUE_ID#
「アイテム2」に、次の名前を入力します。
P7_PREV_PAGE
「アイテム2」に、次の値を入力します。
1
「変更の適用」をクリックします。
レイアウトおよびページ区切り属性を選択するには、次のステップを実行します。
「レイアウトおよびページ区切り」で、次のステップを実行します。
「ページ区切りスキーム」で、「検索エンジン1、2、3、4(ページ区切りに基づいて設定)」を選択します。
「行数」に、5
と入力します。
「ソート」で、「昇順イメージ」および「降順イメージ」のグレーの矢印を選択します。
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No Overdue Issues.
「変更の適用」をクリックします。
次に追加するレポートは、未割当て(未解決)の問題を表示します。このレポートは、「Overdue Issues」と非常に似ています。これは手動で作成せずに、「Overdue Issues」レポートをコピーしてから変更できます。
既存のレポートをコピーして新しいレポートを作成するには、次のステップを実行します。
「リージョン」で、「コピー」アイコンをクリックします。
Name列で、「Overdue Issues」をクリックします。
「コピー先ページ」でデフォルトの「1」を受け入れ、残りのデフォルトも受け入れて「次へ」をクリックします。
「リージョン名」に、Unassigned Issues
と入力します。
「リージョンをコピー」をクリックします。
問合せを変更し、レポート・リージョンを編集するには、次のステップを実行します。
「リージョン」セクションで、「Unassigned Issues」をクリックします。
「リージョン・ソース」で、既存の文を次と置き換えます。
SELECT i.issue_id, i.priority, i.issue_summary, i.target_resolution_date, r.project_name, p.person_name identifiee FROM ht_issues i, ht_people p, ht_projects r WHERE i.assigned_to IS NULL AND i.status != 'Closed' AND i.related_project = r.project_id AND i.identified_by = p.person_id
ページ上部の「レポート属性」タブを選択します。
以前に定義した列には、変更された属性が保持されていることに注意してください。
IDENTIFIEEに、次のヘッダーを入力します。
Identified By
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No Unassigned Issues.
「変更の適用」をクリックします。
最後に、最近発見された問題のレポートを追加します。基礎となる問合せによって、最近発見された問題が5つ表示されます。
既存のレポートをコピーして、最近発見された問題のレポートを作成するには、次のステップを実行します。
「リージョン」で、「コピー」アイコンをクリックします。
「名前」で、「Unassigned Issues」を選択します。
「コピー先ページ」でデフォルトの「1」を受け入れ、残りのデフォルトも受け入れて「次へ」をクリックします。
「リージョン名」に、Recently Opened Issues
と入力します。
「リージョンをコピー」をクリックします。
問合せを変更し、レポート・リージョンを編集するには、次のステップを実行します。
「リージョン」で、「Recently Opened Issues」の横にある「レポート」をクリックします。
すべての列に対して、次のステップを実行します。
「ソート」を選択解除して、ソートを無効にします。
「順序」を-に設定します。
ページ上部の「リージョン定義」タブを選択します。
「リージョン・ソース」で、既存の文を次と置き換えます。
SELECT issue_id, priority, issue_summary, assignee, target_resolution_date, project_name, identifiee FROM ( SELECT i.issue_id, i.priority, i.issue_summary, p.person_name assignee, i.target_resolution_date, r.project_name, p2.person_name identifiee FROM ht_issues i, ht_people p, ht_people p2, ht_projects r WHERE i.assigned_to = p.person_id (+) AND i.related_project = r.project_id AND i.identified_by = p2.person_id AND i.created_date > (sysdate - 7) ORDER BY i.created_date desc ) WHERE rownum < 6
ページ上部の「レポート属性」タブを選択します。
ASSIGNEEで、ASSIGNEEがISSUE_SUMMARYの後に表示されるまで「ソート順序」列の右にある上矢印をクリックします。
ASSIGNEEで、ヘッダーを次のように変更します。
Assigned To
「レイアウトおよびページ区切り」セクションまでスクロールします。「ページ区切りスキーム」で、「- ページ区切りが選択されていない -」を選択します。
「メッセージ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No Recently Opened Issues.
「変更の適用」をクリックします。
次に、「Open Issues by Project」を表示する円グラフを追加します。
円グラフを追加するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「チャート」を選択して「次へ」をクリックします。
「SVGチャート」を選択して「次へ」をクリックします。
「円」を選択して「次へ」をクリックします。
「表示属性」で、「タイトル」にOpen Issues by Project
と入力して「次へ」をクリックします。
「ソース」で、「SQL」に次の文を入力します。
SELECT NULL LINK, NVL(r.project_name,'No Project') label, COUNT(r.project_name) value FROM ht_issues i, ht_projects r WHERE i.status = 'Open' AND i.related_project = r.project_id GROUP BY NULL, r.project_name ORDER BY r.project_name
この問合せにはリンクは含まれないこと、ラベルはProject Name
であること、また、円グラフで計算および使用される値はプロジェクト別の未解決の問題の合計数であることに注意してください。
「リージョンの作成」をクリックします。
チャートを編集するには、次のステップを実行します。
「リージョン」で、「Open Issues by Project」の横にある「SVGチャート」を選択します。
「チャート幅」に、500
と入力します。
「チャート高さ」に、200
と入力します。
「チャート・タイトル」で、タイトルを削除します。
「チャート問合せ」で、「データが見つからなかった場合のメッセージ」に次のように入力します。
No Open Issues.
「フォントの設定」の「凡例」で、「フォント・サイズ」に「14」を選択します。
「変更の適用」をクリックします。
前述の演習で、ホームページにメニューを作成し、アプリケーション内の様々なページにナビゲートできるようにしました。次に、ホームページにナビゲートする方法を指定する必要があります。これは、ブレッドクラムを利用して行います。ブレッドクラムは、新しいページを作成するときに追加するか、ページを作成した後に手動で追加できます。
次の演習では、ブレッドクラム・エントリを追加し、次にそのブレッドクラムをページ0のリージョンに挿入します。ページ0に追加するコンポーネントは、アプリケーションのすべてのページで表示できます。
この項の内容は次のとおりです。
ブレッドクラム・ページへナビゲートするには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「共有コンポーネント」をクリックします。
「ナビゲーション」で、「ブレッドクラム」をクリックします。
「ブレッドクラム」アイコンをクリックします。
「ブレッドクラム・エントリ」ページが表示されます。
次に、既存のブレッドクラム・エントリを編集し、他のページのブレッドクラム・エントリを追加します。
ページ1のブレッドクラム・エントリを編集するには、次のステップを実行します。
「ブレッドクラム・エントリ」で、「ページ1」をクリックします。
「ブレッドクラム」で、「ページ」に1
と入力します。
「エントリ」で、「短縮名」にHome
と入力します。
「ターゲット」で、「ページ」に1
と入力します。
「変更の適用」をクリックします。
ページ2のブレッドクラム・エントリを追加するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に2
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Projects
と入力します。
「ターゲット」で、「ページ」に2
と入力します。
「作成」をクリックします。
ページ3のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に3
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Projects」を選択します。
「短縮名」に、Create/Edit Projects
と入力します。
「ターゲット」で、「ページ」に3
と入力します。
「作成」をクリックします。
ページ4のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に4
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、People
と入力します。
「ターゲット」で、「ページ」に4と入力します。
「作成」をクリックします。
「People」のブレッドクラム・エントリは、「Projects」と兄弟関係にあることに注意してください。
ページ5のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に5
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「People」を選択します。
「短縮名」に、Create/Edit Person Information
と入力します。
「ターゲット」で、「ページ」に5と入力します。
「作成」をクリックします。
ページ6のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に6
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Issues
と入力します。
「ターゲット」で、「ページ」に6と入力します。
「作成」をクリックします。
ページ7のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に7
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Create/Edit Issue
と入力します。
「ターゲット」で、「ページ」に7と入力します。
「作成」をクリックします。
ページ8のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に8
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Assign Issues
と入力します。
「ターゲット」で、「ページ」に8
と入力します。
「作成」をクリックします。
ページ9のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に9
と入力します。
「エントリ」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Issue Summary by Project
と入力します。
「ターゲット」で、「ページ」に9
と入力します。
「作成」をクリックします。
ページ10のブレッドクラム・エントリを作成するには、次のステップを実行します。
「ブレッドクラム・エントリの作成」をクリックします。
「ブレッドクラム」で、「ページ」に10
と入力します。
「メニュー・オプション」で、次のステップを実行します。
「親エントリ」で、「Home」を選択します。
「短縮名」に、Resolved by Month Identified
と入力します。
「ターゲット」で、「ページ」に10
と入力します。
「作成」をクリックします。
ブレッドクラムが完成したら、ページ0を作成し、ブレッドクラム・メニューを含めるリージョンを作成する必要があります。ページ0にコンポーネントを作成すると、アプリケーションを使用してすべてのページにコンポーネントが表示されます。
ページ0を作成するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「ページの作成」をクリックします。
「空白ページ」を選択して「次へ」をクリックします。
「ページ属性」で、「ページ番号」に0
と入力して「次へ」をクリックします。
「ページ名」で、「名前」にBreadcrumbsと入力して「次へ」をクリックします。
「タブ」で、デフォルトの「いいえ」を受け入れて「次へ」をクリックします。
選択内容を確認して、「終了」をクリックします。
ブレッドクラムを含めるリージョンを作成するには、次のステップを実行します。
「成功」で、「ページの編集」を選択します。
ページ0のページ定義が表示されます。
「リージョン」で、「作成」アイコンをクリックします。
「このページに追加するリージョン・タイプを指定」で、「ブレッドクラム」を選択して「次へ」をクリックします。
「ブレッドクラム・コンテナ・リージョン」で、次のステップを実行します。
「リージョン・タイトル」に、Breadcrumbsと入力します。
「リージョン・テンプレート」で、「テンプレートなし」を選択します。
「表示ポイント」で、「ページ・テンプレートのリージョン位置1」を選択します。
これを選択すると、ページのその他のすべてのコンテンツの上にブレッドクラムが表示されます。
「次へ」をクリックします。
「ブレッドクラム」で、デフォルト値を受け入れて「次へ」をクリックします。
「ブレッドクラム・エントリ」で、デフォルト値を受け入れて「次へ」をクリックします。
「終了」をクリックします。
「ページの編集」をクリックして、ホームページに戻ります。ページ0の「ページ定義」が表示されたら、「次のページ」ボタン(>)をクリックします。ページ1のページ定義が表示されます。
完成したホームページを表示するには、「ページの実行」アイコンをクリックします。 ホームページが図14-17のように表示されます。
ブレッドクラムは、上部のバーに表示されます。ページの左側にあるメンテナンス・メニューのいずれかのアイテムをクリックします。ブレッドクラムの変化に注意してください。
この段階で、アプリケーションは完全に機能しますが、セキュリティおよび電子メール通知が欠落しています。これらについては、次の項で説明します。
アプリケーションが完全に機能するようになったら、計画およびプロジェクト分析段階で示した拡張機能を追加することができます。
この項の内容は次のとおりです。
計画およびプロジェクト分析フェーズでは、2つの電子メール要件が作成されました。
問題がユーザーに割り当てられた際に、ユーザーに通知します。
問題が期限切れになった際に、プロジェクト・リーダーに通知します。
この項の内容は次のとおりです。
Oracle Application Expressアプリケーション内からメールを送信するには、提供されているAPEX_MAIL
パッケージをコールするPL/SQLプロセスを作成します。
電子メールはすぐには送信されず、DBMS_JOB
によってキューがプッシュされるまで、一時キューに格納されます。DBMS_JOB
は、SMTPホスト・アドレスおよびSMTPホスト・ポートというプリファレンスを使用して、キュー内のメールを送信します。デフォルトでは、これらのプリファレンスはlocalhost
および25
に設定されています。Oracle Application ExpressがSMTPサービス用に構成されない場合は、「電子メールの環境設定」を変更する必要があります。
参照: 電子メールの環境設定の構成については、『Oracle Database Application Expressユーザーズ・ガイド』の「アプリケーションからの電子メールの送信方法」を参照してください。 |
APEX_MAIL
パッケージのSEND
プロシージャの定義を次に示します。
PROCEDURE SEND Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_TO VARCHAR2 IN P_FROM VARCHAR2 IN P_BODY VARCHAR2 IN P_BODY_HTML VARCHAR2 IN DEFAULT P_SUBJ VARCHAR2 IN DEFAULT P_CC VARCHAR2 IN DEFAULT P_BCC VARCHAR2 IN DEFAULT
最初に、ユーザーが新しく割り当てられた際のそのユーザーへの通知を追加します。割当ての作成または変更は、2つの異なるページ(「Create/Edit Issue」および「Assign Issues」)から実行できます。
「Create/Edit Issue」ページでは、初期値を格納し、すべての変更に対してその初期値を確認して、割当てが作成または変更されたかどうかを確認できます。「Assign Issues」は表形式フォームであるため、古い値と新しい値を確認する方法はありません。このため、通知を実装する最適な方法は、HT_ISSUES
でBEFORE INSERTおよびBEFORE UPDATEトリガーを使用することです。SQLワークショップを使用すると、このトリガーをプログラムによって作成できます。
HT_ISSUES
にBEFORE INSERTおよびBEFORE UPDATEトリガーを作成するには、次のステップを実行します。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。
「作成」をクリックします。
「作成するデータベース・オブジェクトのタイプの選択」で、「トリガー」をクリックします。
「表名」で、「HT_ISSUES」を選択して「次へ」をクリックします。
「定義」で、次のステップを実行します。
「トリガー名」で、BIU_HT_ISSUES_NOTIFY_ASSIGNEE
と入力します。
「実行ポイント」で、「後」を選択します。
「オプション」で、「挿入」と「更新」を選択します。
「トリガー本体」に、次のように入力します。
IF (INSERTING AND :new.assigned_to IS NOT NULL) OR (UPDATING AND (:old.assigned_to IS NULL OR :new.assigned_to != :old.assigned_to) AND :new.assigned_to IS NOT NULL) THEN FOR c1 IN (SELECT person_name, person_email FROM ht_people WHERE person_id = :new.assigned_to) LOOP IF c1.person_email IS NOT NULL THEN FOR c2 IN (SELECT project_name FROM ht_projects WHERE project_id = :new.related_project) LOOP -- APEX_MAIL.SEND( -- p_to => c1.person_email, -- p_from => c1.person_email, -- p_body => -- 'You have been assigned a new issue. -- 'The details are below. ' ||chr(10)|| -- chr(10)|| -- ' Project: '|| c2.project_name ||chr(10)|| -- ' Summary: '||:new.issue_summary ||chr(10)|| -- ' Status: '||:new.status ||chr(10)|| -- 'Priority: '||nvl(:new.priority,'-'), -- p_subj => 'New Issue Assignment'); END LOOP; END IF; END LOOP; END IF;
このトリガーをご使用の環境で機能させるには、APEX_MAIL.SENDのコメントをはずし、p_to
およびp_from
を、独自の有効な電子メール・アドレスと置き換えます。
「次へ」をクリックします。
コードを確認するには、「SQL」の矢印を展開します。
「終了」をクリックします。
2つ目の電子メール通知では、問題が期限切れになるとプロジェクト・リーダーに通知されます。解決目標日が過ぎると、問題は期限切れになりますが、終結はしていません。問題の期限が切れたかどうかの判別にユーザーは介入しないため、ページ上で、またはトリガーで期限切れを確認することはできません。
期限切れの問題を確認する最適な方法は、HT_ISSUES
表を問い合せるパッケージを記述することです。パッケージは、期限切れの問題を検出すると、プロジェクト・リーダーに電子メールを送信します。このプロシージャは、プロジェクト別に問題を確認するため、プロジェクト・リーダーが受信する電子メールは、各問題で1つではなく、すべての期限切れの問題で1つのみです。パッケージは、dbms_job
によって1日に1回コールされます。
オブジェクトの作成機能は、次のいずれかの方法で使用できます。
SQLワークショップ内からパッケージおよびパッケージ本体を作成する。
SQLコマンド・プロセッサを使用して、createコマンドを実行する。
パッケージを作成するには、次のステップを実行します。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「SQLコマンド」をクリックします。
SQLコマンドが表示されます。
表示されるフィールドに次の文を入力します。
CREATE OR REPLACE package ht_check_overdue_issues AS PROCEDURE email_overdue; END; /
「実行」をクリックします。
パッケージ本体を作成するには、次のステップを実行します。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「SQLコマンド」をクリックします。
SQLコマンドが表示されます。
表示されるフィールドに次の文を入力します。
CREATE OR REPLACE PACKAGE BODY ht_check_overdue_issues AS PROCEDURE email_overdue IS l_msg_body varchar2(32000) := null; l_count number := 0; BEGIN FOR c1 IN (SELECT pr.project_id, pr.project_name, pe.person_name, pe.person_email FROM ht_projects pr, ht_people pe WHERE pr.project_id = pe.assigned_project AND pe.person_role = 'Lead') LOOP FOR c2 IN (SELECT i.target_resolution_date, i.issue_summary, p.person_name, i.status, i.priority FROM ht_issues i, ht_people p WHERE i.assigned_to = p.person_id (+) AND i.related_project = c1.project_id AND i.target_resolution_date < SYSDATE AND i.status != 'Closed' ORDER BY i.target_resolution_date, i.issue_summary) LOOP IF l_count = 0 THEN l_msg_body := 'As of today, the following issues '|| 'are overdue:'||chr(10)|| chr(10)|| ' Project: '|| c1.project_name ||chr(10)|| chr(10)|| ' Target: '||c2.target_resolution_date ||chr(10)|| ' Summary: '||c2.issue_summary ||chr(10)|| ' Status: '||c2.status ||chr(10)|| ' Priority: '||c2.priority ||chr(10)|| 'Assigned to: '||c2.person_name; ELSE l_msg_body := l_msg_body ||chr(10)|| chr(10)|| ' Target: '||c2.target_resolution_date ||chr(10)|| ' Summary: '||c2.issue_summary ||chr(10)|| ' Status: '||c2.status ||chr(10)|| ' Priority: '||c2.priority ||chr(10)|| 'Assigned to: '||c2.person_name; END IF; l_count := l_count + 1; END LOOP; IF l_msg_body IS NOT NULL THEN -- APEX_MAIL.SEND( -- p_to => c1.person_email, -- p_from => c1.person_email, -- p_body => l_msg_body, -- p_subj => 'Overdue Issues for Project '|| c1.project_name); END IF; l_count := 0; END LOOP; END email_overdue; END ht_check_overdue_issues; /
このトリガーをご使用の環境で機能させるには、APEX_MAIL.SEND
のコメントをはずし、p_to
およびp_from
を、独自の有効な電子メール・アドレスと置き換えます。
「実行」をクリックします。
次に、従業員の有効な電子メール・アドレスを含むデモンストレーション・データを更新します。
有効な電子メール・アドレスを含むデモンストレーション・データを更新するには、次のステップを実行します。
「作業領域」ホームページで「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。
ページの左側にある「オブジェクト」リストから、「表」を選択します。
HT_PEOPLE表を選択します。
「データ」タブを選択します。
各ユーザーの電子メール・アドレスを編集します。
「編集」アイコンをクリックします。
「Person Email」を有効な電子メール・アドレスに変更します。
「変更の適用」をクリックします。
HT_PEOPLE表内のすべてのユーザーについて、ステップ5を繰り返します。
「ホーム」ブレッドクラム・リンクをクリックして、「作業領域」ホームページに戻ります。
次に、新しく作成されたパッケージを、指定した時間間隔で実行するDBMS_JOB
を作成します。
DBMS_JOB
を作成するには、次のステップを実行します。
次に、新しく作成されたパッケージを実行するDBMS_JOB
の例を示します。ただし、これを有効なDBMS_JOB
にするには、適切に間隔を設定してSQLワークショップ内でSQLコマンドを使用して実行する必要があります。
DECLARE
jobno number;
BEGIN
DBMS_JOB.SUBMIT(
job => jobno,
what => 'BEGIN
ht_check_overdue_issues.email_overdue;
END;',
next_date => SYSDATE,
interval => desired_interval
);
COMMIT;
END;
/
このDBMS_JOB
で、desired_interval
を適切な間隔に置き換えます。たとえば、毎日1回このジョブを実行するには、desired_interval
を次と置き換えます。
'TRUNC(SYSDATE)+(25/24)'
参照: Application Expressアプリケーションから電子メールを送信する方法については、OTNを参照してください。
|
計画およびプロジェクト分析フェーズでは、2つのセキュリティ要件が作成されました。
CEOおよびマネージャのみが、プロジェクトおよびユーザーを定義および管理できます。
割り当てられた後は、割り当てられたユーザーまたはプロジェクト・リーダーのみがその問題に関するデータを変更できます。
Oracle Application Express内で、認可スキームを定義できます。認可は、ユーザー権限に基づいて、特定のコントロールまたはコンポーネントへのユーザーのアクセスを制御します。定義した後で、アクセスを制限するページ、リージョンまたはアイテムに認可スキームを関連付けることができます。各認可スキームは必要なときにのみ実行されます。ページ・ビューごとに1回検証するか、セッションごとに1回検証するかを定義します。
この項の内容は次のとおりです。
1つ目の要件は、CEOおよびマネージャのみが、プロジェクトおよびユーザーを定義および管理できることです。この要件に対処するには、次のステップを実行します。
認可スキームを作成して、カレント・ユーザーのロールを確認します。
認可スキームを「作成」ページおよび「編集」ページにナビゲートするプロジェクトとユーザーのレポートのアイテムと関連付けます。
認可スキームを「作成」ページおよび「編集」ページそのものと関連付けて、ユーザーがターゲット・ページへのURLを手動で編集し、セキュリティを回避しないようにします。
カレント・ユーザーを参照するには、セッション変数:APP_USER
を使用します。このセッション変数は、ユーザーの電子メール・アドレス(作業領域または作業領域名と同じ)と比較されます。このタイプのセキュリティをコーディングする場合は、常に、すべてのセキュリティを通過できるユーザーでコーディングする必要があります。このユーザーは、開発およびテストで非常に役に立ちます。この方法を実行できない場合は、自分をCEOまたはマネージャとして定義しないかぎり、制限付きページにアクセスすることはできません。
認可スキームの作成
認可スキームを作成するには、次のステップを実行します。
「作業領域」ホームページで、「アプリケーション・ビルダー」をクリックします。
Issue Trackerアプリケーションを選択します。
「共有コンポーネント」をクリックします。
「セキュリティ」で、「認可スキーム」をクリックします。
「作成」をクリックします。
「認可スキームを作成」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「認可スキーム」の「名前」に、次のように入力します。
USER_CEO_OR_MANAGER
「認可スキーム」で、次のステップを実行します。
「スキーム・タイプ」で、「EXISTS SQL問合せ」を選択します。
「式1」に、次のように入力します。
SELECT '1' FROM ht_people WHERE (upper(person_email) = UPPER(:APP_USER) AND person_role IN ('CEO','Manager')) OR (UPPER(:APP_USER) = 'HOWTO')
「スキームの違反時に表示されるエラー・メッセージを指定」に、次のように入力します。
You are not authorized to access this function.
「評価ポイント」までスクロールします。「認可スキームを検証」で、「セッションごとに1回」を選択します。
通常、割り当てられたロールは指定されたセッション内では変更されないため、このインスタンスでは、この選択で十分です。
「作成」をクリックします。
次に、認可スキームを適切なオブジェクトと関連付ける必要があります。
「Projects」レポートのオブジェクトの関連付け
認可スキームを「Projects」レポートと関連付けるには、次のステップを実行します。
右上にある「ページの編集」アイコンをクリックします。「ページの編集」アイコンは、小さな緑色の紙と鉛筆に似ています。
「ページ」に、2
と入力して「実行」をクリックします。
ページ2(「Projects」)のページ定義が表示されます。
「リージョン」で、「Projects」の横にある「レポート」をクリックします。
PROJECT_ID
の左にある「編集」アイコンをクリックします。
「認可」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
「取消」をクリックします。
認可スキームを「Projects」レポートの「作成」ボタンと関連付けるには、次のステップを実行します。
ページ2のページ定義の「ボタン」で、「作成」リンク(アイコンでない)をクリックします。
「ページ・ボタンの編集」ページが表示されます。
「認可」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
オブジェクトと「Create/Edit Project」レポートとの関連付け
認可スキームを「Create/Edit Project」ページと関連付けるには、次のステップを実行します。
「次のページ」(>)ボタンをクリックして、ページ3に移動します。
ページ3(「Create/Edit Project」)のページ定義が表示されます。
「ページ」で、「ページ属性の編集」アイコンをクリックします。
「ページ属性」ページが表示されます。
「セキュリティ」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
オブジェクトと「People」レポートとの関連付け
認可スキームを「People」レポートと関連付けるには、次のステップを実行します。
「次のページ」(>)ボタンをクリックして、ページ4に移動します。
ページ4(「People」)のページ定義が表示されます。
「リージョン」で、「People」の横にある「レポート」をクリックします。
PERSON_IDの左にある「編集」アイコンをクリックします。
「認可」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
「取消」をクリックします。
認可スキームを「People」レポートの「作成」ボタンと関連付けるには、次のステップを実行します。
「次のページ」(>)ボタンをクリックして、ページ5に移動します。
ページ5のページ定義が表示されます。
「ボタン」で、「作成」リンク(アイコンでない)をクリックします。
「ページ・ボタンの編集」ページが表示されます。
「認可」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
認可スキームを「Create/Edit Person Information」ページと関連付けるには、次のステップを実行します。
「ページ」で、「ページ属性の編集」アイコンをクリックします。
「ページ属性」ページが表示されます。
「セキュリティ」で、認可スキームの「USER_CEO_OR_MANAGER」を選択します。
「変更の適用」をクリックします。
HOWTOというユーザー名を持つユーザーを作成すると、これをテストできます。HOWTOユーザーは、編集リンクを表示可能である必要があります。その後で、HOWTO2という別のユーザーを作成します。このユーザーは、リンクを表示不可能である必要があります。
2つ目の要件は、問題が割り当てられた後で、割り当てられたユーザー(またはプロジェクト・リーダー)のみが問題に関するデータを変更できることです。この要件は、すべての問題に対して変更を行うため、多少複雑です。
現在、ユーザーが問題を変更できるページは、「Create/Edit Issue」ページと「Assign Issues」ページの2つです。「Assign Issues」ページで表示される問題は、未割当ての問題のみです。問題が未割当てのため、セキュリティは必要ありません。
ユーザーが問題を編集するためにナビゲートできる場所は多数あります。
ホームページの3つのリージョンで問題を表示するか、または編集リンクを含めます。
「Issues」レポートには、各問題を編集するためのリンクがあります。
「Target Resolution Dates」レポートを使用すると、ユーザーが問題を選択して編集できます。
他のユーザーはデータを変更することはできませんが、進捗および解決を表示できるように、問題に関するすべての詳細データをユーザーが表示できるようにする場合があります。この要件の場合、最適な方法は、ページ・ビューごとに1回評価される認可スキームを作成することです。
認可スキームを、「Create/Edit Issue」ページの「変更の適用」および「削除」ボタンの両方と関連付けます。この方法では、認可されていないユーザーは、すべての詳細を表示できますが、変更を行っても、その変更を保存することはできません。
追加したセキュリティでは、HT_ISSUES
で挿入、更新および削除を行うプロセスと認可スキームを関連付けることもできます。これによって、アプリケーションでは、他のユーザーによる変更の適用プロセスをコールするためのURLの変更を防ぐことができます。変更できない理由をユーザーに知らせるには、認可に失敗した際に説明が表示されるHTMLリージョンを追加できます。このスキームのSQLはP7_ISSUE_IDを参照する必要があるため、「Create/Edit Issue」ページに固有である必要があります。また、評価される時点で、必要なデータはセッション・ステートで使用できないため、データベースからデータを取得する必要があります。使用可能なアイテムは、リンクによって渡されるP7_ISSUE_IDのみです。
認可スキームの作成
認可スキームを作成するには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
「共有コンポーネント」をクリックします。
「セキュリティ」で、「認可スキーム」をクリックします。
「作成」をクリックします。
「作成メソッド」で、デフォルトの「最初から」を受け入れて「次へ」をクリックします。
「認可スキーム」の「名前」に、次のように入力します。
P7_ASSIGNED_OR_PROJECT_LEAD
「認可スキーム」で、次のステップを実行します。
「スキーム・タイプ」で、「ブールを戻すPL/SQLファンクション」を選択します。
「式1」に、次のように入力します。
DECLARE l_related_project integer; l_assigned_to integer; l_person_id integer; l_person_role varchar2(7); l_assigned_project integer; BEGIN -- User is HOWTO or new Issue IF :APP_USER = 'HOWTO' or :P7_ISSUE_ID IS NULL THEN RETURN TRUE; END IF; FOR c1 IN (SELECT related_project, assigned_to FROM ht_issues WHERE issue_id = :P7_ISSUE_ID) LOOP l_related_project := c1.related_project; l_assigned_to := c1.assigned_to; END LOOP; -- Issue not yet assigned IF l_assigned_to IS NULL THEN RETURN TRUE; END IF; FOR c2 IN (SELECT person_id, person_role, assigned_project FROM ht_people WHERE upper(person_email) = upper(:APP_USER)) LOOP l_person_id := c2.person_id; l_person_role := c2.person_role; l_assigned_project := c2.assigned_project; END LOOP; -- User is lead of related project IF l_person_role = 'Lead' and l_assigned_project = l_related_project THEN RETURN TRUE; -- User is assigned to issue ELSIF l_assigned_to = l_person_id THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END;
「スキームの違反時に表示されるエラー・メッセージを指定」に、次のように入力します。
This issue is not assigned to you, nor are you the Project Lead. Therefore you are not authorized to modify the data.
「評価ポイント」の「認可スキームを検証」で、「ページ・ビューごとに1回」を選択します。
それぞれ問題で結果が異なる場合があるため、この選択は必要です。
「作成」をクリックします。
次に、認可スキームを「Create/Edit Issue」ページの適切なオブジェクトと関連付ける必要があります。
オブジェクトと「Create/Edit Issue」レポートとの関連付け
認可スキームをボタンおよびプロセスと関連付けるには、次のステップを実行します。
「アプリケーション」ホームページに移動します。
ページ「7 - Create/Edit Issue」を選択します。
「ボタン」で、「削除」をクリックします。
「認可」で、認可スキームの「P7_ASSIGNED_OR_PROJECT_LEAD」を選択します。
「変更の適用」をクリックします。
「ボタン」で、「変更の適用」をクリックします。
「認可」で、認可スキームの「P7_ASSIGNED_OR_PROJECT_LEAD」を選択します。
「変更の適用」をクリックします。
「ボタン」で、「作成」をクリックします。
「認可」で、認可スキームの「P7_ASSIGNED_OR_PROJECT_LEAD」を選択します。
「変更の適用」をクリックします。
「ボタン」で、「作成後、別のものの作成」をクリックします。
「認可」で、認可スキームの「P7_ASSIGNED_OR_PROJECT_LEAD」を選択します。
「変更の適用」をクリックします。
「ページ・プロセス」の「プロセス」で、「HT_ISSUESの行を処理」を選択します。
「認可」で、認可スキームの「P7_ASSIGNED_OR_PROJECT_LEAD」を選択します。
「変更の適用」をクリックします。
HTMLリージョンの作成
最後に、認可に失敗した際に説明を表示する新しいリージョンを作成します。
新しいリージョンを作成するには、次のステップを実行します。
「リージョン」で、「作成」アイコンをクリックします。
「リージョン」で、デフォルトの「HTML」を受け入れて「次へ」をクリックします。
リージョン・コンテナとして「HTML」を選択し、「次へ」をクリックします。
「表示属性」で、次のステップを実行します。
「タイトル」に、Not Authorized
と入力します。
「表示ポイント」で、「ページ・テンプレート・ボディ (2. リージョン・コンテンツより下のアイテム)」を選択します。
「次へ」をクリックします。
「ソース」で、「HTMLテキスト・リージョン・ソースを入力」に次のように入力して「次へ」をクリックします。
You are not authorized to modify the data for this issue because<br>you are not the Project Lead nor is the issue assigned to you.
「認可スキーム」で、「P7_ASSIGNED_OR_PROJECT_LEADでない」を選択します。これを選択すると、認可スキームが失敗したときにのみ、リージョンが表示されるようになります。
「リージョンの作成」をクリックします。
図14-18に、認可が失敗したユーザーによって実行される「Create/Edit Issue」ページを示します。新しいリージョンはページの上部に表示され、表示されるボタンは「取消」のみです。
このセキュリティ要件に対しては、問題の詳細を表示する別のページを作成することがより効果的です。issue_idとカレント・ユーザーを取得し、表示専用または編集用のフラグを渡すプロシージャが必要となります。このプロシージャへのコールに基づいて「ビュー」ページまたは「編集」ページのいずれかをコールする、すべてのレポートのリンクを動的に構築できます。リンクを使用しないで編集ページにアクセスするユーザーを回避するために、挿入、更新および削除処理が行われる前に権限を確認することがあります。
アプリケーションが完成したら、次のステップで、このアプリケーションをデプロイします。通常、開発者はあるサーバーでアプリケーションを作成し、別のサーバーにデプロイします。この方法は必須ではありませんが、本番のインスタンスに影響を与えずに不具合を解決できます。
注意: 別のサーバーにアプリケーションをデプロイするには、別のOracle Application Expressインスタンスをインストールおよび構成する必要があります。 |
この項の内容は次のとおりです。
アプリケーション定義は、Oracleデータベースに格納されます。アプリケーション定義には、テンプレートなど、アプリケーションを構成するすべての要素が含まれていますが、データベース・オブジェクト定義や基礎となるデータは含まれていません。アプリケーションを別のOracle Application Expressインスタンスに移動するには、アプリケーション定義を開発サーバーからエクスポートして、本番サーバーにインポートする必要があります。
この項の内容は次のとおりです。
開発サーバーからアプリケーション定義をエクスポートするには、次のステップを実行します。
「作業領域」ホームページで、「アプリケーション・ビルダー」アイコン上の矢印をクリックして、作成したアプリケーションを選択します。
「エクスポート/インポート」アイコンをクリックします。
「エクスポート/インポート」で、「エクスポート」をクリックして「次へ」をクリックします。
「アプリケーション」で、この演習で作成したアプリケーションが選択されていることを確認します。
「アプリケーションのエクスポート」をクリックします。
選択を求められたら、ファイルを保存するように選択します。
ローカルのハード・ドライブの場所を指定して「保存」をクリックします。
本番インスタンスでは、アプリケーションのサポートに必要なオブジェクトを作成する必要があります。本番インスタンスにログインして、「データベース・オブジェクトの作成」に示すステップを実行します。
注意: アプリケーション定義をインポートするために、サポートするオブジェクトは必要はありませんが、これらがないと、コードはテストできません。 |
「作業領域」ホームページの本番インスタンスにログインして、次のステップを実行します。
「作業領域」ホームページで、「アプリケーション・ビルダー」アイコン上の矢印をクリックして、作成したアプリケーションを選択します。
「アプリケーション」ホームページで、「エクスポート/インポート」をクリックします。
「エクスポート/インポート」ページで、「インポート」をクリックして「次へ」をクリックします。
「ファイルのインポート」で、次のステップを実行します。
「インポート・ファイル」で、「参照」ボタンをクリックして、エクスポートしたファイルを検索します。
「ファイル・タイプ」で、「アプリケーション、ページまたはコンポーネントのエクスポート」を選択します。
「ファイルのキャラクタ・セット」で、デフォルトを受け入れて「次へ」をクリックします。
成功メッセージが表示されたら、次のステップで、ファイルをインストールします。
「インストール」をクリックします。
「アプリケーションのインストール」で、次のステップを実行します。
「解析スキーマ」で、アプリケーション・オブジェクトが含まれる本番サーバー上のスキーマを選択します。
「ビルド・ステータス」で、「アプリケーションの実行および構築」を選択します。
このオプションを使用すると、他のユーザーがアプリケーションを実行したり、必要に応じてログインし、コードを変更したりできるようになります。また、「アプリケーションの実行のみ」を選択することもできます。このオプションを選択した場合は、アプリケーションのソース・コードにアクセスできなくなることに注意してください。
「次のアプリケーションとしてインストール」で、次の項目を選択できます。
エクスポート・ファイルからアプリケーションIDを再利用: アプリケーションIDが本番インスタンスで使用されていない場合にのみ選択します。
新しいアプリケーションIDを自動割当て: 新しいアプリケーションIDを割り当てる場合に選択します。
アプリケーションIDを変更: 既存のアプリケーションIDを変更する場合に選択します。このオプションを選択すると、新しいアプリケーションIDを入力するように求められます。
既存のアプリケーションと同じIDを持つアプリケーションを現行の作業領域にインストールすると、既存のアプリケーションが削除されてから、新しいアプリケーションがインストールされます。既存のアプリケーションと同じIDを持つアプリケーションを異なる作業領域にインストールしようとすると、エラー・メッセージが表示されます。
すべての文が成功すると、インストールはコミットされ、永続的になります。エラーが発生した場合、インストールはロールバックされ、永続的な変更は行われません。
「アプリケーションのインストール」をクリックします。
インストールが成功すると、「アプリケーション・インストール後のユーティリティ・オプション」ページが表示されます。ここでは、次のいずれかを選択できます。
アプリケーションの実行: アプリケーションを実行する場合に選択します。
アプリケーション属性: アプリケーション・ビルダー内のアプリケーション定義を表示する場合に選択します。
アプリケーションをデプロイする次のステップでは、データをロードします。少なくとも、project
表およびpeople
表は移入する必要があります。
このタスクの実行に使用できるメカニズムは、次のように様々なものがあります。
アプリケーション自体を使用して、データを作成します。
データ・ローダーを使用して、スプレッドシートからコピーされたデータをロードします。
SQLスクリプトを使用して、データを作成するスクリプトを実行します。
データがOracleデータベースにすでにある場合は、エクスポート/インポートを使用してマシン間でデータを移動するか、またはSQLを使用して既存データを取得および変換し、アプリケーション表にロードします。
参照: 「デモンストレーション・データのロード」および『Oracle Database Application Expressユーザーズ・ガイド』の「データのインポート、エクスポート、ロードおよびアンロード」 |
アプリケーションのログイン・ページで、ユーザー名とパスワードを指定してログインAPIをコールすると、Application Expressエンジンによって、アプリケーションの現行の認証スキームに指定されている資格証明の検証方式がコールされます。ログインAPIから資格証明を検証するには、3つの方法があります。
ブールを戻すPL/SQLファンクションとしてユーザー独自の方式を実装し、アプリケーションのスキーマに配置します。
組込み式のLDAP認証方式を使用します。これは、ユーザーが指定したLDAPディレクトリに対してユーザー名とパスワードを確認します。
組込み式のOracle Application Express認証方式を使用します。これは、Oracle Application Express作業領域リポジトリに対してユーザー名とパスワードを確認します。
現在、アプリケーションは組込み式のOracle Application Express認証方式を使用しています。
参照: 『Oracle Database Application Expressユーザーズ・ガイド』の「認証を介したユーザーの本人確認」 |
参照: OTNのセキュリティHow Toドキュメント
|
アプリケーションにアクセスできるようにするために、ユーザーを作成する必要があります。Oracle Application Express認証を使用している場合、ユーザーを作成する最も簡単な方法は、「ユーザーの管理」ページにアクセスすることです。
新しいユーザーを作成するには、次のステップを実行します。
「作業領域」ホームページに移動します。
ページの右側の「管理」リストから、「Application Expressユーザーの管理」をクリックします。
ページ右側にある「タスク」リストから、「エンド・ユーザーの作成」をクリックします。
「ユーザーの指定」に、必要な情報を入力します。
「ユーザーの作成」または「作成後、別のものの作成」をクリックします。
アプリケーションのデプロイ、データのロードおよびユーザーの作成が完了したら、本番URLを公開できます。
アプリケーションへのURLは、「アプリケーション」ホームページの「実行」アイコンの上にマウスを合わせると確認できます。ページ下部のステータス・バーにURLが表示されます。
「実行」アイコンの値は、「セキュリティ属性の編集」ページの「ホーム・リンク」属性から取得されます。このリンクを参照するのは、このアイコンと、Oracle Application ExpressログインAPIを使用しないアプリケーションのみです。次に例を示します。
http://apex.oracle.com/pls/otn/f?p=11563:1:3397731373043366363
各要素の意味は次のとおりです。
apex.oracle.com
は、サーバーのURLです。
pls
は、mod_plsql
カートリッジを使用するためのインジケータです。
otn
は、データ・アクセス記述子(DAD)名です。
f?p=
は、Oracle Application Expressによって使用される接頭辞です。
11563
は、コールされるアプリケーションです。
1
は、表示されるアプリケーション内のページです。
3397731373043366363
は、セッション番号です。
この例のアプリケーションを実行するには、次のURLを使用します。
http://apex.oracle.com/pls/otn/f?p=11563:1
ユーザーは、ログインした後、一意のセッション番号を受信します。
問題追跡アプリケーションは、「アプリケーションの作成」ウィザードを使用して作成しました。このウィザードは、認証を制御する「ログイン」ページ(ページ101)にプロセスを作成します。プロセスの内容は、次のとおりです。
WWV_FLOW_CUSTOM_AUTH_STD.LOGIN( P_UNAME => :P101_USERNAME, P_PASSWORD => :P101_PASSWORD, P_SESSION_ID => :FLOW_SESSION, P_FLOW_PAGE => :APP_ID||':1' );
ページは、このプロセスにハード・コードされることに注意してください。このため、URLに渡されるページは上書きされ、含める必要はありません。次のURLを使用して、アプリケーションにアクセスできます。
http://apex.oracle.com/pls/otn/f?p=11563:1
使用した例からもわかるように、URLに意味はなく、長くすることができます。ホスト名は、わかりやすいように変更できます。また、短縮した形式で公開したり、ユーザーにとってわかりやすいURLを公開するために、Apacheを構成してURLを書き直すこともできます。詳細は、Apacheのドキュメントを参照してください。