説明

データ処理システム、コンピュータで実行する方法及びコンピュータ読取可能な媒体

【課題】ウェブサーバが異常状態に遭遇した際、クライアント側ウェブブラウザで動作している動的なウェブページの処理をウェブサーバが終了できるようにする。
【解決手段】クライアントサーバー形式のプロジェクトスケジュール管理システムは、ウェブブラウザを介してアクセス可能なタスクエディタを有し、プロジェクトメンバによる様々なスケジューリングタスクを実行する。ウェブブラウザは或るコードを実行し、そのコードは、PHPでコード化された例外処理ハンドラを利用して、異常状態をテストする。異常状態に遭遇した場合、例外処理ハンドラは1つ以上のグローバルファンクションを呼び出し、クライアント側のブラウザ実行コードの実行を適切に終了するためのジャバスクリプトを生成し、クライアントに送る。同時に例外処理ハンドラは、異常状態に遭遇したウェブサーバで実行コードの実行を終了する。

【発明の詳細な説明】
【技術分野】
【0001】
本願はプロジェクト管理に関連する。特に、本願は、異常状態に遭遇した場合に、ウェブサーバにより生成されたクライアント側のウェブブラウザスクリプトを終了する技法に関連する。
【背景技術】
【0002】
PHPのようなウェブプログラミング言語は、オブジェクト指向型のスクリプト言語をもたらし、しばしばサーバ側のウェブアプリケーションの開発に使用される。スクリプト言語は、ネットワーク上で対話式に実行可能なウェブアプリケーションをプログラマが作成できるようにする。スクリプト言語を使って開発されたウェブアプリケーションは、ダイナミックなHTMLページを許容し、そのHTMLページは、ユーザ入力を処理し、特別なオブジェクト及びファイルを使う永続的なデータを維持し、リレーショナルデータベースとやりとりを行うことができる。PHP(サーバ側)及びジャバスクリプト(クライアント側)又は等価的なオープンソースのスクリプト言語は、概してHTMLの改善と考えられ、一般的には静的な文字や画像を表示することに限られている。スクリプト言語を利用する利点は、動的なウェブページの設計及び実現が簡単になることである。
【0003】
インタープリタ型のスクリプト言語を用いて開発された大規模な対話式ウェブアプリケーションを使用する際の欠点の1つは、1つ以上のウェブイネーブルクライアント(web enable client)と情報をやりとりするようプログラムされていた場合、サーバ側スクリプトをデバッグするのが困難なことである。例えば、ウェブサーバで不適切に動作している又は不具合のあるアプリケーションは、ウェブブラウザイネーブルクライアントで検出されないかもしれない。ある一般的な状況では、クライアント側のウェブサーバで実行するクライアントスクリプトは、ウェブサーバ機能の状態が悪化している又は被害を被っていることをユーザに一切通知せずに、単にウェブページを表示し続けるかもしれない。
【0004】
別の更に深刻な状況の場合、スクリプトを用いたアプリケーションがアクティブのままであり、エラーのあるオブジェクト及びデータを生成し続けてしまう(オブジェクト及びデータは、ウェブサーバによる抽出及び消去を待機しながらローカルにキャッシュされている。)。誤りが蓄積したオブジェクト及びデータは、クライアントのローカルリソースが消尽するまで又はクライアントが停止するまで有効なオブジェクトやデータを上書きしてしまい、入力データの喪失を招き、おそらくは、クライアントに保存された他のオブジェクト及びデータも被害を受ける。
【0005】
ウェブサーバの機能状態を確認できないことは、異常状態に遭遇した際に終了するように(サーバ側スクリプト及びコンパイル言語で利用可能であるように)規定されたジャバスクリプトステートメント又はファンクションが欠如していることに起因する。例えば、PHPはdie()及びexit()ステートメントを含み、C++のようなコンパイル言語は適切に(gracefully)終了するためにabend()及び他のステートメントを有する。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の課題は、ウェブサーバが異常状態に遭遇した際、クライアント側ウェブブラウザで動作している動的なウェブページの処理をウェブサーバが終了できるようにすることである。
【課題を解決するための手段】
【0007】
本発明の一実施例による手段は、ウェブサーバが異常状態に遭遇した際、クライアント側ウェブブラウザで動作している動的なウェブページの処理をウェブサーバが終了できるようにする。一実施例による技法は、ウェブサーバにおける異常状態の場所を取得すること及びクライアント側スクリプトの実行を適切に終了することの双方が可能である。
【0008】
一実施例の場合、ウェブサーバにおけるコード実行により、ウェブイネーブルクライアントは、ブラウザの実行可能なコードをインタープリタ型の(解釈可能な)スクリプト形式で受信する。ウェブサーバにおけるコードの実行は、例外処理ハンドラの中で実行され、例外処理ハンドラは異常状態に遭遇したか否かを判定する。異常状態に遭遇した場合、例外処理ハンドラは1つ以上のグローバルファンクションを呼び出し、ウェブサーバでのコードの実行を終了するためのスクリプトを生成して送付する。
【0009】
一実施例の場合、生成されたクライアントブラウザの実行可能なコードは、ジャバスクリプトでプログラムされている。
【0010】
一実施例の場合、例外処理ハンドラは、PHPでプログラムされたグローバルファンクションである。
【0011】
一実施例の場合、グローバルファンクションは異常状態を検出し、ウェブサーバに結合されたディスプレイに出力する。
【0012】
一実施例の場合、表示される異常状態は、ファイル名、コードライン番号、クラス及びファンクション等のグローバルファンクションを呼び出したものを示す。
【図面の簡単な説明】
【0013】
【図1A】タスク割り当てエディタの画面例を示す図。
【図1B】タスク割り当てウェブページのサンプルを示す画面例を示す図。
【図2A】プロジェクト計画エディタの画面例を示す図。
【図2B】プロジェクト計画ウェブページのサンプルを示す画面例を示す図。
【図3A】メンバスケジュールエディタの画面例を示す図。
【図3B】メンバのスケジュールウェブページのサンプルを示す画面例を示す図。
【図4】プロジェクトメンバが何れかのエディタ(タスク割り当て、プロジェクト計画、メンバのスケジュール)にログオンするためのログインウェブページの画面例を示す図。
【図5】本発明の実施例が使用されてよい動作環境を示す図。
【図6】(自動スケジューリングシステムのソフトウエア構成要素を含む)本発明の実施例が使用されてよい通信アーキテクチャを示す図。
【図7】システムのクライアントプロセッサ及びサーバプロセッサ間のインターフェースを示す図。
【図8】プロジェクトメンバ又は管理者がログインウェブページを使って何れかのエディタにログオンする際のシーケンス図。
【図9】プロジェクト管理者がタスク割り当てエディタと共に行うセッション例のシーケンス図。
【図10】プロジェクト管理者がプロジェクト計画エディタと共に行うセッション例のシーケンス図。
【図11】プロジェクトメンバがプロジェクトメンバのスケジュールエディタ(即ち、メンバのスケジュールエディタ)と共に行うセッション例のシーケンス図。
【図12】プロジェクト及びプロジェクトメンバのタスク割り当て及びタスクスケジュール情報を保存及び管理するのに使用されるデータベーステーブルを示す概略図。
【図13】図6のサーバプロセッサのプログラミングパッケージ図。
【図14】エディタプロセッサパッケージのプログラミングパッケージ図。
【図15】MemberSchedulePHPProcessorパッケージのクラス図。
【図16】MemberScheduleJavaScriptProcessorパッケージのクラス図。
【図17】PostMemberSchedulePHPProcessorパッケージのクラス図。
【図18】MemberScheduleWebPageGeneratorパッケージのクラス図。
【図19】ProjectSchedulePHPProcessorパッケージのクラス図。
【図20】ProjectScheduleJavaScriptProcessorパッケージのクラス図。
【図21】PostProjectSchedulePHPProcessorパッケージのクラス図。
【図22】ProjectScheduleWebPageGeneratorパッケージのクラス図。
【図23】TaskAssignmentPHPProcessorパッケージのクラス図。
【図24】TaskAssignmentJavaScriptProcessorパッケージのクラス図。
【図25】PostTaskAssignmentPHPProcessorパッケージのクラス図。
【図26】TaskAssignmentWebPageGeneratorパッケージのクラス図。
【図27】データベースの問合を行うのに使用される一定の文字列例を示す図。
【図28】図27の一定の文字列からデータベースクエリを生成するのに使用されるスクリプト例を示す図。
【図29】一定の文字列からクエリ文字列を生成するプロセスを示すフローチャート。
【図30】(例えば、メンバスケジュールエディタ、プロジェクト計画エディタ及びタスク割当エディタ等の)エディタ用のウェブページの構成要素を示す図。
【図31】エディタ用のウェブページの構成要素を示す図。
【図32】クライアントサーバー形式のプロジェクト計画管理システムと共にプロジェクト計画を管理する方法例を示すフローチャート。
【図33】ネットワーク形式のプロジェクト計画管理システムでデータベースクエリを自動的に生成する方法例を示すフローチャート。
【図34】プロジェクト計画管理システムでタスクを管理する方法例を示すフローチャート。
【図35】本発明の実施例を使用することができるコンピュータシステムを示すブロック図。
【図36】図36A及び図36Bの相互関係を示す図。
【図36A】エディタに対応するシステムの3つの主要なパッケージに着目したテーブル7のインデックス部分を示す図。
【図36B】エディタに対応するシステムの3つの主要なパッケージに着目したテーブル7のインデックス部分を示す図。
【図37】異常状態に備えてウェブイネーブルクライアントから受信した情報及びサーバ側コードをサーバが評価する様子を示す図。
【図38】異常状態を確認した場合にクライアント側のスクリプトを生成するウェブサーバプロセスを示す図。
【発明を実施するための形態】
【0014】
一実施例の技法は、クライアントブラウザウインドウで実行するインタープリタ型のスクリプトコードの適切な終了(graceful termination)をもたらす。実施例は、クライアント−サーバ形式のプロジェクト計画タスク管理システムに関連する。しかしながら本願で説明される技法は、他のソフトウエア開発プロジェクトの管理システムに広く利用可能である。以下の説明は、説明を目的として、多くの具体的詳細が本発明の十分な理解を促すために記述されている。
【実施例1】
【0015】
<タスク割当エディタ>
図1Aは、タスク割り当てエディタの画面例を示す。タスク割当エディタ102は、プロジェクトの中で達成されるべきプロジェクトタスクをユーザが生成することを支援する。組織によっては、全てのプロジェクトに共通するデフォルトプロジェクトタスクが存在し、その組織と共に実行される。プロジェクトタスクにはサブタスクが関連付けられ、サブタスクはプロジェクトメンバ(プロジェクト構成員)に割り当てられる。一般にプロジェクトマネジャ(プロジェクト管理者)は、タスクを決定し、プロジェクトメンバにタスクを割り当てる。プロジェクト管理者は、このタスク割当エディタ102を使ってプロジェクトについてプロジェクトタスクを決定し、プロジェクトタスク各々についてサブタスクを作成し、サブタスクをメンバに割り当てる。プロジェクト管理者がタスクを追加及び割り当てる一方、タスク割当に関する情報は、タスク割当エディタ102で保存及び維持される。管理者がタスク割当エディタ102とのセッションを完了すると、タスク割当情報がデータベースに伝送され、保存され、維持される。
【0016】
タスク割当セッションの完了に応答して、例えば図1Aのタスク割当エディタ102の「終了(Finish)」ボタンをユーザが選択したことに応答して、タスク割当ウェブページ104がウェブサーバで自動的に作成され、様々なプロジェクトメンバに割り当てられたタスクを表示する。図1Bは、タスク割り当てウェブページのサンプルを示す画面例である。タスク割当エディタ102を介して入力及び編集されたタスク及びタスク割当情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのタスク及びタスク割当は、1つ以上のデータベーステーブル内に格納され(好ましくは、各行が1つのタスクに対応する)、タスク割当エディタ102及びタスク割当ウェブページ104で表示される。
【0017】
一実施例の場合、タスク割当エディタ102(図1A)は、様々な機能を実行するのに利用可能なボタンを含み、例えば、「詳細を追加(Add Details)」、「上に行を追加(Add Rows Above)」、「下に行を追加(Add Rows Below)」、「削除(Delete)」及び「終了(Finish)」である。「終了」ボタンは編集セッションを終了し、保存及び維持されるタスク割当情報をデータベースに投稿する。他のボタンはタスクの各処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。「詳細を追加」ボタンは、プロジェクトタスクの直下に行を追加し、管理者がサブタスクを追加し及び管理者がサブタスクをプロジェクトメンバに割り当てられるようにする。「上に行を追加」及び「下に行を追加」ボタンは、選択されたタスク(プロジェクトタスク又はサブタスク)に対応する行の上又は下に行を追加し、管理者がより多くのプロジェクトタスクを追加できるようにする又はより多くのサブタスクを割り当てられるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたタスクを削除し、そのプロジェクトからプロジェクトタスクを除去する、或いはプロジェクトメンバに対するサブタスクの割当を解除する。
【0018】
<プロジェクト計画エディタ>
図2Aは、プロジェクト計画エディタの画面例を示す。プロジェクト計画エディタ202は、タスク割当エディタ102(図1A)で作成されたプロジェクトタスクについて予定を立てるのに使用される。プロジェクトタスクは、プロジェクト計画エディタ202で作成されスケジューリングされてもよい。しかしながら一実施例の場合、プロジェクト計画エディタ202を用いて、サブタスクをプロジェクトメンバに割り当てるために、サブタスクをプロジェクトタスクに追加することはできない。おそらくは、プロジェクト管理者は、タスク割当エディタ102の後でプロジェクト計画エディタ202を使用するであろう。タスク割当エディタ102で追加された主なプロジェクトタスクについて、管理者はプロジェクト計画エディタ202を用いて初期のプロジェクト計画を立てることができる。プロジェクト管理者がタスクを追加及びスケジューリングしながら、プロジェクトタスクの計画に関する情報は、プロジェクト計画エディタ202に保存及び維持される。管理者がプロジェクト計画エディタのセッションを終了すると、プロジェクトタスクの計画情報はデータベースに伝送され、保存され、維持される。
【0019】
プロジェクト計画のセッションの完了に応答して、例えば図2Aのプロジェクト計画エディタ202で「終了」ボタンユーザが選択したことに応答して、プロジェクトスケジュールウェブページ204がウェブサーバで自動的に作成され、プロジェクトの計画表を表示する。プロジェクトのサブタスクについて、プロジェクトメンバ各自の予定が立てられ及び/又は更新されると、プロジェクト計画エディタ202は、全てのサブタスクの予定と共に各プロジェクトタスクスケジュールを表示する。プロジェクト計画エディタ202は、サブタスクと、そのサブタスクに割り当てられたプロジェクトメンバとを表示する。編集セッションを終了することで、或いは図2Aのプロジェクト計画エディタ202で「統合(Consolidate)」ボタンを選択することで、プロジェクトタスク各々について全てのタスクスケジュールは、プロジェクトタスクの予定を更新するように自動的に統合又は集約され、及びプロジェクトタスクスケジュールはデータベース内で更新される。
【0020】
図2Bは、プロジェクト計画ウェブページのサンプルを示す画面例を示す。プロジェクト計画ウェブページ204が作成され、サブタスク又はタスクが割り当てられているメンバと共に、プロジェクトタスク及びそのサブタスクのスケジュールを表示する。プロジェクト計画ウェブページ204は、プロジェクトタスク及びサブタスク各々の過去のスケジュール全てを示し(例えば、以前の日付の取り消し線と共に示される)、プロジェクトチームが、タスクのスケジュールに生じた変更を分かるようにする。プロジェクト計画エディタ202により入力及び編集されたプロジェクト計画情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのプロジェクトタスクの予定及びサブタスクの予定は、1つ以上のデータベースに保存され(好ましくは、行の各々が1つのタスクに対応する)、プロジェクト計画エディタ202及びプロジェクト計画ウェブページ204で表示される。
【0021】
一実施例の場合、プロジェクト計画エディタ202(図2A)は、様々な機能を実行するのに利用可能なボタンを含み、例えば、「上に行を追加(Add Rows Above)」、「下に行を追加(Add Rows Below)」、「削除(Delete)」、「統合(Consolidate)」及び「終了(Finish)」である。「終了」及び「統合」ボタンはプロジェクト計画エディタのセッションを終了し、保存及び維持されるプロジェクトタスク計画情報をデータベースに投稿する。「統合」ボタンは、メンバのスケジュールがプロジェクトスケジュールと共に統合されることを引き起こし、データベース内でプロジェクト計画が更新されるようにする。「統合」ボタンは、更新されたタスクスケジュールと共に、プロジェクトスケジュールが、プロジェクト計画ウェブページで再表示されることを引き起こす。他のボタンはタスクの各処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。処理はプロジェクトタスクでのみ実行可能であり、メンバに割り当てられたサブタスクでは実行可能でない。「上に行を追加」及び「下に行を追加」ボタンは、選択されたプロジェクトに対応する行の上又は下に行を追加し、管理者がより多くのプロジェクトタスクを追加できるようにするようにし及びそのタスクについて予定をたてられるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたプロジェクトタスクを削除する。
【0022】
<メンバスケジュールエディタ>
図3Aは、メンバスケジュールエディタの画面例を示す。メンバスケジュールエディタ302(個別スケジュールエディタとも言及される)は、プロジェクトメンバ各人のスケジュールを作成するのに使用される。一実施例では、メンバのスケジュールが以前に作成されていなかった場合、メンバスケジュールエディタ302は未終了のタスクのみを表示する。メンバのタスクは、そのプロジェクトに関係ないタスク及び/又はプロジェクトサブタスクとすることができる。メンバは、メンバスケジュールエディタ302を介して、あるタスクについて予定を立て、予定を変更し、及び結果を更新できる。タスクの詳細な予定を立てるために、あるメンバのタスク各々は、更に下位のレベルのタスクに落とされてもよい。下位レベルのタスクを追加又は修正することは、上位レベルのタスクの予定に影響を及ぼすかもしれない。従って、「更新(Update)」ボタンが選択されると、上位レベルのタスクスケジュールは更新される。メンバがメンバスケジュールエディタ302のセッションを終了すると、タスクスケジュール情報がデータベースに伝送され、保存され、維持される。図3Aはドロップダウンリストに含まれるタスクを示す。
【0023】
メンバスケジュールのセッションの完了に応答して、例えば図3Aのメンバスケジュールエディタ302の「終了(Finish)」ボタンをユーザが選択したことに応答して、メンバ計画ウェブページ304(図3Bの画面例では「タスクスケジュール(Task Schedule)」と言及されている)がウェブサーバで自動的に作成され、メンバの計画表を表示する。図3Bは、メンバの計画のウェブページのサンプルを示す画面例である。メンバスケジュールエディタ302を介して入力及び編集された各自のスケジュール情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのタスクのスケジュールは、あるテーブル(表)の中で表示され、その表の各行は1つのタスクに対応する。メンバスケジュールウェブページ304は、プロジェクトタスク及びサブタスク各々の以前のスケジュールを示し(例えば、以前の日付の取り消し線と共に示される)、プロジェクトチームが、タスクのスケジュールに生じた変更を分かるようにする。
【0024】
メンバスケジュールエディタ302の場合、様々な機能を実行するのに利用可能なボタン(「詳細を追加(Add Details)」、「末尾に行を追加(Add Rows At Bottom)」、「上に行を追加(Add Rows Above)」、「下に行を追加(Add Rows Below)」、「削除(Delete)」、「更新(Update)」及び「終了(Finish)」)がテーブル(表)の近くに設けられている。「終了」ボタンはメンバスケジュールエディタのセッションを終了し、保存及び維持されるタスクスケジュール情報をデータベースに投稿する。「更新」ボタン及び「末尾に行を追加」ボタンを除いて、他のボタンはタスクの処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。「詳細を追加」ボタンは、タスク直下に行を追加し、管理者がサブタスク(1段階下位のタスク)をタスクに追加し、より詳細なタスクを与えることができるようにする。「上に行を追加」及び「下に行を追加」ボタンは、選択されたタスクに対応する行の上又は下に行を追加し、メンバが、より多くのタスクを同じレベルのスケジュールに追加できるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたタスクを削除する。また、「削除」ボタンは、タスク及びそのタスクより下位のレベルの全てのタスクを、メンバのスケジュールから除去する。「末尾に行を追加」ボタンは、1つ以上の最高レベルの行をスケジュールの末尾に追加し、追加される行数は、「行数」メニューを選択することで設定される。「更新」ボタンは、下位レベルのタスクスケジュールと共に全ての上位レベルタスクスケジュールを更新し、新たな日付を見せるように、メンバスケジュールエディタ302の表示を更新する。
【0025】
タスクに関するスケジュール情報は、開始予定日及び終了予定日、並びに実際の開始日及び実際の終了日を含む。タスクに関する予定の及び実際の日付は、メンバスケジュールエディタ302で設定及び修正可能である。しかしながら、予定日だけは、タスクが始めて計画された場合に、プロジェクト計画エディタ202(図2A)でそのプロジェクトタスクについて決定される。プロジェクトタスクの予定日及び実際の日付についてのメンバスケジュール(統合された場合)に基づいて、予定日は自動的に更新され、実際の日付は自動的に設定される。図示されてはいないが、プロジェクト計画エディタ202は、予定日が変更できるように修正可能である。しかしながら、プロジェクトタスクの予定日になされる変更が何であれ、それは、プロジェクトサブタスクのメンバのスケジュールの予定日を統合することで上書きされる。プロジェクト管理者が、プロジェクトエディタのセッションを終了した場合、又はプロジェクト計画エディタ202の「統合」ボタンを適用した場合、データベースの情報は、プロジェクトタスクの実際の日付を更新するのに使用される。
【0026】
図4は、プロジェクトメンバが何れかのエディタ(タスク割り当て、プロジェクト計画、メンバのスケジュール)にログオンするためのログインウェブページの画面例を示す。メンバは、プロジェクト番号、メンバ名を入力し、適切なエディタを選択肢、エディタにアクセスするための情報を提示する。プロジェクト管理システムは、入力を確認し、そのメンバがプロジェクトの正当なメンバであるか否か及び選択されたエディタについてのアクセス権を有するか否かを確認する。確認できなかった場合、そのメンバがエディタにアクセスすることは禁止される。より強いセキュリティを求める場合、ログインウェブページ及びエディタはセキュアHTTP(例えば、HTTPS)で用意されてもよく、そのログインページは、ログインする前にパスワードを要求してもよい。
【0027】
<プロジェクト計画管理システム>
図5は、本発明の実施例が使用されてよい動作環境を示す。図示の動作環境は、本願で説明されるプロジェクト計画管理システムの全体的なシステム構成を示す。この動作環境例は、複数のワークステーション、1つ以上のウェブサーバ及び1つ以上の関連するデータベースを有し、それらは全て直接的に又は間接的にソフトウエア開発ネットワークと通信するように接続されている。
【0028】
概して、ウェブサーバ507,530はエディタを表示及び管理するためのリソースを有する。ウェブサーバ507,530はデータベース506,536とそれぞれやりとりを行い、タスク割当及びタスクスケジュール情報(例えば、データ508,538)を保存、維持及び管理する。説明の便宜上、2つのウェブサーバ及び2つのデータベースが描かれている点に留意を要する。即ち、本願で説明されるプロジェクト計画管理システムで使用されるウェブサーバ数及びデータベース数は、実現手段毎に異なってよい。コンピュータワークステーション501,502のウェブブラウザは、ウェブサーバ507,530のリソースにアクセスし、エディタを表示する。プロジェクトメンバ又はプロジェクト管理者は、ネットワーク500(LAN又はWAN)を介してエディタにアクセスできる。プロジェクト管理システムは、組織内の様々なレベルで(例えば、プロジェクト、課、部及び組織等の区分け毎に)プロジェクトを管理するように利用できる。
【0029】
ワークステーション501,502は、典型的には、図35のコンピュータシステムにより示されるように1つ以上のブラウザと共に構築されたコンピュータシステムであり、例えば、製品開発プロジェクトに関連するタスクを完了するために技術者/開発者により使用される。そのようなタスクに関する非限定的な具体例は、プロジェクトを開始すること、タスク計画を立てること、タスク計画を管理すること、ソフトウエアアーキテクチャを設計すること、仕様を決めること、ソフトウエアコードを作成すること、ソフトウエアコードを実現及び検査すること、様々なタスク成果を検査すること等を含む。更に、プロジェクト管理者は、ワークステーション501,502を使って情報にアクセスし、プロジェクトの進捗を再検討及び管理する。開発者及び管理者は、ネットワーク500を介して、接続された他の要素(例えば、ウェブサーバ507,530;データベース506,536;携帯用装置520及びラップトップ522)へ、アクセスポイント524を通じて情報を送る。ワークステーション501,502、携帯装置520及びラップトップ522は、ウェブサーバ507,530からウェブページにアクセスでき、ウェブページが含むジャバスクリプトを処理し、ブラウザでエディタを管理できる。ブラウザはジャバスクリプトを処理できる。
【0030】
ウェブサーバ507,530は一般的なコンピュータハードウエア及びソフトウエアの組み合わせであるウェブサーバを表し、(例えば、ハイパーテキストトランスファープロトコル[HTTP]及び伝送制御プロトコル/インターネットプロトコル[TCP/IP]のような)適切なプロトコルを使用して、(ハイパーテキストマークアップ言語[HTML]又は拡張マークアップ言語[XML]ファイル等の)ウェブページを作成するファイルをユーザ(例えば、ワークステーション501,502における開発者又は管理者)に提供する。一般に、開発プロジェクトのライフサイクルで通信及び管理される情報の過半数は、ウェブサーバ507,530によりネットワーク500を介して提供される。更に、図示の実施形態はウェブサーバ507,530で実現及び実行されるかもしれないが、本発明の実施形態はそのような実施形態に限定されない。本技法は、ワークステーション501,502のような他の如何なる処理システムで実現されてもよいし、或いは図35に示されるような同様なコンピュータシステムで実現されてもよい。
【0031】
データベース506,536は、開発プロジェクトに関するデータ508,538を保存する一般的なデータベースを示し、ネットワーク500を介して伝送される問合(クエリ)を利用して、ワークステーション501,502における権限のある者は情報にアクセスする。データベース506,536に保存されるデータ種別は事実上無制限であり、例えば、プロジェクト開始フォーム、メンバ及びプロジェクトタスク計画、仕様、ソフトウエアコード、検査報告、ウェブページファイル、ドキュメントディレクトリ及びインデックス等であるが、これらに限定されない。
【0032】
ネットワーク500はパケット交換ネットワークのような通常のネットワークであり、(ワークステーション501,502、ウェブサーバ507,530及びデータベース506,536等のような)接続された様々な要素間での情報交換を促す。ネットワークは、(通常のイーサーネット、高速イーサーネット、トークンリング等のような)ローカルエリアネットワーク(LAN)や、(電気電子技術機構−IEEE−のワーキンググループで開発された)802.11a及び802.11bで規定されている無線LAN等でもよく、LANや無線LANは企業内で使用されているかもしれない。更に、ネットワーク500は、仮想プライベートネットワーク(VPN)により遠隔ユーザとの通信を促すインターネットのような広域ネットワーク(WAN)でもよいし、或いはネットワーク500はLAN及びWANの組み合わせでもよい。更に、ネットワーク500は多種多様な媒体を使って形成されてよく、例えば電気的なワイヤやケーブル、光学的な又は無線の接続でもよいが、これらに限定されない。
【0033】
図6は、(自動スケジューリングシステムのソフトウエア構成要素を含む)本発明の実施例が使用されてよい通信アーキテクチャを示す。クライアントプロセッサ602はウェブブラウザに対応し、サーバプロセッサ604は例えば図5のウェブサーバ507,530のようなウェブサーバに対応する。プロジェクトメンバ又は管理者は、ユーザインターフェース601を通じてクライアントプロセッサ602とやりとりを行う。クライアントプロセッサ602は、ログインウェブページ(図4)及び様々なエディタウェブページ(図1A,2A,3A)を管理及び維持する。クライアントプロセッサ602は、これらのウェブページで起こる全てのイベントを処理する。一実施例では、クライアントプロセッサ602はHTTPプロトコルを通じてサーバプロセッサ604とやりとりを行う。一実施例では、クライアントプロセッサ602は、セキュアHTTPプロトコルを通じてサーバプロセッサ604とやりとりを行う。
【0034】
ログインウェブページ(図4)及びエディタウェブページ(図1A,2A,2A)を表示するための情報を、サーバプロセッサ604はクライアントプロセッサ602に与える。クライアントプロセッサ602がこれらのページの情報を提示した場合、サーバプロセッサ604はログイン及びエディタウェブページの情報を処理する。データベース606は、プロジェクト及びタスクスケジュール情報のレポジトリ(記憶部)である。データベース中の情報を取得、追加及び更新するように、サーバプロセッサ604はデータベースとやりとりを行う。一実施例によれば、サーバプロセッサ604はデータベース606とやりとりを行う。しかしながら、他のデータベース及びプロトコルが使用されてもよい。
【0035】
<クライアントサーバーインターフェース>
図7は、システムのクライアントプロセッサ及びサーバプロセッサ間のインターフェースを示す。ホーム、ログイン(図4)、プロジェクトスケジュールエディタ(図2A)、メンバスケジュールエディタ(図3A)及びタスク割当エディタ(図1A)のウェブページをサーバプロセッサ604からクライアントプロセッサ602が取得するように、HTTP/HTTPS_GETリクエストが用意されている。ログイン(図4)及びエディタウェブページ(図1A,2A,2A)に入力された情報を処理に備えてクライアントプロセッサ602がサーバプロセッサ604に提出するように、HTTP/HTTPS_POSTリクエストが用意されている。適用可能なHTTP/HTTPS_GET及びHTTP/HTTPS_POSTリクエストについては、以下で詳細に説明される。
【0036】
HTTP/HTTPS_GET_Projetct/Dept/Divisionホームページリクエストは、部又は課にそれぞれ関連するプロジェクトホームページをサーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。そのホームページは、スケジュール、タスク割当及びログイン用の各ウェブページに接続してそれらを編集者に見せるリンク(例えば、ハイパーリンク)を含む。
【0037】
HTTP/HTTPS_GET_current_project_directory/schedule.htmリクエストは、例えば図2Bに示される現在のプロジェクトのプロジェクト計画を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【0038】
HTTP/HTTPS_GET_current_project_directory/tasuAssignment.htmリクエストは、例えば図1Bに示される現在のプロジェクトのタスク割当を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【0039】
HTTP/HTTPS_GET_project_member_directory/schedule.htmリクエストは、例えば図3Bに示される現在のプロジェクトメンバの計画を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【0040】
HTTP/HTTPS_GET_login.htmリクエストは、プロジェクトメンバ又は管理者が何れかのエディタにログオンすることを許可するウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。メンバ又は管理者は、プロジェクト、メンバ名及びエディタのセッションタイプに関する情報を入力する。図4はエディタの1つにログインするウェブページを示す。
【0041】
HTTP/HTTPS_GET_TaskAssigEditor.htmリクエストは、タスク割当エディタのウェブページをサーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、タスク割当エディタは、現在のプロジェクトのプロジェクトメンバにタスクを割り当てる際に使用される。サーバプロセッサ604がタスク割当エディタのウェブページを返すのに先だって、プロジェクト管理者は、タスクをプロジェクトメンバに割り当てるアクセス特権を要する。管理者がログインウェブページ(図4)に情報を提示する際、その特権が確認される。一実施例の場合、TaskAssignEditor.htmは、タスク割当エディタでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、TaskAssignEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図1Aに示されるように、その情報がタスク割当エディタで表示されるようにする。
【0042】
HTTP/HTTPS_GET_ProjectScheduleEditor.htmリクエストは、プロジェクトスケジュールエディタのウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、そのウェブページは現在のプロジェクトのプロジェクト計画を更新するのに使用される。サーバプロセッサ604がプロジェクトスケジュールエディタを返すのに先だって、プロジェクト管理者は、プロジェクトスケジュールを作成するアクセス特権を要する。管理者がログインウェブページ(図4)に情報を提示する際、その特権が確認される。一実施例の場合、ProjScheduleEditor.htmは、プロジェクトスケジュールエディタのウェブページでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、ProjScheduleEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図2Aに示されるように、その情報がプロジェクトスケジュールエディタで表示されるようにする。
【0043】
HTTP/HTTPS_GET_MemberScheduleEditor.htmリクエストは、メンバスケジュールエディタのウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、そのウェブページは現在のプロジェクトのプロジェクトメンバの計画を作成又は更新するのに使用される。一実施例では、プロジェクトメンバのスケジュールが以前に作成されていなかった場合、スケジュールエディタは未完了のタスクのみを表示する。サーバプロセッサ604がこのウェブページを返すのに先だって、プロジェクト管理者は、スケジュールを作成又は編集するアクセス特権を要する。メンバがログインウェブページ(図4)に情報を提示する際、その特権が確認される。一実施例の場合、MembScheduleEditor.htmは、プロジェクトメンバのスケジュールエディタでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、MembScheduleEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図3Aに示されるように、その情報がメンバのスケジュールエディタで表示されるようにする。
【0044】
HTTP/HTTPS_POSTlogin.htmは、クライアントプロセッサ602が(プロジェクトスケジュール、メンバスケジュール、タスク割当のような)様々なエディタにアクセス及びそれを表示することを許可する。login.htmに対応するウェブページから“Submit(提示)”ボタンが選択された場合、このインターフェースが呼び出される。login.htmに入力された情報は、サーバプロセッサ604のPostLogin.htmに与えられる。PostLogin.htmは、この情報を使ってプロジェクトのメンバの有向性を確認し、そのメンバが要求しているエディタに対するアクセス特権を有するか否かを判定する。情報が有効でなかった場合又はメンバがエディタに対するアクセス特権を備えていなかった場合、PostLogin.htmは、そのプロジェクトメンバが要求のエディタにアクセスできないことを示すメッセージを、クライアントプロセッサ602に返す。或いは、PostLogin.htmは何れかのエディタに関連するウェブページを返してもよい、即ち、ウェブブラウザは、要求されたエディタに関連するウェブページに変更されてもよい。
【0045】
HTTP/HTTPS_POSTPostTaskAssign.htmは、タスク割当エディタ(図1A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。TaskAssignEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。TaskAssignEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostTaskAssign.htmに与えられる。PostTaskAssign.htmは、適切なデータベース506,536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostTaskAssign.htmは、例えば図1Bに示されるようなタスク割当エディタのウェブページを作成する。
【0046】
HTTP/HTTPS_POSTPostProjSchedule.htmは、プロジェクトスケジュールエディタ(図2A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。ProjScheduleEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。ProjScheduleEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostProjSchedule.htmに与えられる。PostProjSchedul.htmは、適切なデータベース506,536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostProjSchedule.htmは、例えば図2Bに示されるようなプロジェクトスケジュールのウェブページを作成する。
【0047】
HTTP/HTTPS_POSTPostMembSchedule.htmは、プロジェクトメンバのスケジュールエディタ(図3A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。MembScheduleEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。MembScheduleEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostMembSchedule.htmに与えられる。PostMembSchedul.htmは、適切なデータベース506,536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostMembSchedule.htmは、例えば図3Bに示されるようなプロジェクトスケジュールのウェブページを作成する。
【0048】
非限定的な一実施例の場合、(TaskAssignEditor.htm、ProjScheduleEditor.htm及びMembScheduleEditor.htmのような)様々なエディタのウェブサイトは、ジャバスクリプト又はPHPスクリプトを含むファイルを有する。本願で説明される様々な機能を実行するのに使用されるスクリプト言語は、実施形態毎に異なってよい。ウェブブラウザ(例えば、クライアントプロセッサ)がエディタのウェブページを要求する場合、ジャバスクリプトに対応する全てのファイル及びエディタウェブページが、ウェブブラウザに提供され、これによりウェブブラウザはそのジャバスクリプトを処理することになる。しかしながら、PHPスクリプトの場合ファイルはウェブブラウザに提供されない。PHPスクリプトは図5のウェブサーバ507,530のようなウェブサーバで処理され、PHPスクリプトがウェブページ書き込んだもののみがウェブブラウザに提供される。
【0049】
図8は、プロジェクトメンバ又は管理者がログインウェブページを使って何れかのエディタにログオンする際のシーケンス図を示す。この図は、メンバ又は管理者にエディタが表示される前に、システムの構成要素間で通信される情報を示す。ログインウェブページ(図4)で生じる全てのインベントの処理は、クライアントプロセッサ602内で行われる。ログインページで入力された情報の有効性を確認し、エディタに関するメンバのアクセス特権を確認する処理は、サーバプロセッサ604内で行われる。サーバプロセッサ604は、アクセス特権の有向性を確認するため、適切なデータベース506又は536から情報を取得する。どのエディタに情報を与える前にも、プロジェクトメンバ又は管理者はこのプロセスを実行し、それらのシーケンスは図9-11で説明される。
【0050】
<エディタのシーケンス図>
図9(タスク割当エディタ)、図10(プロジェクトスケジュールエディタ)及び図11(メンバ介ジールエディタ)は、ウェブブラウザで各エディタを表示し、セッションが終了した場合にエディタの情報を投函又は公表(post)する。全てのエディタは同様なシーケンスに従う。クライアントプロセッサのウェブブラウザでエディタの初期表示を得るため、適切なタスク割当/スケジュール情報が、(PHPスクリプトを使って)サーバプロセッサのデータベースから取得される。或るコードと共にエディタを管理及び維持するようにクライアントプロセッサが実行できるコード(ジャバスクリプト)を含むウェブページを、サーバプロセッサは伝送し、そのコードはサーバプロセッサが(PHPスクリプトを使って)生成したものであり、クライアントプロセッサで初期エディタを表示する。サーバプロセッサがデータベースから取得したタスク割当/スケジュール情報をクライアントプロセッサに伝送するコードが、サーバプロセッサにより生成される。
【0051】
図9は、プロジェクト管理者がタスク割当エディタと共に行うセッション例のシーケンスを示す。クライアントプロセッサ602がTaskAssignEditor.htmを要求した場合、TaskAssignEditor.htmのファイル及び(.js拡張子を伴う)ジャバスクリプトを含む包含されるファイル全ては、サーバプロセッサ604からクライアントプロセッサ602に伝送される。(php拡張子を伴う)PHPスクリプトを含む包含ファイルは、サーバプロセッサ604で処理される。PHPスクリプトは、適切なデータベース506又は536からタスク割当情報を取得し、TaskAssignEditor.htmのウェブページにジャバスクリプトを書き込み、情報をクライアントプロセッサ602に伝送する。クライアントプロセッサ602は受信したファイル全ての中のジャバスクリプトを処理し、対応するタスク割当エディタを表示する。タスク割当エディタを管理、維持及び更新するように、プロジェクト管理者及びタスク割当エディタ間の全てのやりとりは、ジャバスクリプトで処理される。プロジェクト管理者がセッションを終了すると(例えば、「終了」ボタンを選択すると)、タスク割当エディタ中のタスク割当情報全てが、インターフェース(PostTaskAssign.htm)を介してクライアントプロセッサ602からサーバプロセッサ604に伝送される。サーバプロセッサ604は、適切なデータベース中の情報を追加又は更新することで、情報を処理する。データベース中のタスク割当情報を使って、サーバプロセッサ604は、プロジェクトタスク割当のウェブページ(例えば図1Bに示されるようなもの)を自動的に作成する。
【0052】
図10は、プロジェクト管理者がプロジェクト計画エディタと共に行うセッション例のシーケンスを示す。クライアントプロセッサ602がProjScheduleEditor.htmを要求した場合、ProjScheduleEditor.htmのファイル及びジャバスクリプトを含む包含ファイル全ては、サーバプロセッサ604からクライアントプロセッサ602に伝送される。PHPスクリプトを含む包含ファイルは、サーバプロセッサ604で処理される。PHPスクリプトは、適切なデータベースからタスクスケジュール情報を取得し、ProjScheduleEditor.htmのウェブページにジャバスクリプトを書き込み、情報をクライアントプロセッサ602に伝送する。クライアントプロセッサ602は受信したファイル全ての中のジャバスクリプトを処理し、プロジェクトスケジュールエディタを表示する。エディタを管理、維持及び更新するように、プロジェクト管理者及びプロジェクトスケジュールエディタ間の全てのやりとりは、ジャバスクリプトで処理される。管理者がセッションを終了すると(例えば、「終了」ボタンを選択すると)、プロジェクトスケジュールエディタ中のプロジェクトタスクスケジュール情報全てが、インターフェース(PostProgScheduleEditor.htm)を介してクライアントプロセッサ602からサーバプロセッサ604に伝送される。サーバプロセッサ604は、適切なデータベース中の情報を追加又は更新することで、情報を処理する。サーバプロセッサ604は、プロジェクトスケジュールと共にプロジェクトメンバのスケジュールを自動的にまとめ、データベース中のプロジェクトスケジュールを追加又は更新する。データベース中のプロジェクトタスクスケジュール情報を使って、サーバプロセッサ604は、プロジェクトスケジュールのウェブページ(例えば図2Bに示されるようなもの)を自動的に作成する。
【0053】
「統合(Consolidate)」ボタンの選択に応じたシステム動作は、「終了」ボタンを選択したときの動作と同じである。何れのボタンも、(a)プロジェクトスケジュールエディタからの情報と共に適切なデータベースの追加及び更新を行うこと、(b)プロジェクトスケジュールと共にメンバ各自のスケジュールを統合すること、(c)データベースのプロジェクトスケジュールの追加及び更新を行うこと、及び(d)プロジェクトスケジュールのウェブページを作成することを引き起こす。更に、「統合」は、ProjScheduleEditor.htmを再び要求することで、更新されたプロジェクトスケジュールと共にプロジェクトスケジュールエディタを再表示する。
【0054】
図11は、プロジェクトメンバがプロジェクトメンバのスケジュールエディタ(即ち、メンバのスケジュールエディタ)と共に行うセッション例のシーケンスを示す。クライアントプロセッサ602がMembScheduleEditor.htmを要求した場合、MembScheduleEditor.htmのファイル及びジャバスクリプトを含む包含ファイル全ては、サーバプロセッサ604からクライアントプロセッサ602に伝送される。PHPスクリプトを含む包含ファイルは、サーバプロセッサ604で処理される。PHPスクリプトは、適切なデータベースからタスクスケジュール情報を取得し、MembScheduleEditor.htmのウェブページにジャバスクリプトを書き込み、情報をクライアントプロセッサ602に伝送する。クライアントプロセッサ602は受信したファイル全ての中のジャバスクリプトを処理し、メンバスケジュールエディタを表示する。メンバスケジュールエディタを管理、維持及び更新するように、プロジェクトメンバ及びメンバスケジュールエディタ間のやりとりは、ジャバスクリプトで処理される。管理者がセッションを終了すると(例えば、「終了」ボタンを選択すると)、メンバスケジュールエディタ中のメンバタスクスケジュール情報が、インターフェース(PostMembScheduleEditor.htm)を介してクライアントプロセッサ602からサーバプロセッサ604に伝送される。サーバプロセッサ604は、適切なデータベース中の情報を追加又は更新することで、情報を処理する。サーバプロセッサ604は、データベース中のプロジェクトスケジュールを追加又は更新することで、情報を処理する。データベース中のメンバタスクスケジュール情報を使って、サーバプロセッサ604は、メンバスケジュールのウェブページ(例えば図3Bに示されるようなもの)を自動的に作成する。
【0055】
<データベース概要>
図12は、プロジェクト及びプロジェクトメンバのタスク割り当て及びタスクスケジュール情報を保存及び管理するのに使用されるデータベーステーブルの概要を示す。テーブルは、タスク割当に関する情報、プロジェクトタスクのスケジュール及び各プロジェクトメンバのスケジュールを保持する。タスク割当、プロジェクトスケジュール及びメンバのスケジュールが全て関連するように、テーブルは組織され結び付けられる。
【0056】
タスク割当テーブル1202は、プロジェクトタスク及び関連するプロジェクトのサブタスクを格納する。最上位プロジェクトタスク(TopLevelProjectTask)テーブル1204は、タスク割当テーブル1202中のプロジェクトタスクのスケジュールを格納する。レベル1メンバタスク(Level1MemberTask)テーブル1206は、タスク割当テーブル1202で割り当てられているメンバタスクのスケジュールを格納し、TopLevelProjectTaskテーブル1204中の対応するプロジェクトタスクのスケジュールにリンクする。これらのテーブル間のリンクは、プロジェクトスケジュールと共に、メンバスケジュールを自動的に統合できるようにする。Level1MemberTaskテーブル1206は、どのプロジェクトタスクにも関係ないメンバタスクのスケジュールを格納する。LevelXメンバタスクテーブル(Xは1,2,3及び4)及びメンバタスクテーブル1208は、様々なレベルのメンバタスク間のリンクを保存及び管理する。下位レベルのタスクは、上位レベルのタスクよりも詳細なタスクである。これらのテーブル構成は、メンバのスケジュールを維持する。プロジェクトチーム(ProjectTeam)テーブル1210は、プロジェクトメンバに関する情報を含む。プロジェクトメンバのプロジェクトメンバ情報は、(a)様々なエディタに対するアクセス特権を確認するための役職(role)、(b)メンバスケジュールのウェブページが保存されている場所を示すディレクトリ、及び(c)様々なレベルでメンバタスクの身元を確認するのに使用されるIDを含む。
【0057】
ログインプロセスは、プロジェクトチームテーブル1210中の情報を使用して、エディタを表示する前に、要求されるエディタに対するアクセス特権を確認する。タスク割当エディタは、デフォルトタスク(Default Task)1212、タスク割当1202、タスク割当履歴(TaskAssignmentHistory)1218、最上位プロジェクトタスク1204及びメンバタスク1208のテーブル中有の情報を使用及び/又は更新する。プロジェクトスケジュールエディタは、デフォルトタスク1212、タスク割当1202、最上位プロジェクトタスク1204、メンバタスク1208及びレベル1メンバタスク1206のテーブル中の情報を使用及び/又は更新する。メンバスケジュールエディタは、プロジェクトチーム1210、タスク割当1202、最上位プロジェクトタスク1204、メンバタスク1208及びレベルXメンバタスクのテーブル中の情報を使用及び/又は更新する。
【0058】
以下、図12に示されており及び本願のプロジェクトスケジュール管理システム例で使用される様々なテーブルを説明する。しかしながら、図12に関して説明されているテーブルの数及び構造は、実施形態毎に異なってよい。
【0059】
デフォルトタスクテーブル1212 − このテーブルは、全てのプロジェクトについて一般的なタスクのタスク名を含む。ソフトウエア開発プロジェクトの場合、デフォルトタスクの具体例は、プロジェクトプラン(Project Plans)、条件(Requirements)及び上位レベル設計(Top Level Design)である。
【0060】
プロジェクトチームテーブル1210 − このテーブルは、プロジェクトのプロジェクトメンバに関する情報を含む。sMemberLabelは2〜4文字列であり、プロジェクトスケジュールを表示する際にプロジェクトメンバを特定するのに使用され、プロジェクトタスク及び関連するメンバタスクを図1A及び1Bに示されるように表示する。一実施例では、プロジェクトメンバのイニシャルがsMemberLabelに使用される。nMemberRoleはプロジェクトメンバの役割を示すのに使用される。例えば、プロジェクト管理者=1、プロジェクトリーダ=2、プロジェクトアドミニストレータ=3及びプロジェクトメンバ=4である。役割は、エディタへのアクセス権を有する者を示す。例えば、役割番号が1であるプロジェクトメンバは、全てのエディタに対するアクセス権を有する。しかしながら、役割番号が4のプロジェクトメンバは、メンバスケジュールエディタにしかアクセスできない。システムは、エディタ各々に対してどの役割番号がアクセス権を有するかを決めるように構成されてもよい。sMemberDirectoryは、メンバスケジュールのHTMLファイルが保存されている場所を特定するのに使用され、プロジェクトチームがメンバのスケジュールを閲覧できるようにする。
【0061】
nMemberTaskIDはプロジェクトメンバに割り当てられた番号であり、その番号を使ってメンバのタスクのIDを特定する。一実施例の場合、nMemberTaskIDはタスクの開始IDとして使用される。小さなチームの場合IDはMOD10(1,2,...,9)でもよいし、大きなチームの場合はMOD100(1,2,...,99)又はそれ以上でもよく、これらはプロジェクトチームの大きさに依存してよい。タスクIDは、MODの増分である。例えば、プロジェクトメンバ‘test1’のnMemberTaskIDが1であった場合、test1のタスクのタスクIDは11,21,31(又は大規模なチームの場合、101,201,301等)のようになる。タスクIDは、たとえタスクの名前の一部が同じであったとしても、プロジェクトメンバのタスクを一意に区別する。タスクIDは全てのレベルのタスクを一意に特定する。nLevelXMaxTaskIDは、プロジェクトメンバの様々なレベルのタスクについて使用される最高のタスクIDを維持するのに使用される。これらの数は、タスクのタスクIDを決めるのに使用された開始IDを与え、そのタスクはメンバのスケジュールエディタのセッションで追加されたものである。これらの値は,エディタのセッション後に抽出及び更新される。nLevelXMaxTaskIDの値を除いて、他の入力の値はプロジェクトの開始以前に設定される必要がある。
【0062】
タスク割当テーブル1202 − このテーブルは、プロジェクトのプロジェクトメンバに割り当てられたプロジェクトタスク及びサブタスクに関する情報を含む。sTaskNamaはタスクの名称に使用され、nProjectTaskIDはそのタスクに関連するIDである。プロジェクト開始タスクIDは0であり、タスクのIDがMODの増分になるようにする(例えば、小さなチームの場合、10,20,30,...)。sLevel1TaskNameはプロジェクトタスクに関連するサブタスク(メンバのタスク)の名称に使用され、nLevel1TaskIDはサブタスクに関連するIDに使用される。sMemberLabelは、サブタスクに割り当てられたプロジェクトメンバを特定するのに使用される。bIsObsoletedは、タスクがプロジェクトから除去されているか否かを指定するのに使用される。タスクがスケジュールから削除されたとしても、そのタスクの情報はデータベースに維持される。TaskName、nProjectTaskID、sLevel1TaskName及びsMemberLabelの値は、タスク割当エディタのセッションによりタスク割当テーブル1202に追加可能である。プロジェクトスケジュールエディタのセッションは、sTaskName及びnProjectTaskIDの値を追加できる。メンバスケジュールエディタのセッションだけが、nLevel1TaskIDの値を追加できる。
【0063】
最上位プロジェクトタスクテーブル1204 − このテーブルは、プロジェクトタスクのスケジュールに関する情報を含む。sTaskNameはタスクの名称に使用され、nProjectTaskはタスクに関連するIDに使用される。planStart及びplanEndは、タスクを開始及び終了する予定日に使用される。actualStart及びactualEndは、タスクが開始及び終了した実際の日付に使用される。setDateは、予定日が設定又は修正された日付に使用される。nScheduleRevNumberはタスクスケジュールの改訂番号に使用される。プロジェクトタスクに関する最新のスケジュールは、最高の改訂番号に対応する。プロジェクトタスクの全ての改訂は、最上位プロジェクトタスクテーブル1204で維持され、プロジェクトタスクのスケジュールの変更を追跡する。プロジェクトスケジュールエディタで予定日が異なる日に変更された場合にのみ、改訂番号は増やされる。プロジェクトスケジュールエディタのセッション又はタスク割当エディタのセッションを通じて、nProjectTaskID、sTaskName、日付及びnScheduleRevNumberの全ての値は、最上位プロジェクトタスクテーブル1204で追加又は更新される。
【0064】
メンバタスクテーブル1208 − このテーブルは、全てのプロジェクトメンバについての全てのタスク(全レベルのタスク)に関する情報を含む。タスクID及びnLevelXTaskIDはプロジェクトの各メンバに関連付けられ、全てのタスク及びそれらの関連性を互いに識別する。タスク割当テーブルと同様に、タスクがプロジェクトメンバのスケジュールから削除されているか否かを、bIsObsoletedは示す。bIsCompletedはタスクが完了しているか否かを示す。nLevelXTaskIDは、メンバタスクテーブル1208に追加されたタスクに使用され、新たなタスクがメンバのスケジュールエディタセッションで追加された場合、プロジェクトチームテーブル1210のnLevelXMaxTaskIDから判別される。(メンバスケジュール、プロジェクトスケジュール、タスク割当のような)3つのエディタセッションのどの結果によっても、テーブル中の値は更新又は修正可能である(bIsObsoleted又はbIsCompleted)。メンバタスクテーブル1208は、下位レベルのタスクスケジュールと上位レベルのタスクスケジュール間のリンクをもたらす点で重要である。
【0065】
レベルXメンバタスクテーブル(例えば、レベル1メンバタスクテーブル1206、レベル2メンバタスクテーブル1214、レベル3メンバタスクテーブル1216)− このテーブルは、メンバのタスクの予定に関する情報を含む。sLevelXTaskNameはタスク名に使用され、nLevelXTaskIDはタスクに関するIDに使用される。新たなタスクがメンバスケジュールエディタのセッションで追加された場合、テーブルに追加されたタスクのnLevelXTaskIDは、プロジェクトチームテーブル1210のnLevelXMaxTaskIDから決定される。planStart及びplanEndは、タスクを開始及び終了する予定日に使用される。actualStart及びactualEndは、タスクが開始及び終了した実際の日付に使用される。setDateは、予定日が設定又は修正された日付に使用される。nScheduleRevNumberはタスクスケジュールの改訂番号に使用される。プロジェクトタスクに関する最新のスケジュールは、最高の改訂番号に対応する。メンバタスクの全ての改訂はテーブルで維持され、メンバタスクのスケジュールの変更を追跡する。一実施例の場合、メンバスケジュールエディタで予定日が変更された場合にのみ、改訂番号は増やされる。レベルXメンバタスクテーブルの各々は、上位レベルタスクのタスクIDを含む(但し、レベル1を除く。この場合、タスクは親としてのプロジェクトタスクを有する又は親タスクを一切有しない)。これは、親タスク及び子タスクへのリンクをタスクにもたらす。親タスクID、sLevelXTaskName、nLevelXTaskID、日付及びnScheduleRevNumberの全ての値は、メンバスケジュールエディタのセッションを通じてテーブルに追加される又は更新される。レベル1メンバタスクテーブル1206だけが、sMemberLabelを含み、タスク割当テーブル1202へのリンクをもたらす。
【0066】
データベースはレベル4に至る下位レベルしか示していない。しかしながら、データベースは、タスクスケジュールを更に詳細にする更に下位のレベルを含むように修正可能である。
【0067】
タスク割当履歴テーブル1218 − このテーブルは、プロジェクトタスクに関連するタスクのプロジェクトメンバに割当を行った履歴の情報を含む。このテーブルはプロジェクトメンバに関する情報を含み、そのメンバは、タスクが他のプロジェクトメンバに割り当て直される前に、そのタスクにかつて割り当てられていた者である。nProjectTaskIDはタスクに関連するIDである。sLevel1TaskNameはプロジェクトに関するサブタスク(メンバのタスク)の名前である。sMemberLabelはサブタスクに割り当てられるプロジェクトメンバである。nRevNumberはプロジェクトメンバにタスクを割り当てた改訂番号である。nRevNumberはプロジェクトのタスクの再割当を示す。タスク割当エディタ102(図1A)は、タスク割当履歴テーブル1218の情報を利用及び/又は更新する。
【0068】
<サーバのプログラミングパッケージ図>
図13は、図6のサーバプロセッサのプログラミングパッケージ図を示す。サーバプロセッサパッケージ1300は4つのパッケージを含み、各パッケージは、クライアントプロセッサ602でユーザに表示されるウェブページ/エディタに対応し、ユーザがログイン又はエディタのセッションを終了した際、ユーザの入力した情報が処理される。
【0069】
ログインプロセッサ1302パッケージは、或るフォームを表示するウェブページを提供し、そのフォームは、プロジェクトメンバが何れかのエディタにログインすることを可能にする。メンバがそのフォームを提示すると、ログインプロセッサ1302パッケージは、メンバが入力した情報を処理し、その情報の有効性を確認する。情報が有効であり且つメンバが適切なアクセス特権を持っていた場合、ログインプロセッサ1302パッケージは、江ティ他に対応する何れかのパッケージに仕向けるようにシステムを変更する。
【0070】
タスク割当プロセッサ1304パッケージは、タスク割当エディタ102を表示するウェブページを提供し、プロジェクトメンバに対するプロジェクトタスクの割当を追加又は修正するのに使用される。タスク割当エディタ102が提示されると、タスク割当プロセッサ1304パッケージは、タスク割当エディタ102からの情報を処理及び保存し、最新のタスク割当のウェブページを作成する。
【0071】
プロジェクトスケジュールプロセッサ1306パッケージは、プロジェクトスケジュールエディタ202を表示するウェブページを提供し、これはプロジェクトタスクのスケジュールを追加又は編集するのに使用される。プロジェクトスケジュールエディタ202が提示されると、プロジェクトスケジュールプロセッサ1306パッケージは、プロジェクトスケジュールエディタ202からの情報を処理及び保存し、最新のプロジェクトスケジュールのウェブページを作成する。
【0072】
メンバスケジュールプロセッサ1308パッケージは、メンバスケジュールエディタ302(図3A)を表示するウェブページを提供し、これはメンバのタスクのスケジュールを追加又は編集するのに使用される。メンバスケジュールエディタ302が提示されると、メンバスケジュールプロセッサ1308パッケージは、メンバスケジュールエディタ302からの情報を処理及び保存し、最新のメンバスケジュールのウェブページを作成する。
【0073】
ログインプロセッサ1302パッケージをエディタパッケージに仕向けることを除いて、プロセッサパッケージは互いに独立しており、一般にエディタパッケージ間の相互作用はない。プロセッサパッケージ1302−1308の各々はデータベース1310(例えば、図5のデータベース506,536)とやりとりを行い、情報を取得、追加又は更新する。ログインプロセッサ1302パッケージは、データベース1310にアクセスし、メンバがアクセス特権を有するか否かを判別する。他のプロセッサパッケージ1304−1308の各々は、データベース1310にアクセスし、タスク情報を取得し、対応するエディタ及び対応するウェブページ(エディタが生成するウェブページ)の表示を行い、関連するタスク情報の追加又は更新を行う。非限定的な例として、データベース1310はMySQLを用いて実現されてもよい;しかしながら、データベース1310はMySQLを使って実現されるように限定されるわけではない。
【0074】
一実施例の場合、エディタプロセッサ1304−1308パッケージの各々は、PHPスクリプトファイル、ジャバスクリプトファイル及びHTMLファイルを有する。PHPスクリプトファイルは、データベース1310からプロジェクト及びタスク情報を取得し、クライアントプロセッサ602(図6)でエディタを表示するジャバスクリプトを生成する。これは、PHPスクリプトがジャバスクリプトとインターフェースをとることを可能にする。ジャバスくくり婦とはエディタを生成し、エディタ及びプロジェクトメンバ間の全てのやりとりを管理する。エディタが提示されると、PHPスクリプトファイルはエディタ中の情報を処理し、データベース1310に情報を追加し及び情報を更新し、エディタに対応するウェブページを作成する。
【0075】
図14は、エディタプロセッサ1304−1308パッケージのプログラミングパッケージ図を示す。一実施例では、タスク割当プロセッサ1304、プロジェクトスケジュールプロセッサ1306及びメンバスケジュールプロセッサ1308のパッケージは全て図14に示されるこのパッケージ図を利用する。パッケージは2つの主要部分1402,1404に分割され、ディスプレイエディタ1402はエディタの表示及び管理の責務を有し、エディタからのポスト情報部1404はエディタの情報を投函してウェブページを生成する責務を有する。
【0076】
XXX用のウェブページ1406(XXXは、タスク割当、プロジェクトスケジュール又はメンバスケジュールの何れかを指す)は、以下のパッケージを統合し、エディタを表示する。XXXPHPプロセッサ1408パッケージのPHPスクリプトファイル全てと、XXXジャバスクリプトプロセッサ1410パッケージのジャバスクリプトファイル全てとを、ウェブページ1406は含み、エディタを表示及び管理する。全てのPHPスクリプトファイルは、データベースからタスク情報を取得するためにウェブサーバ(例えば、図5のウェブサーバ507,530)で処理され、XXXジャバスクリプトプロセッサ1410パッケージとのインターフェース機能を果たすジャバスクリプトを生成する。全てのジャバスクリプトはクライアントプロセッサ602(図6)のウェブブラウザで実行され、エディタの初期画面をもたらす。全てのジャバスクリプトファイルはクライアントプロセッサ602のウェブブラウザに与えられ、えでぃたを管理する−即ち全ての対応する編集イベントを処理する。
【0077】
ポストXXX用のウェブページ1412は、情報を投函する以下のパッケージを統合し、ポストウェブページを生成する。エディタからの情報を投函するポストXXXPHPプロセッサ1414パッケージのPHPスクリプトファイル全てと、ウェブページを生成するXXXウェブページジェネレータ1416パッケージのPHPスクリプトファイル全てとを、XXX1412のウェブページは含む。ポストXXXPHPプロセッサ1414パッケージは、エディタからのタスク情報全てを取得し、タスク情報をデータベースに追加し又はデータベースのタスク情報を更新する。XXXウェブページジェネレータ1416パッケージは、データベースからタスク情報を取得し、適切なウェブページを生成する。
【0078】
図14の各パッケージは、パッケージのインターフェースをもたらすクラスを提供し、パッケージ内のクラスを管理する。これは、他のパッケージに影響を及ぼさずに、パッケージ内で設計が容易に変更できるようにする。
【0079】
<メンバスケジュールプロセッサパッケージ>
図15乃至18は、メンバスケジュールプロセッサ1308パッケージ(図13)に対応する、メンバスケジュールエディタ302(図3)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタ1404からのポスト情報及びディスプレイエディタ1402の4パッケージに対応するクラス設計例を示す。XXXPHPProcessor(XXXPHPプロセッサ)1408パッケージ(図14)は、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図6)のエディタの初期表示用のコードを生成する。XXXJavaScriptProcessor(XXXジャバスクリプトプロセッサ)1410パッケージ(図14)は、クライアントプロセッサ602(図6)のエディタを表示、管理及び維持する。PostXXXPHPProcessor(ポストXXXPHPプロセッサ)1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函(ポスト)する。XXXWebPageGenerator(XXXウェブページジェネレータ)1416パッケージ(図14)は、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、3つのエディタの間で4つのパッケージ設計が類似していることを示す。各エディタは異なるタスクを実行するが、全てのエディタは同様な設計パターンに従っている。
【0080】
図15は、MemberSchedulePHPProcessor(メンバスケジュールPHPプロセッサ)パッケージ1500(例えば、図14のXXXPHPプロセッサ1408)のクラス図を示す。MemberSchedulePHPProcessorパッケージ1500はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図6)のウェブブラウザで初期のメンバスケジュールエディタ302を表示する。
【0081】
CMemberScheduleManager(Cメンバスケジュールマネジャ)1502クラスはMemberSchedulePHPProcessorパッケージ1500のインターフェースを提供し、MemberSchedulePHPProcessorパッケージ1500内のクラスを管理してジャバスクリプトを生成する。CMemberScheduleInitialData1504クラスは、エディタの初期データを設定するジャバスクリプトを生成する。初期データは、プロジェクトメンバに割り当てられるメンバタスクであり、メンバはそのメンバタスクを彼らのスケジュールに加えることができる。CMemberScheduleTaskRowData(Cメンバスケジュールタスク行データ)1506クラスは、前のエディタセッションでメンバのスケジュールに加えられているメンバタスクの行を表示するジャバスクリプトを生成する。CJavaScriptInterface(Cジャバスクリプトインターフェース)1508クラスは一連のジャバスクリプトを生成し、その一連のジャバスクリプトは、ウェブブラウザの初期エディタを生成し、図16のMemberScheduleJavaScriptProcessor(メンバスケジュールジャバスクリプトプロセッサ)1600とのインターフェース機能をもたらす。CEditorDBInterface(CエディタDBインターフェース)1510クラスは、エディタに表示されるデータベース中の情報にアクセスする。CEditorDBInterface1510は、表示する所望の情報を得るのに適切なデータベース問い合わせ信号を生成する。CEditorDBInterface1510は、データベースにアクセスするためにCScheduleDB(CスケジュールDB)1512とのインターフェース機能を果たす。CMemberScheduleInitialData1504及びCMemberScheduleInitialData1506は、CEditorDBInterface1510を介してデータベースからタスク情報を取得する。一実施例では、MemberSchedulePHPProcessorパッケージの上記のクラスはPHPスクリプトで実現される。
【0082】
図16は、(図14のXXXJavaScriptProcessor1410のような)MemberScheduleJavaScriptProcessor(メンバスケジュールジャバスクリプトプロセッサ)パッケージ1600のクラス図を示す。MemberScheduleJavaScriptProcessorパッケージ1600は、クライアントプロセッサ602(図6)のウェブブラウザのメンバスケジュールエディタ302(図3A)を管理する。
【0083】
CEditorManage(Cエディタマネジャ)1602は、このパッケージのインターフェースを提供し、メンバスケジュールエディタ302用のフォーム及びウェブページを生成する。CTableManager(Cテーブルマネジャ)1604は、メンバスケジュールエディタ302のテーブルを生成し、そのテーブルに影響を及ぼす全てのイベントを管理する。CMemberScheduleTable(Cメンバスケジュールテーブル)1606クラスは、メンバスケジュールエディタ302のテーブルを初期化及び管理し、テーブルの行を作成及び管理する。CMemberScheduleRow(Cメンバスケジュール行)1608クラスは、メンバスケジュールエディタ302のテーブルの行を初期化及び管理し、その行に及ぶ全てのイベントを管理し、行内のセルを作成及び管理する。CTaskCell(Cタスクセル)1610クラスは、行中のタスクセルを初期化及び管理し、タスクに関する情報を維持する。CDateCell(C日付セル)1612クラスは、行の日付セルを初期化及び管理し、タスクのスケジュールに関する情報を維持する。構造SMemberTaskInfo(Sメンバタスク情報)1614は、MemberSchedulePHPProcessor1500パッケージからMemberScheduleJavaScriptProcessor1600パッケージへメンバタスク情報が伝送され、エディタでタスクを表示できるようにする。CDetailTaskInfo(C詳細タスク情報)1616クラスは、タスクに関する詳細なタスク情報を保存及び維持し、サブタスクと共にタスクのスケジュールを更新するのに使用される。CDateCell(C日付セル)1612は、CDateSelector(C日付セレクタ)1618を含み、その日付のセルの中で月、日及び年のメニュー選択肢を表示する。一実施例では、MemberScheduleJavaScriptProcessor1600パッケージの構造及び上記クラスの全てが、ジャバスクリプトで実現される。
【0084】
図17は、(図14のPostXXXPHPProcessor1414のような)PostMemberSchedulePHPProcessor(ポストメンバスケジュールPHPプロセッサ)パッケージのクラス図を示す。CMemberTaskManager(Cメンバタスクマネジャ)1702クラスは、そのパッケージのインターフェースを提供し、パッケージ中の他の全てのクラスを管理する。CMemberTaskManager(Cメンバタスクマネジャ)1702は、エディタから各タスクで実行する動作を決定する。CMemberTaskUpdater(Cメンバタスク更新)1704クラスは、データベースのタスクのスケジュールを更新する。更新は、予定日を編集すること、実際の日付を更新すること、タスクを廃止すること及び新しいタスクを追加することを含む。情報を取得し及びデータベースの情報を更新するために、クラスCPostDBInterface(CポストDBインターフェース)1706はそのクラスのインターフェースを提供する。CPostDBQueryGenerator(CポストDBクエリジェネレータ)クラス1708は、CPostDBInterface1706のSQLデータベース問い合わせ信号を生成する。CPostDBInterface1706は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)1710とのインターフェース機能を果たす。CMemberTaskUpdater1704はCPostDBInterface1706を介してデータベースのタスク情報を更新する。一実施例では、PostMemberSchedulePHPProcessorパッケージ1700の上記クラスはPHPスクリプトで実現される。
【0085】
図18は、(図14のXXXWebPageProcessor1416のような)MemberScheduleWebPageGenerator(メンバスケジュールウェブページジェネレータ)パッケージのクラス図を示す。CMemberScheduleWebPageManager(Cメンバスケジュールウェブページマネジャ)1802クラスは、このパッケージのインターフェース機能を提供し、メンバのスケジュールのウェブページを生成する。CMemberScheduleTable(Cメンバスケジュールテーブル)1804は、メンバスケジュールのウェブページのテーブルを生成する。CProjectTaskRow(Cプロジェクトタスク行)1806は、テーブル内のタスク行を生成する。データベースの情報を取得するために、クラスCWebPageDBInterface(CウェブページDBインターフェース)1808は、クラスのインターフェースを提供する。クラスCWebPageDBQueryGenerator(CウェブページDBクエリジェネレータ)1810は、CWebPageDBInterface1808のSQLデータベース問い合わせ信号を生成する。CWebPageDBInterface1808は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)1812とのインターフェース機能を果たす。CMemberScheduleTable1804及びCProjectTaskRow1806は、CWebPageDBInterface1808を介してデータベースからタスク情報を取得する。一実施例では、MemberScheduleWebPageGenerator1800パッケージの上記クラスはPHPスクリプトで実現される。
【0086】
テーブル(表)1は、メンバスケジュールエディタ302(図3)のドキュメントオブジェクトモデル表現を示す。テーブル1は、メンバスケジュールエディタ302を構築する要素(element)と、対応する要素名及びid属性とを説明している。いくつかの要素は、エディタに表示されるエディタの一部分に対応し、例えば、テーブル要素、行要素、セル要素、チェックボックス入力要素、入力テキスト要素及び選択要素等である。いくつかの要素は、情報を表示すると言うよりもむしろ保存のために使用され、例えば、隠れ入力要素である。情報を保存する又はユーザから情報を受信する要素は、情報をサーバプロセッサに与え、エディタのセッションによるタスク情報を掲示する際に重要になる。 エディタの構成要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、メンバスケジュールエディタ302中の要素各々について、要素は、図16のMemberScheduleJavaScriptProcessor1600のクラスの1つの中に包含される。要素はクラスの属性(attribute)である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表1】

【0087】
以下の表2は、図16に示されるMemberScheduleJavaScriptProcessor1600パッケージのCTaskCell1610の属性メンバを示す。CTaskCell1610は、包含する要素全ての属性値を取得及び設定できる。
【表2】

【0088】
<プロジェクトスケジュールプロセッサパッケージ>
図19乃至22は、図13のProjScheduleProcessor1310パッケージに対応する、プロジェクトスケジュールエディタ202(図2A)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタからのポスト情報1404及びディスプレイエディタ1402の4パッケージに対応するクラス図を示す。XXXPHPプロセッサ1408(図14)パッケージは、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図6)のエディタの初期表示のコードを生成する。XXXJabaScriptProcessor1410(図14)パッケージは、クライアントプロセッサ602(図6)でエディタを表示、管理及び維持する。PostXXXPHPProcessor1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函する。XXXWebPageGenerator1416(図14)パッケージは、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、3つのエディタの間で4つのパッケージの設計が類似していることを示す。エディタ各々は異なるタスクを実行するが、それらは全て同様な設計パターンに従っている。
【0089】
図19は、(図14のXXXPHPプロセッサ1408のような)ProjectSchedulePHPProcessor(プロジェクトスケジュールPHPプロセッサ)パッケージのクラス図を示す。ProjectSchedulePHPProcessorパッケージ1900はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図6)のウェブブラウザで初期のプロジェクトスケジュールエディタ202を表示する。
【0090】
CProjectScheduleManager(Cプロジェクトスケジュールマネジャ)1902クラスはProjectSchedulePHPProcessorパッケージ1900のインターフェースを提供し、ProjectSchedulePHPProcessorパッケージ1900内のクラスを管理してジャバスクリプトを生成する。CProjectScheduleInitialData1904クラスは、エディタの初期データを設定するジャバスクリプトを生成する。初期データは、プロジェクトスケジュールメンバに割り当て可能なプロジェクトタスクである。CProjectScheduleTaskRowData(Cプロジェクトスケジュールタスク行データ)1906クラスは、前のエディタセッションでメンバのスケジュールに加えられている対応するタスクと共に、プロジェクトタスクの行を表示するジャバスクリプトを生成する。CJavaScriptInterface(Cジャバスクリプトインターフェース)1912クラスは一連のジャバスクリプトを生成し、その一連のジャバスクリプトは、ウェブブラウザの初期エディタを生成し、ProjectScheduleJavaScriptProcessor(プロジェクトスケジュールジャバスクリプトプロセッサ)2000とのインターフェース機能をもたらす。CEditorDBInterface(CエディタDBインターフェース)1908クラスは、エディタに表示されるデータベース中の情報にアクセスする。CProjectEditorDBQueryGenerator(CプロジェクトエディタDBクエリジェネレータ)1910クラスは、CEditorDBInterface1908のSQLデータベース問い合わせ信号(クエリ)を生成する。CProjectEditorDBInteerface1908は、データベースにアクセスする際CScheduleDB1914とのインターフェース機能を果たす。CProjectScheduleInitialData1904及びCProjectScheduleTaskRowData1906は、CProjectEditorDBInterface1908を介してデータベースからタスク情報を取得する。一実施例では、ProjectSchedulePHPProcessor1900パッケージの上記のクラスはPHPスクリプトで実現される。
【0091】
図20は、(図14のPostXXXJavaScriptProcessor1410のような)ProjectScheduleJavaScriptProcessor(プロジェクトスケジュールジャバスクリプトプロセッサ)パッケージ2000のクラス図を示す。ProjectScheduleJavaScriptProcessorパッケージ2000は、ブラウザのプロジェクトスケジュールエディタ202(図2A)を管理する。 CProjectEditorManage(Cプロジェクトエディタマネジャ)2002クラスは、このパッケージのインターフェースを提供し、プロジェクトスケジュールエディタ202用のフォーム及びウェブページを生成する。CProjectTableManager(Cプロジェクトテーブルマネジャ)2004クラスは、プロジェクトスケジュールエディタ202のテーブルを生成、初期化及び管理し、そのテーブルに影響を及ぼす全てのイベントを管理する。CProjectTableManager2004は、テーブルの行を生成及び管理する。CProjectScheduleRow(Cプロジェクトスケジュール行)2006クラスは、プロジェクトスケジュールエディタ202のテーブルの行を初期化及び管理し、その行に及ぶ全てのイベントを管理し、行内のセルを作成及び管理する。CTaskCell(Cタスクセル)2008クラスは、行中のタスクセルを初期化及び管理する。CMemberCell(Cメンバセル)2010クラスは、行のメンバセルをを初期化及び管理する。CDateCell(C日付セル)2012クラスは、行の日付セルを初期化及び管理する。構造SProjectTaskInfo(Sプロジェクトタスク情報)2014は、ProjectSchedulePHPProcessor1900パッケージからProjectScheduleJavaScriptProcessor2000パッケージへプロジェクト/メンバタスク情報が伝送され、プロジェクトスケジュールエディタ202でプロジェクトタスク及びメンバタスクスケジュールを表示できるようにする。CDateCell(C日付セル)2012は、CDateSelector(C日付セレクタ)2016を含み、予定の/実際の日付のセルの中で月、日及び年のメニュー選択肢を表示する。一実施例では、ProjectScheduleJavaScriptProcessor2000パッケージの構造及び上記クラスの全てが、ジャバスクリプトで実現される。
【0092】
図21は、(図14のPostXXXPHPProcessor1414のような)PostProjectSchedulePHPProcessor(ポストプロジェクトスケジュールPHPプロセッサ)2100パッケージのクラス図を示す。CProjectTaskManager(Cプロジェクトタスクマネジャ)2102クラスは、そのパッケージのインターフェースを提供し、パッケージ中の他の全てのクラスを管理する。CProjectTaskManager2102は、プロジェクトスケジュールエディタ202から各プロジェクトタスクで実行する動作を決定する。CProjectTaskUpdater(Cプロジェクトタスク更新)2104クラスは、データベースのタスクのスケジュールを更新する。更新は、プロジェクトタスクのスケジュールを追加又は更新することを含む。CProjectTaskUpdater2104クラスは、メンバのタスクと共にプロジェクトタスクを統合し、データベース中のプロジェクトタスクを更新する。情報を取得し及びデータベースの情報を更新するために、CPostProjectDBInterface(CポストプロジェクトDBインターフェース)2106はそのクラスのインターフェースを提供する。CPostProjectDBQueryGenerator(CポストプロジェクトDBクエリジェネレータ)2108クラスは、CPostProjectDBInterface2106のSQLデータベース問い合わせ信号を生成する。CPostProjectDBInterface2106は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)2110とのインターフェース機能を果たす。CProjectTaskUpdater2104はCPostProjectDBInterface2106を介してデータベースのタスク情報を更新する。一実施例では、PostProjectSchedulePHPProcessor2100パッケージの上記クラスはPHPスクリプトで実現される。
【0093】
図22は、(図14のXXXWebPageProcessor1416のような)ProjectScheduleWebPageGenerator(プロジェクトスケジュールウェブページジェネレータ)2200パッケージのクラス図を示す。CProjectScheduleWebPageManager(Cプロジェクトスケジュールウェブページマネジャ)2202クラスは、このパッケージのインターフェース機能を提供し、プロジェクトスケジュールのウェブページを生成する。CProjectScheduleTable(Cプロジェクトスケジュールテーブル)2204は、プロジェクトスケジュールのウェブページのテーブルを生成する。CProjectTaskRow(Cプロジェクトタスク行)2206は、テーブル内でプロジェクト及びメンバのタスクの行を生成する。データベースの情報を取得するために、CProjectWebPageDBInterface(CプロジェクトウェブページDBインターフェース)2208クラスは、クラスのインターフェースを提供する。クラスCProjectWebPageDBQueryGenerator(CプロジェクトウェブページDBクエリジェネレータ)2210は、CProjectWebPageDBInterface2208のSQLデータベース問い合わせ信号を生成する。CProjectWebPageDBInterface2208は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)2212とのインターフェース機能を果たす。CProjectScheduleTable2204及びCProjectTaskRow2206は、CProjectWebPageDBInterface2208を介してデータベースからタスク情報を取得する。一実施例では、ProjectScheduleWebPageGenerator2200パッケージの上記クラスはPHPスクリプトで実現される。
【0094】
テーブル(表)3は、プロジェクトスケジュールエディタ202(図2A)のドキュメントオブジェクトモデル表現を示す。テーブル3は、プロジェクトスケジュールエディタ202を構築する要素(element)と、対応する要素名及びid属性とを説明している。各要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、プロジェクトスケジュールエディタ202中の要素各々について、要素は、図20のProjectScheduleJavaScriptProcessor2000パッケージのクラスの1つの中に包含される。要素はクラスの属性(attribute)である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表3】

【0095】
表4は、図20に示されるProjScheduleJavaScriptProcessor2000パッケージのクラスCTaskCell2008の属性メンバを示す。CTaskCell2008は、包含する全ての要素の属性値を取得及び設定する。
【表4】

【0096】
<タスク割当プロセッサパッケージ>
図23乃至26は、図13のTaskAssignmentProcessorパッケージに対応する、タスク割当エディタ102(図1A)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタからのポスト情報1404及びディスプレイエディタ1402の4パッケージに対応するクラス図を示す。XXXPHPプロセッサ1408(図14)パッケージは、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図6)のエディタの初期表示のコードを生成する。XXXJabaScriptProcessor1410(図14)パッケージは、クライアントプロセッサ602(図6)でエディタを表示、管理及び維持する。PostXXXPHPProcessor1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函する。XXXWebPageGenerator1416(図14)パッケージは、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、3つのエディタの間で4つのパッケージの設計が類似していることを示す。エディタ各々は異なるタスクを実行するが、それらは全て同様な設計パターンに従っている。
【0097】
図23は、(図14のXXXPHPプロセッサ1408のような)TaskAssignmentPHPProcessor(タスク割当PHPプロセッサ)2300パッケージのクラス図を示す。TaskAssignmentPHPProcessorパッケージ2300はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図6)のウェブブラウザで初期のタスク割当エディタ102を表示する。
【0098】
CTaskAssignmentManager(Cタスク割当マネジャ)2302クラスはTaskAssignmentPHPProcessorパッケージ2300のインターフェースを提供し、パッケージ内の全クラスを管理してジャバスクリプトを生成する。CTaskAssignmentInitialData2304クラスは、タスク割当エディタ102(図1A)の初期データを設定するジャバスクリプトを生成する。初期データは、プロジェクトスケジュールに追加可能であってメンバに割当可能なプロジェクトタスクである。CTaskAssignmentTaskRowData(Cタスク割当タスク行データ)2306クラスは、プロジェクトタスクの行を、メンバのタスク及びそのタスクに割り当てられていたメンバと共に表示するジャバスクリプトを生成し、そのタスクは、前のエディタセッションで割り当てられていたものである。CTaskAssignmentJavaScriptInterface(Cタスク割当ジャバスクリプトインターフェース)2310クラスは一連のジャバスクリプトを生成し、その一連のジャバスクリプトは、ウェブブラウザの初期エディタを生成し、TaskAssignmentJavaScriptProcessor(タスク割当ジャバスクリプトプロセッサ)2400とのインターフェース機能をもたらす。CTaskAssignmentEditorDBInterface(Cタスク割当エディタDBインターフェース)2308は、エディタに表示されるデータベース中の情報にアクセスする。CTaskAssignmentEditorDBInterface2208は、表示する所望の情報を得るための適切な問い合わせ信号を生成する。CTaskAssignmentEditorDBInteerface2308は、データベースにアクセスする際CScheduleDB2314とのインターフェース機能を果たす。CTaskAssignmentInitialData2304及びCTaskAssignmentTaskRowData2306は、CTaskAssignmentEditorDBInterface2308を介してデータベースからタスク情報を取得する。一実施例では、TaskAssignmentPHPProcessor2300パッケージの上記のクラスはPHPスクリプトで実現される。
【0099】
図24は、(図14のPostXXXJavaScriptProcessor1410のような)TaskAssignmentJavaScriptProcessor(タスク割当ジャバスクリプトプロセッサ)パッケージ2400のクラス図を示す。TaskAssignmentJavaScriptProcessor2400パッケージは、ブラウザのタスク割当エディタ102(図1A)を管理する。CTaskAssignmentEditorManage(Cタスク割当エディタマネジャ)2402クラスは、このパッケージのインターフェースを提供し、タスク割当エディタ102用のフォーム及びウェブページを生成する。CTaskAssignmentTable(Cタスク割当テーブル)2404クラスは、タスク割当エディタ102のテーブルを生成、初期化及び管理し、そのテーブルに影響を及ぼす全てのイベントを管理する。CTaskAssignmentTable2404は、テーブルの行を生成及び管理する。CTaskAssignmentRow(Cタスク割当行)2406クラスは、タスク割当エディタ102のテーブルの行を初期化及び管理し、その行に及ぶ全てのイベントを管理し、行内のセルを作成及び管理する。CTaskCell(Cタスクセル)2408クラスは、行中のタスクセルを初期化及び管理する。CAssignmentCell(C割当セル)2410クラスは、行の割当セルをを初期化及び管理する。一実施例では、TaskAssignmentJavaScriptProcessor2400パッケージの構造及び上記クラスは、ジャバスクリプトで実現される。
【0100】
図25は、(図14のPostXXXPHPProcessor1414のような)PostTaskAssignmentPHPProcessor(ポストタスク割当PHPプロセッサ)2500パッケージのクラス図を示す。CTaskAssignmentManager(Cタスク割当マネジャ)2502クラスは、そのパッケージのインターフェースを提供し、パッケージ中の他の全てのクラスを管理する。CTaskAssignmentManager2502は、タスク割当エディタ202(図1A)から各タスクで実行する動作を決定する。CTaskAssignmentUpdater(Cタスク割当更新)2504クラスは、データベース中のプロジェクトタスクの割当を更新する。更新は、プロジェクトタスクの割当を追加又は廃止することを含む。情報を取得し及びデータベースの情報を更新するために、CPostTaskAssignmentDBInterface(Cポストタスク割当DBインターフェース)2508クラスはそのクラスのインターフェースを提供する。CPostTaskAssignmentDBQueryGenerator(Cポストタスク割当DBクエリジェネレータ)2506クラスは、CPostTaskAssignmentDBInterface2508のSQLデータベース問い合わせ信号を生成する。CPostTaskAssignmentDBInterface2508は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)2510とのインターフェース機能を果たす。CTaskAssignmentUpdater2504はCPostTaskAssignmentDBInterface2508を介してデータベースのタスク情報を更新する。一実施例では、PostTaskAssignmentPHPProcessor2500パッケージの上記クラスはPHPスクリプトで実現される。
【0101】
図26は、(図14のXXXWebPageProcessor1416のような)TaskAssignmentWebPageGenerator(タスク割当ウェブページジェネレータ)2600パッケージのクラス図を示す。CTaskAssignmentWebPageManager(Cタスク割当ウェブページマネジャ)2602クラスは、このパッケージのインターフェース機能を提供し、タスク割当のウェブページを生成する。CTaskAssignmentTable(Cタスク割当テーブル)2604は、タスク割当のウェブページのテーブルを生成する。データベースの情報を取得するために、CTaskAssignmentWebPageGeneratorDBInterface(Cタスク割当ウェブページジェネレータDBインターフェース)2606クラスは、クラスのインターフェースを提供する。CTaskAssignmentWebPageGeneratorDBInterface2606は、所望の情報を取得するための適切な問い合わせ信号を生成する。CTaskAssignmentWebPageGeneratorDBInterface2606は、データベースにアクセスする際にCScheduleDB(CスケジュールDB)2608とのインターフェース機能を果たす。CTaskAssignmentTable2604は、CTaskAssignmentWebPageGeneratorDBInterface2606を介してデータベースからタスク情報を取得する。一実施例では、TaskAssignmentWebPageGenerator2600パッケージの上記クラスはPHPスクリプトで実現される。
【0102】
テーブル(表)5は、タスク割当エディタ102(図1A)のドキュメントオブジェクトモデル表現を示す。テーブル5は、タスク割当エディタ102を構築する要素と、対応する要素名及びid属性とを説明している。各要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、タスク割当エディタ102中の要素各々について、要素は、図24のTaskAssignmentJavaScriptProcessor2400パッケージのクラスの1つの中に包含される。要素はクラスの属性である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表5】

【0103】
以下の表6は、図24に示されるTaskAssignmentJavaScriptProcessorパッケージのクラスCTaskCell2408の属性メンバを示す。CTaskCell2408は、包含する要素全ての値を取得及び設定で得きる。
【表6】

【0104】
メンバスケジュールエディタ302(図3A)、プロジェクトスケジュールエディタ202(図2A)及びタスク割当エディタ(図1A)各々についてのPHPProcessor、JavaScriptProcessor、PostPHPProcessor及びWebPageGeneratorを説明している図15〜26から分かるように、各エディタの設計は同様なパターンに従っている。従って、システムに加えられる新たな如何なるエディタも、同様な設計パターンに従うようにできる。
【0105】
テーブル(表)7は、本願で説明されるオブジェクト指向スケジューリングシステムのソフトウエア設計仕様の見出しを示し、設計の類似性を示す。表7は、パッケージ及びパッケージ内のクラスを列挙し、3つのエディタ設計の類似性を示す。
【表7】

【0106】
<プレースホルダ文字列と共に一定の文字列からデータベースクエリを生成すること>
図27は、データベースの問い合せを行うのに使用される一定の文字列例を示す。2種類の一定の文字列が使用される。「一定の問い合わせ文字列(Constant query string)」は、プレースホルダ文字列を伴う問い合わせ文字列全体を含み、プレースホルダ文字列は所与の問合の値で置換される。一定の問い合わせ文字列は全体的な問い合わせを示し、プレースホルダ文字列は問い合わせの中に置く必要のある値が何であるかを示す。「プレースホルダ文字列のコンスタント(constant)」は、探索(サーチ)の際に使用され、実際の値を伴う一定のクエリ文字列においてプレースホルダ文字列を置換するのに使用される。問い合わせにおけるプレースホルダ文字列は、問い合わせの結果を制限する制約を適用する。図27に示される例は、PHPスクリプトに対応するが、本発明は如何なる言語にも使用可能である。
【0107】
プレースホルダ文字列を有する一定の問い合わせ文字列を利用することは、一連の文字列の連結により文字列を構築することを上回る改善をもたらし、一連の文字列の連結を読み取り及び理解することは困難である。データベースにアクセスするパッケージのクラス図各々はパッケージコンスタントを含み、パッケージコンスタントは図15,17,18,19,21,22,23,25及び26に示されるようにパッケージ内で使用される。一定の問い合わせ文字列はパッケージ内で規定され、それらが発見しやすいようにする。一定の文字列問い合わせの別の利点は、ナビキャットMySQL(Navicat MySQL)のようなデータベースツールでそれらを検査できることである。一定の問い合わせ文字列は、値で置換されたプレースホルダと共にそのようなツールにコピー可能であり、問い合わせ文字列が有効な文字列であるか否かを確認できる。
【0108】
図28は、図27の一定の文字列からデータベースクエリを生成するのに使用されるスクリプト例を示す。図28に示される例はPHPスクリプトに対応するが、シーケンスを実現するのに如何なる言語が使用されてもよい。この例は、スクリプトの文各々が実行された後の問い合わせ文字列の値を示す。第1ステートメントを実行する場合、一定の文字列は、文字列変数 $loc_sQuery に割り当てられる。変数 $loc_sQuery は、データベース問い合わせに使用される問い合わせを含む。第2,第3及び第4ステートメントを実行する場合、“%%ProjectNumbber%%”,“%%MemberLabel%%”及び“%%ProjectTaskID%%”のプレースホルダ文字列は、それぞれ“J17”,“T1”,“40”の値で置換される。第4ステップの実行は、結果の問い合わせ文字列を示す。この例では、プロジェクト番号、番号ラベル及びプロジェクトタスクidのような簡単な値でプレースホルダを置換している。そのエディタと共に行うセッションを通じて不変のプロジェクト番号や番号ラベルのように、プレースホルダと置き換わるいくつかの値は静的であってよい。例示の問い合わせは、指定されたプロジェクト番号、番号ラベル及びプロジェクトタスクidにより、データベースのテーブルの記録に制限される。
【0109】
図29は、一定の文字列から問い合わせ文字列を生成するプロセスを示すフローチャートを示す。ブロック2902において、一定の問い合わせ文字列が変数文字列(variable string)に割り当てられる。変数文字列は、一定の文字列の値を不変にしつつ、プレースホルダを値で置換することを可能にするのに必要である。ブロック2904では、変数文字列が何らかのプレースホルダ文字列を含んでいるか否かを確認するため、変数文字列が検査される。変数文字列が、別の如何なるプレースホルダ文字列も含んでいなかった場合、その問い合わせ文字列は当初の一定の問い合わせ文字列に相当し、プロセスはブロック2906で終了する。変数文字列が更なるプレースホルダ文字列を含んでいた場合、ブロック2908において、変数文字列中のプレースホルダは値で置換される。ブロック2908における置換の後、制御フローはブロック2904に戻り、変数文字列が何らかの別のプレースホルダ文字列を含んでいるか否かを確認する。全てのプレースホルダ文字列の変数が値で置換されると、問い合わせ文字列が生成され、データベースに問い合わせる準備を行う。データベースに問い合わせがなされると、データベースは結果を生成し、その結果は、要求者に回答可能であり、他のプロセスに提供可能であり或いは用途に応じて適切に処理可能なものである。
【0110】
CXXXDBInterfaceクラス(例えば、図17のCPostDBInterface1706及び図18のCWebPageDBInterface1808クラス)及びCYYYDBQueryGeneratorクラス(例えば、図17のCPostDBQueryGenerator1708クラス及び図18のCWebPageDBQueryGenerator1810)は、問い合わせを生成して使用する。場合によっては、CXXXDBInterfaceクラスはプライベート関数を含み、プライベート関数は、エディタを介してユーザから取得した及びデータベースから取得した定数及び値により、問い合わせ文字列を生成する。具体例は図15のCEditorDBInterface1510である。多くの場合、CXXXDBInterfaceクラスはCYYYDBQueryGeneratorクラスのパブリック関数を使用して、問い合わせ文字列を生成する。具体例は、図17のCPostDBInterface1706及びCPostDBQueryGenerator1708である。
【0111】
<エディタウェブページ構成要素>
図30は、(例えば、メンバスケジュールエディタ302、プロジェクト計画エディタ202及びタスク割当エディタ101等の)エディタ用ウェブページの構成要素を示す。ウェブページは、ウェブサーバのようなサーバプロセッサ604(図6)に保存されたファイルである。ウェブページは、ジャバスクリプト構成要素及びPHP構成要素を含む。ジャバスクリプト構成要素は、エディタで生じるイベントを処理するジャバスクリプト機能を有する。ジャバスクリプト構成要素は他のジャバスクリプトファイルを含み、そのファイルは、エディタの表示、管理及び維持のためのクラス、ユーティリティ及び定数に関連する。ウェブページのPHP構成要素は、ジャバスクリプトコードの生成を開始させるPHPスクリプトを含み、データベースから得たタスク割当/スケジュール情報をエディタで表示する。PHP構成要素はクラス、ユーティリティ及び定数に対応するPHPスクリプトと共にファイルを含み、データベースからタスク割当/スケジュール情報を取得し及びエディタのジャバスクリプトコードを生成する。
【0112】
ウェブブラウザがエディタウェブページを要求するように、ウェブページがクライアントプロセッサ602(図6)で要求されると、ウェブページのPHP構成要素のみがサーバプロセッサ604で処理される。例えば、ウェブサーバ507,530(図5)のようなウェブサーバでPHPスクリプトが実行される。PHPスクリプトは、データベース中のタスク割当/スケジュール情報にアクセスし及びそれを取得する。PHPスクリプトは、タスク情報を保存してジャバスクリプトに与えるための構造をジャバスクリプトコードで生成する。PHPスクリプトは、エディタを生成、管理及び維持するジャバスクリプトクラスのオブジェクトを生成するジャバスクリプトコードを生成し、オブジェクトのメンバ関数を呼び出し、タスク情報と共にエディタの初期表示を作成する。ウェブページがクライアントプロセッサ602に与えられる際、PHPスクリプトで生成されたジャバスクリプトコードがエディタのウェブページに加えられる。PHPコードは、クライアントプロセッサに与えられるので、ウェブページ内には無いであろう。クライアントプロセッサはウェブページ内のジャバスクリプトコード全てを実行し、初期エディタを表示し、ユーザがエディタと共にやりとりする際に、エディタを管理及び維持する。PHPスクリプトは、クライアントプロセッサ602に与えられないが、サーバ側のコードである。
【0113】
図31は、ウェブページ中の要素を処理するプロセッサと共に、(例えば、メンバスケジュールエディタ302、プロジェクトスケジュールエディタ202及びタスク割当エディタ102のような)エディタ用のウェブページの構成要素を示す。PHPプロセッサはサーバ側にあり、ジャバスクリプトプロセッサはクライアント側にある。サーバ側のPHPプロセッサはPHP要素を実行し、クライアント側のジャバスクリプトプロセッサで実行されるジャバスクリプトコードを生成する。
【0114】
<クライアントサーバー形式のプロジェクト計画システムでプロジェクト計画を管理する方法>
図32は、クライアントサーバー形式のプロジェクト計画管理システムと共にプロジェクト計画を管理する方法例を示すフローチャートを示す。図32に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する1つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図35のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【0115】
ブロック3202では、クライアントサーバー形式のプロジェクトスケジュールシステムに関連するエディタを表示する要求に応答して、サーバは、データベース中の第1のスケジュール関連情報にアクセスする。例えば、タスク割当エディタ102(図1A)、メンバスケジュールエディタ302(図3A)又はプロジェクトスケジュールエディタ202(図2A)の何れかを要求するため、クライアントプロセッサ602(図6)におけるユーザはユーザインターフェースとやりとりを行う。その要求に応答して、サーバプロセッサ604(図6)はデータベース中のデータにアクセスし、例えばデータベース506(図5)内のデータ508及び/又はデータベース538(図5)内のデータ536にアクセスする。サーバプロセッサ604はPHPスクリプトコードを実行し、データベースから適切なデータを抽出し、要求しているユーザ及び対応するプロジェクトについて具体的に要求されたエディタに入力する。サーバがデータベースから抽出したデータは、ユーザが要求したエディタに特有であり、且つユーザid及びプロジェクトidのような要求に関連してユーザにより入力された様々な情報に特有である。あるエディタについての要求に応じてサーバがデータベースから抽出するデータは、初期情報を含み(もしあれば)、要求されたエディタのフィールドを埋める。
【0116】
ブロック3204では、要求しているクライアントによる実行に備えて、サーバは、クライアントの実行可能なコードを生成する。サーバで生成されるクライアントの実行可能なコードは、要求のエディタをクライアントで表示すること、抽出した情報をエディタの適切なフィールドで表示すること、及びクライアントでエディタを管理することに関する。例えば、サーバプロセッサ604(図6)はPHPスクリプトコードを実行し、抽出したデータを、クライアントプロセッサ602(図6)が実行可能なフォーマットに変換する。例えば、クライアントプロセッサ602がサーバのスクリプトコードを理解しない場合、サーバは抽出した情報をクライアントが理解及び使用できるフォーマットに処理する必要があり、例えばクライアントプロセッサ602で実行可能なジャバスクリプトコードで情報をラッピング(wrapping)する。burokku 3206では、クライアントの実行可能なコード及び第1のスケジュール関連情報を、実行に備えてサーバはクライアントに与える。
【0117】
付録A,C,Eはエディタ各々のコードリスト例を示し、コードリスト例は<script>タグで示されたジャバスクリプト及び<?php and?>タグで囲まれたPHPスクリプトを示す。エディタページは、ウェブサーバ507,530(図5)のようなサーバプロセッサ604に保存される。ウェブブラウザのようなクライアントプロセッサ602がエディタページにアクセスする場合、PHPスクリプトがサーバプロセッサ604で実行され、PHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトコードで置換される。PHPスクリプトで生成されたものを含む全てのジャバスクリプトコードは、実行に備えてクライアントプロセッサ602に与えられる。
【0118】
ブロック3208では、クライアントの実行可能なコード又はそのようなコードの少なくとも一部分をクライアントが実行し、要求されたエディタで第1のスケジュール関連情報を表示し、概してデータ及びエディタを管理する。こうして、クライアント及びサーバプロセッサ各々に関する上記の処理に基づいて、要求されたエディタの初期表示が完了する。
【0119】
サーバにより生成されたクライアントの実行可能なコード(例えば、ジャバスクリプト)を実行することで、エディタページがクライアント側にロードされると、ユーザはエディタと共に編集及び/又は情報の追加を開始できる。そしてブロック3210では、クライアントはエディタを通じてユーザから第2のスケジュール関連情報を受信する。例えば、特定のエディタに依存して、タスク割当情報、メンバスケジュール情報又はプロジェクトスケジュール情報を、クライアントプロセッサ602は、エディタを介して入力を行うユーザから受信する。
【0120】
ブロック3212では、クライアントはクライアントの実行可能なコードの少なくとも一部を実行し、クライアント側のエディタで第2のスケジュール関連情報を管理及び/又は維持する。例えば、コードを実行することで、新規の又は更新されたデータをサーバに提示する前にそのようなデータをクライアントで維持するデータ構造及び関連性を用意し、(例えば、HTMLボタン、テキスト入力オブジェクト等)エディタページオブジェクトに組み込まれる機能を用意する。
【0121】
ブロック3214では、クライアントはエディタからサーバへ第2のスケジュール関連情報を渡す。そしてブロック3216において、サーバは第2のスケジュール関連情報をデータベースに保存し、データベース中のその情報には以後アクセス可能であり、要求に応じてクライアントに返すことができる。例えば、スケジュール関連情報は、(例えば、図1A,2A,3Aのような)エディタのページ各々のリクエストに応答して或いは(図1B,2B,3Bのような)エディタ各々に関連するウェブページのリクエストに応答して、サーバからクライアントに与えられてもよい。
【0122】
<ネットワーク形式のプロジェクト計画システムでデータベースクエリを自動的に生成する方法>
図33は、ネットワーク形式のプロジェクト計画管理システムでデータベースクエリを自動的に生成する方法例を示すフローチャートである。図33に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する1つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図35のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【0123】
ブロック3302では、ネットワーク形式のプロジェクトスケジュールシステムの特定のエディタに関するリクエストに応答して、その特定のエディタに関連する特定の問い合わせ文字列が用意される。問い合わせ文字列は、「一定の問い合わせ文字列」とも言及され(図27〜29)、1つ以上のプレースホルダ文字列を含む。プレースホルダ文字列の置換物として渡される値に備えて、プレースホルダ文字列は、一定の問い合わせ文字列の中でプレースホルダとして機能する。例えばデータベース506及び/又はデータベース536のようなデータベースに提示するため、各プレースホルダ文字列はプレースホルダ文字列が置き換わる値のタイプを特定する。「値のタイプ」は、データタイプではなく、変数名に関連し、その変数名は対応するプレースホルダ文字列を置換するのに使用される値に対応する。図27,28を参照するに、例えば、プレースホルダ文字列‘%%ProjectNumber%%’はプロジェクト番号に関する値(例えば、“J17”)で置換され;プレースホルダ文字列‘%%MemberLabel%%’はプロジェクト番号のラベルに関する値(例えば、“T1”)で置換され;プレースホルダ文字列‘%%ProjectTaskID%%’はプロジェクトタスクのidに関する値(例えば、“40”)で置換され;これらが図面に示されている。C_ProjectNumberKey、C_MemberLabelKey及びC_ProjectTaskIDKeyのようなプレースホルダ文字列の定数が文字列関数(例えば、PHPの場合、str_replace())で使用され、一定の問い合わせ文字列中のプレースホルダ文字列を発見し、そのプレースホルダ文字列を適切な値で置換する。
【0124】
ブロック3304では、特定の問い合わせ文字列中の1つ以上のプレースホルダ文字列を関連する値で自動的に置換することで、データベース問い合わせ信号(データベースクエリ)が生成される。例えばプレースホルダ文字列‘%%ProjectNumber%%’は“J17”で置換され;プレースホルダ文字列‘%%MemberLabel%%’は“T1”で置換され;プレースホルダ文字列‘%%ProjectTaskID%%’は“40”で置換される。
【0125】
図27を参照しながら説明したように、一実施例では、「プレースホルダ文字列の定数(コンスタント)」を使用して、何らかのプレースホルダ文字列の「一定の問い合わせ文字列」を探し、プレースホルダ文字列を或る値で置換する。
【0126】
図29を参照しながら説明したように、一実施例では、CXXXDBInterfaceクラス及びCYYYDBQueryGeneratorクラスは、サーバプロセッサ604(図6)に関連し、これらはブロック3304でデータベースクエリを作成するのに使用され、クエリ生成プロセスは、CXXXDBInterfaceクラスのプライベート関数に基づいてもよいし、CYYYDBQueryGeneratorクラスのパブリック関数に基づいてもよい。一実施例によれば、データベースのデータにアクセスするために同様なデータベースクエリを自動的に生成するため、特定の問い合わせ文字列は、変数文字列に割り当てられ(例えば、図28の$loc_sQuery)、プレースホルダ文字列の置換を許容する一方、再利用可能な問い合わせテンプレートとして機能する前提のコンスタント問い合わせ文字列を変えない。
【0127】
ブロック3306では自動的に生成されたデータベースの問い合わせがデータベースになされ、要求に応じてデータベース問い合わせの結果がブロック3308で返される。
【0128】
<プロジェクト計画システムでタスクを管理する方法>
図34は、プロジェクト計画管理システムでタスクを管理する方法例を示すフローチャートである。図34に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する1つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図35のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【0129】
ブロック3402では、エディタの表示テーブルの行に影響を及ぼすイベントに応答して、その影響を受けた行に対応するクラスオブジェクトは、そのクラスオブジェクトの1つ以上の属性に直接的にアクセスし、その属性は、プロジェクトスケジュールシステムに関するエディタの要素に対応する。表示テーブルの各行は、プロジェクトスケジュールに関するスケジュールタスクに対応し、エディタの要素に対応する値を表示する。重要なことに、クラスオブジェクトはその属性に直接的にアクセスできる(なぜならエディタの要素はクラスオブジェクトの属性として構築されているからである)。従って、クラスオブジェクトは、影響を受けた行の影響を受けた要素について要素idを構築する必要はなく、そのような要素を取得する必要もない。
【0130】
例えば、ネットワークスケジュールエディタ302(図3A)を介して、ユーザは特定のタスクのスケジュールデータを編集する。ユーザの編集は或るイベントを含み、そのイベントはメンバのスケジュールエディタのテーブルの行に影響する。メンバスケジュールエディタのXXXJavaScriptProcessor1410(図14)のクラスのメンバ関数(例えば、図15のCMemberScheduleTaskRowData1506)は、クラスのオブジェクトの属性として、要素に直接的にアクセスし、イベントに基づいて要素の属性を適切に修正する。その要素は行内のタスクに関する情報を維持し、その情報は、エディタのセッションが完了した際、サーバプロセッサに渡すことのできるものである。
【0131】
ブロック3404では、影響を受けた行に対応するクラスオブジェクトは、イベントに基づいて、クラスオブジェクトの1つ以上の属性各々の値を直接的に処理する。その例の場合、メンバスケジュールエディタ302のXXXJavaScriptProcessor1410のCMemberScheduleTaskRowData1506クラスのオブジェクトのメンバ関数は、オブジェクトの属性値を設定し、これによりメンバスケジュールエディタ302の要素の値を処理する。
【0132】
ブロック3406では、1つ以上の属性各々についての値をクライアントはサーバに送信し、その値は、ブロック3404で処理された属性値を含む。例えば、クライアントプロセッサ602(図6)は、メンバスケジュールエディタ302のXXXJavaScriptProcessor1410を形成し、処理したデータをサーバプロセッサ604(図6)に提示する。ブロック3408では、1つ以上の属性各々に対する値を、サーバはデータベースに保存する。例えば、サーバープロセッサ604は(図5の)データベース506,536のようなデータベースにデータを保存する。エディタのセッションが終了すると、テーブルの行の中で変化したタスク又はそのタスクについて加わった情報は、データベースで更新され又は追加される。
【0133】
<設計パターン>
「設計パターン(design pattern)」は、オブジェクト指向システムで繰り返しなされる設計問題に対処する一般的な設計に関する。メンバスケジュールエディタの一般的設計は、タスク割当エディタ及びプロジェクトスケジュールエディタに適用される。図15〜18は、メンバスケジュールエディタの様々なパッケージのクラス設計例を示す。この設計は、図19〜22に示されるようにプロジェクトスケジュールエディタに、図23〜26に示されるようにタスク割当エディタに同様に使用される。各エディタの特性及び動作は異なるが、その設計パターンはシステムの全てのエディタで使用可能である。プロジェクトスケジュール管理システムに追加的なエディタが付加される場合、新たなエディタを設計及び実現する労力及び作業は、存在しているエディタの設計パターンに従うことでかなり削減できる。
【0134】
図36は、エディタに対応するシステムの3つの主要なパッケージに着目したテーブル7のインデックス部分を示す。各エディタは図14で説明されたように4つのサブパッケージ(副パッケージ)を有する。サブパッケージ各々は、それらのプロセスを実行する同様なクラス構造を有する。様々なパッケージのクラスの記述は、エディタの設計パターンを示すのに役立つ。
【0135】
CTaskAssignmentTaskRowData3602、CProjectScheduleTaskRowData3612及びCMemberScheduleTaskRowData3622のクラスは、各自のXXXPHPProcessorパッケージの一部であり、データベースからタスク情報を取得し、クライアントコードを生成し、対応するエディタの行にタスク情報を表示する。CTaskAssignmentTaskRowData3602は、プロジェクトタスク、対応するメンバタスク、及びメンバに対するメンバタスクの割当に関する情報を取得する。CTaskAssignmentTaskRowData3602は、クライアントコードを生成し、プロジェクトタスク行及びメンバタスク行を、タスク割当エディタにおけるメンバ割当と共に表示する。CProjectScheduleTaskRowData3612は、プロジェクトタスク、対応するメンバタスク、及びタスクのスケジュールに関する情報を取得する。CProjectScheduleTaskRowData3612はクライアントコードを生成し、プロジェクトスケジュールエディタで対応するメンバタスクスケジュールと共にプロジェクトタスクスケジュールの行を表示する。CMemberScheduleTaskRowData3622は、メンバタスク、全ての詳細タスク(レベル4タスクに至るまで)及びタスクのスケジュールに関する情報を取得する。CMemberScheduleTaskRowData3622は、クライアントコードを生成し、メンバスケジュールエディタにて対応する詳細タスクスケジュールと共に、メンバタスクスケジュールの行を表示する。各エディタのパッケージXXXPHPProcessorはクラスを使ってコードを生成し、情報は異なるけれども、クライアントプロセッサのエディタでタスク行を表示する。
【0136】
CTaskAssignmentTable3604、CProjectTableManager3614、及びCTableManagerとCMemberScheduleTable3624との組み合わせのクラスは、各自のXXXJavaScriptProcessorの一部であり、対応するエディタの行及びテーブルを生成、管理及び維持する。メンバスケジュールエディタは、タスク割当エディタ及びプロジェクトスケジュールエディタと比較して複雑なので(即ち、異なるレベルでタスクを追加及び削除し、実際の日付を設定し、下位のタスクスケジュールを上位のタスクスケジュールと共に更新している)、2つのクラスを使ってテーブル及び行を管理する。エディタのテーブルに現れうるタイプのイベント及びテーブルの要素は異なるが、パッケージの設計で1つ以上のクラスで全て表現可能である。XXXJavaScriptProcessorパッケージは、テーブル、行及びセルのようなエディタの様々な部分に対応するクラスを含む。
【0137】
CTaskAssignmentUpdater3606、CProjectTaskUpdater3616及びCMemberTaskUpdater3626 のクラスは、PostXXXPHPProcessorパッケージ各々の一部であり、クライアントプロセッサで関連するエディタのセッションから与えられた情報と共に、データベース中のタスク情報を更新する。エディタでタスクについてなされた処理に依存して、データベース中のタスクについての情報を更新するのに適切な処理がなされる。処理タイプは様々なエディタの間で異なり、処理の詳細はクラスの設計の中で処理されるが、クラスの全体的な機能はデータベース中のタスク情報を更新することである。従って、エディタのセッションからエディタ全てのデータベースへ情報を提示するように、設計パターンは利用可能である。
【0138】
CTaskAssignmenWebPageManager3608、CProjectScheduleWebPageManager3618及びCMemberScheduleWebPageManager3628のクラスは、XXXWebPageGeneratorパッケージ各々の一部であり、そのパッケージは、タスク割当、プロジェクトスケジュール及びメンバスケジュールのそれぞれについてウェブページを生成するクラスを管理する。CTaskAssignmenWebPageManager3608は様々なクラスを使って、プロジェクトタスク及びメンバタスクを示すテーブルと共にウェブページを作成し、メンバタスクは、タスクに割り当てられたメンバ及びタスクの履歴を示す。
【0139】
CProjectScheduleWebPageManager3618は様々なクラスを使ってテーブルと共にウェブページを生成し、そのテーブルは、スケジュールの履歴と共にプロジェクトタスクスケジュール及びそのメンバのタスクスケジュールを示す。CMemberScheduleWebPageManager3628は、様々なクラスを使って、テーブルと共にウェブページを生成し、そのテーブルは、スケジュールの履歴に沿って詳細タスクと共にタスクスケジュールを示す。様々な情報を含むウェブページを生成する全てのエディタで同じ設計パターンが使用されている。
【0140】
CTaskAssignmenWebPageGeneratorDBInterface3610、CProjectWebPageDBInterfaceとCProjetWebPageDBQueryGenerator3620との組み合わせ、及びCWebPageDBInterfaceとCWebPageDBQueryGenerator3630との組み合わせのクラスは、データベースと共にインターフェースを処理するXXXWebPageGeneratorパッケージ各々の一部であり、タスク割当、プロジェクトスケジュール及びメンバスケジュール各々について、ウェブページを生成するのに必要なタスク情報にアクセスする。エディタに関する各クラス及びクラスの組み合わせは、データベースに問い合わせを行い、その問い合わせに応じて情報を取得するデータベースインターフェースを表現する。
【0141】
図36のパッケージのクラスの説明では、メンバスケジュールエディタのクラスは、他のエディタと同様なクラスを有する。従って、メンバスケジュールで使用された設計パターンは、他のエディタでも使用可能である。エディタのパッケージ各々は異なる動作を行うが、それでも同じ設計パターンを使用できる。
【0142】
<付録>
付録Aはプロジェクトスケジュールエディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507,530(図5)のようなサーバプロセッサ604(図6)に保存される。ウェブブラウザのようなクライアントサーバ602(図6)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【0143】
付録A
【数1】




【0144】
付録Bは付録AのPHPコードで生成されたジャバスクリプトコード例を示す。ジャバスクリプトコードはウェブページ中のPHPコードを置換する。ジャバスクリプトコードは、データベースから取得したタスクスケジューリング情報を含む。処理するジャバスクリプトに情報を渡すため、タスク情報がデータ構造に割り当てられる(例えば、var glo_ProjectTaskInfo = new SProjectTaskInfo() and glo_ProjectTaskInfo.xxx = “value”)。また、ジャバスクリプトコードが生成され、オブジェクトを生成し、オブジェクトのメンバ関数を呼び出し、プロジェクトスケジュールエディタの初期表示を用意する(例えば、var glo_EditorManager = new CProjectEditorManager, glo_EditorManager.setup_createEditor(“J99”), and glo_EditorManager.setup_addTaskToEditor(glo_ProjectTaskInfo))。
【0145】
付録B
【数2】



【0146】
タスク割当エディタ(付録C及びD)及びメンバスケジュールエディタ(付録E及びF)は、エディタを生成するウェブページに関し、プロジェクトスケジュールエディタに関する付録A及びBに示されるものと同様なフォーマットに従う。
【0147】
付録Cはタスク割当エディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507,530(図5)のようなサーバプロセッサ604(図6)に保存される。ウェブブラウザのようなクライアントサーバ602(図6)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【0148】
付録C
【数3】



【0149】
付録Dは付録CのPHPコードで生成されたジャバスクリプトコード例を示す。ジャバスクリプトコードはウェブページ中のPHPコードを置換する。ジャバスクリプトコードは、データベースから取得したタスクスケジューリング情報を含む。タスク情報は、処理するジャバスクリプトに渡される。また、ジャバスクリプトコードが生成され、オブジェクトを生成し、オブジェクトのメンバ関数を呼び出し、タスク割当エディタの初期表示を用意する(例えば、var glo_EditorManager = new CTaskAssignmentEditorManager(), glo_EditorManager.setup_createEditor(“J99”), and glo_EditorManager.setup_addTopLevelTaskToEditor(“10”,”Project Preparation”) )。
【0150】
付録D
【数4】

【0151】
付録Eはメンバスケジュールエディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507,530(図5)のようなサーバプロセッサ604(図6)に保存される。ウェブブラウザのようなクライアントサーバ602(図6)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【0152】
付録E
【数5】




【0153】
付録Fは付録EのPHPコードで生成されたジャバスクリプトコード例を示す。ジャバスクリプトコードはウェブページ中のPHPコードを置換する。ジャバスクリプトコードは、データベースから取得したタスクスケジューリング情報を含む。処理するジャバスクリプトに情報を渡すため、タスク情報がデータ構造に割り当てられる(例えば、var glo_MemberTaskInfo = SMemberTaskInfo() and glo_MemberTaskInfo.xxx = “value”)。また、ジャバスクリプトコードが生成され、オブジェクトを生成し、オブジェクトのメンバ関数を呼び出し、メンバスケジュールエディタの初期表示を用意する(例えば、var glo_EditorManager = new CEditorManager(), glo_EditorManager.setup_createEditor(“J99”,“test1”), and glo_EditorManager.setup_addTaskToEditor(glo_MemerTaskInfo))。
【0154】
付録F
【数6】


【0155】
<クライアントブラウザウインドウで実行するインタープリタ型スクリプトコードの適切な終了>
スクリプトコードは、Jscript及びECMAScriptのようなジャバスクリプトその他のスクリプト言語でプログラムされる。ネットスケープ(Netscape)で当初規定されるジャバスクリプトは、ウェブブラウザ拡張要素でオンザフライ(on-the-fly)で処理されるインタープリタ型言語である。様々なオープンソースのジャバスクリプトバージョンが、幅広く利用可能である。本実施例は、ネットスケープで規定されるようなジャバスクリプトに限定されず、或いはその用語が当初の狭義に使用されているようには限定されない。従って、本願で使用されているように、ジャバスクリプトという用語は、如何なるスクリプト型プログラミング言語にも広く関連し、ネットスケープによるジャバスクリプトだけでなく、JScript、ECMAScript等も含まれる。
【0156】
一実施例では、ウェブブラウザイネーブルクライアントは、ウェブサーバからのプロジェクトタスクエディタ用ウェブページを要求する。ウェブサーバはHTMLウェブページを返し、HTMLウェブページは、ウェブページと共に含まれている又はウェブサーバで生成された組込ジャバスクリプトを含み、ウェブサーバは、ジャバスクリプトがクライアントにより実行された場合に、タスク情報を含むタスクエディタを表示する。ウェブページは、クラス、グローバル関数(global function)及びコンスタント(constant)に関するジャバスクリプトコードを含み、それらは、タスクエディタを生成、管理及び維持するためにウェブイネーブルクライアントで使用される。ジャバスクリプトコードは、ウェブページと共に包含され、或いはウェブサーバによりウェブページで生成される。ウェブイネーブルクライアントがエディタのウェブページを受信すると、タスクエディタの初期表示に備えて、クライアントプロセッサはウェブサーバにより生成されたジャバスクリプトコードを実行する。
【0157】
ジャバスクリプトコードは、ウェブページに含まれるクラスに対応するオブジェクトを生成し、タスクエディタを表示及び管理するグローバル関数を呼び出しながらクラスのメンバ関数を呼び出す。ジャバスクリプトコードの実行中に生じた異常状態に対処するため、ジャバスクリプトコードは、ジャバスクリプトTry及びCatchブロックステートメントのTryブロックで囲まれる。
【0158】
ジャバスクリプトコードに例外処理ハンドラ(例えば、グローバル関数)を投入しながらTry及びCatchブロックステートメント(Try and Catch Block Statement)を使用して異常状態に対処することは、ウェブブラウザイネーブルクライアントで実行するジャバスクリプトコードの適切な終了(graceful termination)を可能にする。ウェブブラウザイネーブルクライアントでタスクエディタを生成、管理及び実行する際に異常状態に対処する可能な他の方法は、エディタのセッションに関するメッセージを表示するウェブページへ、グローバル関数をリダイレクトする(グローバル関数の出力を変更する)ことを含む。グローバル関数は、異常状態の場所を示すメッセージを表示するデバッグの目的に有益であり、そのメッセージは、グローバル関数を呼び出した関数名、クラス、行番号及び/又はファイル名を含んでもよい。ジャバスクリプトは、診断の目的に合わせて、グローバル関数が呼び出された場所を特定するように修正されてもよい。
【0159】
図5は、プロジェクト管理システムを実現するクライアントサーバ動作環境例を示す。動作環境例は、複数のワークステーション、1つ以上のウェブサーバ及び1つ以上の関連するデータベースを有し、それらは全て直接的に又は間接的にソフトウエア開発ネットワークと通信するように接続されている。
【0160】
概して、ウェブサーバ507,530はエディタを表示及び管理するためのリソースを有する。ウェブサーバ507,530はデータベース506,536とそれぞれやりとりを行い、タスク割当及びタスクスケジュール情報(例えば、データ508,538)を保存、維持及び管理する。説明の便宜上、2つのウェブサーバ及び2つのデータベースが図5に描かれているが、他の実施例は、ウェブサーバ及びデータベースを幾つ使用してもよい。即ち、本願で説明されるプロジェクト計画管理システムで使用されるウェブページ数及びデータベース数は、実現手段毎に異なってよい。コンピュータワークステーション501,502のウェブブラウザは、ウェブサーバ507,530のリソースにアクセスし、エディタを表示する。プロジェクトメンバ又はプロジェクト管理者は、ネットワーク500を介してエディタにアクセスでき、ネットワークはLAN又はWANを含む如何なるデータ通信ネットワークを形成してもよい。プロジェクト管理システムは、組織内の様々なレベルで(例えば、プロジェクト、課、部及び組織等の区分け毎に)プロジェクトを管理するように利用できる。
【0161】
ワークステーション501,502は、1つ以上のブラウザと共に構築されたコンピュータシステムであり、例えば、製品開発プロジェクトに関連するタスクを完了するために技術者/開発者により使用される。プロジェクトは如何なる種類のタスクを含んでもよい。そのようなタスクに関する具体例は、プロジェクトを開始すること、タスク計画を立てること、タスク計画を管理すること、ソフトウエアアーキテクチャを設計すること、仕様を決めること、ソフトウエアコードを作成すること、ソフトウエアコードを実現及び検査すること、様々なタスク成果を検査すること等を含む。更に、プロジェクト管理者は、ワークステーション501,502を使って情報にアクセスし、プロジェクトの進捗を再検討及び管理する。開発者及び管理者は、ネットワーク500を介して、接続された他の要素(例えば、ウェブサーバ507,530;データベース506,536;携帯用装置520及びラップトップ522)へ、アクセスポイント524を通じて情報を送る。
【0162】
ワークステーション501,502、携帯装置520及びラップトップ522は、ウェブサーバ507,530からウェブページにアクセスでき、ウェブページが含むジャバスクリプトを処理し、タスクエディタを管理し及びブラウザに含まれる他のアプリケーションを管理できる。ブラウザはブラウザ拡張要素(browser add-in component)を使用してジャバスクリプトを処理する。ブラウザ拡張要素の具体例は、アクティブXコントロール(ActiveX Control)、ブラウザ拡張要素及び/又はブラウザ支援オブジェクト(browser helper object)を含む。多くのブラウザ構成の場合、ジャバスクリプト拡張要素が用意され、ワークステーション501,502各々にインストールされたウェブブラウザが、ウェブサーバ507,530から受信したジャバスクリプトを処理できるようにする。
【0163】
ウェブサーバ507,530は、コンピュータハードウエア及びソフトウエアの組み合わせと共にプロトコルを利用して構築され、プロトコルは、ハイパーテキストトランスファープロトコル[HTTP]及び伝送制御プロトコル/インターネットプロトコル[TCP/IP]等である。ウェブサーバ507,530は、(例えば、ハイパーテキストマークアップ言語[HTML]又は拡張マークアップ言語[XML]ファイル等の)ウェブページを作成するファイルをユーザ(例えば、ワークステーション501,502における開発者又は管理者)に提供する。例えば、PHP、VBasicScript又はRubyスクリプトを実行するモジュールを含むアパッチ(Apache)ウェブサーバが、ウェブサーバ507,530用のウェブアプリケーションとして使用されてもよい。C,C++,C#,Java,CORBA,PERL,AWK又はVisual Basic等のような非スクリプト言語が使用されてもよい。
【0164】
一実施例では、通信及び管理される情報は、ウェブサーバ507,530によりネットワーク500を介して提供される。データベース506,536は通常の如何なるリレーショナルデータベース言語でプログラムされてもよく、例えば、ORACLE,SQLサーバ(Sequel Server),MySQL,SQL,MS ACCESS,DB2,MS FOXBASE,DBASE,PostgreSQL及びPBASE等であるがこれらに限定されない。
【0165】
本願で説明されるプログラミング技法の更なる形態がウェブサーバ507,530で実現及び実行されてもよいが、これらの技法はそのような実施形態に限定されない。本技法は、ワークステーション501,502のような又は図35のコンピュータシステムのような他の如何なる処理システムで実現されてもよい。
【0166】
データベース506,536は、開発プロジェクトに関するデータ508,538を保存する一般的なデータベースを示し、ネットワーク500を介して伝送される問合(クエリ)を利用して、ワークステーション501,502における権限のある者は情報にアクセスする。データベース506,536には如何なるタイプのデータが保存されてもよい。例えば、プロジェクト開始フォーム、メンバ及びプロジェクトタスク計画、仕様、ソフトウエアコード、検査報告、ウェブページファイル、ドキュメントディレクトリ及びインデックス等である。
【0167】
ネットワーク500はパケット交換ネットワークを形成し、(ワークステーション501,502、ウェブサーバ507,530及びデータベース506,536等のような)接続された様々な要素間での情報交換を促す。ネットワーク500は、イーサーネット、高速イーサーネット、トークンリング等のようなローカルエリアネットワーク(LAN)でもよいし、IEEE標準規格802.11a及び802.11bで規定されている無線LAN等でもよい。ネットワーク500は、仮想プライベートネットワーク(VPN)により遠隔ユーザとの通信を促す1つ以上のインターネット網を介する広域ネットワーク(WAN)でもよいし、或いはネットワーク500はLAN及びWANの組み合わせでもよい。更に、ネットワーク500は多種多様な媒体を使って形成されてよく、例えば電気的なワイヤやケーブル、光学的な又は無線の接続でもよいが、これらに限定されない。
【0168】
図37は、異常状態に備えてウェブイネーブルクライアントから受信した情報及びサーバ側コードをサーバが評価する様子を示す。図37の方法では、異常状態の際、ウェブサーバ507はウェブイネーブルクライアント501から受信した情報及びサーバ側コードを評価する。一実施例では、ウェブイネーブルクライアント501,502の1つにおけるユーザが、ウェブイネーブルクライアント501を介して、プロジェクト管理システムに関連するウェブページ3705にアクセスする。一般に、ウェブページへのアクセスはユーザによりなされ、そのユーザは、ウェブサーバ507のプロジェクト管理システムに割り当てられたユニバーサルリソースロケータ(URL)を、クライアントのウェブブラウザに指図する。ユーザは、プロジェクト管理システムのURLで発見され表示されたログインページとやりとりを行い、ログインリクエストを生成する(処理3710)。
【0169】
一実施例では、ウェブサーバ507はジャバスクリプトを含む1つ以上のログインフォームを生成し(処理3715)、そのログインフォームは要求しているクライアント501のウェブブラウザに送られる(処理3720)。ジャバスクリプトコードは、フォームを含むウェブページと共に含まれていてもよいし、ウェブサーバにより生成されてもよい。ユーザはログインフォームの処理を終了し(処理3725)、アクセスの承認を得るため、ログインフォームはウェブサーバ507に提出される(処理3730)。プロジェクト管理システムへのアクセスが認められると、ウェブサーバ507は、タスクエディタに関する1つ以上のフォームを生成し、要求を行っているウェブイネーブルクライアント501へそれを送信する(処理3740)。
【0170】
ウェブサーバは、ウェブサーバの生成したジャバスクリプトコードと共にジャバスクリプトコードを含むHTMLウェブページを通知し、そのジャバスクリプトコードはタスクエディタを表示する際にクライアント側のウェブブラウザで実行される。ウェブサーバは、タスクエディタで入力された情報と共にプロジェクト管理システムデータベース508,536を更新し、タスク情報のウェブページを作成する。ウェブサーバ507,530で実行されるプログラミング言語はPHPスクリプトとすることができるが、Perl又はRubyのようなウェブサーバにより実行可能な如何なる言語が使用されてもよい。ウェブサーバコードの実行は一般的には2つのメインウェブページで行われ;1つは、クライアント側のウェブブラウザでタスクエディタを生成及び表示するためのものであり、他の1つは、クライアント側のウェブブラウザから受信したタスクエディタのセッション情報を提出するためのものである。
【0171】
以後のどの時点においても、ウェブサーバ507で実行するコードに異常状態が確認された場合(処理3760)、クライアント側のウェブブラウザ501に送信されるジャバスクリプト終了信号(termination JavaScript)を生成するグローバル関数が呼び出され(処理3770)、サーバーコードの実行は止められる(処理3765)。
【0172】
一実施例では、異常状態に遭遇したウェブサーバに関するウェブブラウザのウインドウは消され(クリアされ)、或る情報がウインドウに表示され、その情報は、異常状態を引き起こした不具合をデバッグするのに有用な情報を含む。例えば、グローバル関数を呼び出した関数の名前、クラス、行番号及び/又はファイル名等が表示される。
【0173】
異常状態が発見されなかった場合、ウェブブラウザで生成されたジャバスクリプトコードを含むタスクエディタフォームのウェブページが、ウェブブラウザのクライアントに送付され(処理3740)、タスクエディタのセッションを確立する。同様に、以後のどの時点においても、クライアント501のウェブブラウザは、異常状態に備えて、ウェブサーバ507から受信したジャバスクリプトを評価する。
【0174】
処理3775における異常状態は、ウェブサーバ507との現在のタスクエディタのセッションをクライアントのウェブブラウザが終了することを引き起こし(処理3780)、クライアント側ブラウザウインドウに現在表示されているウェブページをクリアし、クライアント側ブラウザウインドウに或るウェブページを表示し、そのウェブページは、タスクエディタセッションが異常状態により終了したことをユーザに通知する。
【0175】
タスクエディタのスクリプトが異常状態に遭遇せずに実行される場合、ユーザは、受信したフォームにタスクエディタ情報を入力し(処理3745)、そのフォームをウェブサーバ507に提出する(処理3750)。再びウェブサーバ507は、ウェブイネーブルクライアントから受信した情報を確認し、サーバーコードを実行し、異常状態が起こってないことを保証する。ウェブサーバ507でもクライアント501でも異常状態が一切生じなかった場合、処理は普通に終了する。
【0176】
クライアント側ブラウザで実行されるジャバスクリプトコードを生成し、ウェブサーバでPHPコードの実行を終了するようにPHPで書かれたグローバル関数例は、以下のテーブル(表)1に示されている。
【0177】
テーブル1−実行を終了するグローバル関数例(付録G)
PHPコードリスト−サーバ及びクライアントプロセッサにおける適切な終了のためのグローバル関数。
【数7】



このコードはジャバスクリプトコードを書き出すものであり、そのジャバスクリプトコードは、PHPの実行を止める前に、ブラウザウインドウをクリアし、ブラウザにメッセージを表示する。
【0178】
様々なPHPコードモジュールで異常状態が生じているか否かを確認するためのPHPコード例は、テーブル2に示されている。
【0179】
テーブル2−異常状態を確認するためのPHPコード例(付録H)
PHPコードリスト−様々なクラスの関数によりグローバル関数fglo_abnormalEnd()を利用すること。
【0180】
リスト1−予測されていない入力値、オブジェクト生成の失敗、アクセスの失敗、無効なデータ等は全て終了に至る。関数は、デバッグメッセージの利用を示す。
【数8】



【0181】
リスト2−オブジェクト生成の失敗及びプロセスの失敗は全て終了に至る。
【数9】


【0182】
リスト3−プロセスの失敗は終了に至る。
【数10】

【0183】
リスト4−無効なデータ及びオブジェクト生成の失敗は全て終了に至る。
【数11】

【0184】
図38は、異常状態を確認した場合にクライアント側のスクリプトを生成するウェブサーバプロセスを示す。
【0185】
ウェブイネーブルクライアントからリクエストが受信されると、ステップ3800においてウェブサーバによる処理が始まる。ステップ3805では、ウェブサーバによりサーバコードが実行される。ウェブサーバ用のコードを実行する間、ステップ3810において、異常状態のための検査がコード内の様々な箇所で実行される。異常状態の具体例は、予想された値、存在しなければならないオブジェクトの属性メンバ、生成されなければならないオブジェクト等に対応しない関数への入力を含むが、これらに限定されない。
【0186】
遭遇した異常状態は、ウェブサーバでコードを適切に実行することを妨げる。異常状態がステップ3810で確認されると、グローバル関数が呼び出され、グローバル関数は、クライアント側ブラウザに与えられるジャバスクリプトをステップ3820で生成する。
【0187】
実施例はデバッグモード及びプロダクション(作成)モードを含み、現在のモードに応じて異なる処理を実行してもよい。一実施例では、ステップ3822において、サーバがデバッグモードで動作しているか否かを判定する検査が実行される。デバッグモードでなかった場合、ステップ3824において、ジャバスクリプトコードが作成及び送付され、表示ウインドウを消し、「エディタセッションは失敗しました」のような一般的なエラーメッセージを表示する。クライアント側ブラウザに与えられたジャバスクリプトが実行されると、クライアント側ブラウザで現在表示されているウインドウは消去され、そのウインドウはエラーメッセージを表示し、エラーメッセージは、タスクエディタセッションが異常に終了したことをユーザに通知する。サーバがデバッグモードで動作していた場合、ステップ3825において、ジャバスクリプトはメッセージを表示させ、デバッグで使用する可能性のある異常状態に関する詳細情報を提供する。クライアント側ジャバスクリプトがウェブサーバにより生成されると、サーバ側コードの実行は終了し(ステップ3830)、ウェブサーバにおける異常終了プロセスは終了する(ステップ3835)。
【0188】
或いは、ステップ3810で異常状態が生じなかった場合、ウェブサーバにおける全てのコードが実行を完了するまで、ウェブサーバコードの実行が続き(ステップ3815)、ウェブサーバにおける通常の終了プロセスに至る(ステップ3835)。
【0189】
一実施例では、ステップ3825において、デバッグに備えて、異常状態の場所を示すメッセージを取得及び表示するように、グローバル関数がプログラムされ、そのメッセージは、異常終了グローバル関数を呼び出した関数の名称、クラス、コード行番号及び/又はファイル名を含んでもよい。
【0190】
<ハードウエア概要>
図35は、本発明の実施例を使用することができるコンピュータシステム3500を示すブロック図である。 <実現手段>
図35は本発明の実施例で使用されるコンピュータシステム3500のブロック図を示す。更に、コンピュータシステム3500は、ワークステーション102(図1)及びウェブサーバ104(図1)の非限定的なシステム例を示す。 コンピュータシステム3500は、情報を通信するためのバス3502又は他の通信手段と、バス3502に結合された情報を処理するプロセッサ3504とを有する。コンピュータシステム3500は、ランダムアクセスメモリ(RAM)又は他のダイナミックストレージデバイスのようなバス3502に結合されたメインメモリ3506を有し、メインメモリはプロセッサ3504で実行される命令や情報を格納する。メインメモリ3506は、プロセッサ3504で実行される命令の実行中に、一時的な変数又は他の中間的な情報を格納するのに使用されてもよい。コンピュータシステム3500は、バス3502に結合されたリードオンリメモリ(ROM)又は他のスタティックストレージデバイスを更に含み、それらはプロセッサ3504のための命令や静的な情報を格納する。磁気ディスク、光ディスク又は光磁気ディスクのようなストレージデバイス3510は、情報及び命令を格納するために用意されてバス3502に結合される。
【0191】
コンピュータシステム3500は、コンピュータユーザに情報を表示するために、陰極線管(CRT)又は液晶ディスプレイ(LCD)のようなディスプレイ3512にバス3502を介して結合されてもよい。英数字その他のキーを含む入力装置3514は、情報及び命令選択内容をプロセッサ3504に通知するためにバス3502に結合される。他の種類のユーザ入力装置は、カーソル制御装置3516(例えば、マウス、トラックボール、又はカーソル方向キー)であり、指示情報及び命令選択をプロセッサ3504に通知し且つディスプレイ3512でのカーソルの動きを制御する。この入力装置は典型的には第1軸(例えば、x)及び第2軸(例えば、y)の2軸による2つの自由度を有し、装置が平面上の位置を指定できるようにする。
【0192】
本発明の実施例は、説明された技法を実現するコンピュータシステム3500を利用することに関連する。本発明の一実施例によれば、メインメモリ3506に含まれる1以上の命令の1以上のシーケンスを実行するプロセッサ3504に応じて、本技法はコンピュータシステム3500により実行される。そのような命令は、ストレージデバイス3510のような他のコンピュータ読取可能な媒体からメインメモリ3506に読み込まれてもよい。メインメモリ3506に含まれている命令シーケンスの実行は、本願で説明されるプロセスステップをプロセッサ3504が実行することを引き起こす。代替実施例では、本発明を実施するために、ハードワイヤード回路が、代替的に使用されてもよいし或いはソフトウエア命令との組み合わせで使用されてもよい。すなわち本発明の実施例はハードウエア回路及びソフトウエアの特定の如何なる組み合わせにも限定されない。
【0193】
ここで使用されているように「コンピュータ読取可能な媒体」なる用語は、命令をプロセッサ3504の実行に備えて提供することに関与する如何なる媒体にも関連する。そのような媒体は多くの形態をとってよく、限定ではないが、不揮発性媒体、揮発性媒体及び伝送媒体を含む。不揮発性媒体の具体例は、例えば、ストレージデバイス3510のような光磁気ディスクを含む。揮発性媒体は、メインメモリ3506のようなダイナミックメモリを含む。伝送媒体は、同軸ケーブル、銅線及び光ファイバを含み、バス3502を構成するワイヤを含む。伝送媒体は、無線電波及び赤外線データ通信の際に生成されるもののような、音波又は光波の形式をとってもよい。
【0194】
コンピュータ読取可能な媒体の一般的な形態は、フロッピディスク、フレキシブルディスク、ハードディスク、磁気テープその他の如何なる磁気媒体;CD-ROM、DVDその他の如何なる光媒体又は光磁気媒体;パンチカード、紙テープ又は穴のパターンを有する他の如何なる物理的媒体;RAM、PROM、EPROM、フラッシュEPROMその他のメモリチップ又はカートリッジ、上記のような搬送波又はコンピュータが読み取ることの可能な他の如何なる媒体をも含む。
【0195】
コンピュータ読取可能な様々な形態は、1以上の命令の1以上のシーケンスをプロセッサ3504の実行に備えて搬送する際にも適用可能である。例えば命令は初期には遠く離れたリモートコンピュータの磁気ディスクで搬送されてもよい。リモートコンピュータは自身のダイナミックメモリに命令をロードし、モデムを用いて電話回線を介して命令を送信してもよい。コンピュータシステム3500付近のモデムは電話回線でそのデータを受信し、赤外線送信機を用いてそのデータを赤外線信号に変換する。赤外線検出器は、赤外線信号で搬送されたデータを受信し、適切な回路がそのデータをバス3502に置く。バス3502はデータをメインメモリ3506に運び、プロセッサ3504はメインメモリから命令を抽出して実行する。メインメモリ3506で受信された命令は、プロセッサ3504で実行される前又は後にストレージデバイス3510に選択的に格納されてもよい。
【0196】
コンピュータシステム3500はバス3502に結合された通信インターフェース3518も含む。通信インターフェース3518は、ローカルネットワーク3522に接続されたネットワークリンク3520に結合する双方向データ通信をもたらす。例えば、通信インターフェース3518は、データ通信接続を対応するタイプの電話回線に与える統合サービスディジタルネットワーク(ISDN)カード又はモデムでもよい。別の例では、通信インターフェース3518は、データ通信接続をコンパチブルなLANに与えるローカルエリアネットワーク(LAN)カードでもよい。無線リンクが使用されてもよい。どの実現手段でも、通信インターフェース3518は、電気的な、電磁的な又は光学的な信号を送信及び受信し、様々なタイプの情報を表現するディジタルデータストリームを運ぶ。
【0197】
ネットワークリンク3520は典型的には1以上のネットワークを介して他のデータ装置とのデータ通信をもたらす。例えば、ネットワークリンク3520はローカルネットワーク3522を介してホストコンピュータ3524とのコネクションを提供する、或いはインターネットサービスプロバイダ(ISP)3526により運営されるデータ機器とのコネクションを提供する。そしてISP3526はデータ通信サービスをワールドワイドパケットデータ通信ネットワーク(今日、インターネット3528として一般に言及されている)を介して提供する。ローカルネットワーク3522及びインターネット3528の双方は、ディジタルデータストリームを搬送する、電気的な、電磁的な又は光学的な信号を使用する。様々なネットワークを介する信号や、ネットワークリンク3520及び通信インターフェース3518を介する信号は、コンピュータシステム3500に及びそこからディジタルデータを搬送し、例えば情報を伝送する搬送波の形式をとってもよい。
【0198】
コンピュータシステム3500は、ネットワーク、ネットワークリンク3520及び通信インターフェース3518を介して、メッセージを送信し及びプログラムコードを含むデータを受信する。インターネットの例では、サーバー3530はインターネット3528、ISP3526、ローカルネットワーク3522及び通信インターフェース3518を介して、アプリケーションプログラムに関する要求されたコードを送信するかもしれない。
【0199】
プロセッサ3504は受信したコードを受信したときに実行してもよいし、後の実行に備えてストレージデバイス3510又は他の不揮発性ストレージに格納してもよい。このようにコンピュータシステム3500は搬送波の形式でアプリケーションコードを取得してもよい。
【0200】
<拡張及び代替>
以上の記述により本願実施例が説明され、当業者は実施例を十分に理解するであろう。更に本発明は特定の実施例に関連して説明されてきた。しかしながら本発明の広範な概念から逸脱せずに、実施例に様々な修正及び変更がなされてもよいことは明らかであろう。従って本明細書及び図面は、限定的な意味ではなく例示として解釈されなければならない。
【0201】
更に、本説明では或るプロセスステップが特定の順序で説明され、アルファベット及び英数ラベルがステップを識別するために使用されたかもしれない。本説明において特に断りのない限り、実施例は、そのようなステップを実行する何らかの特定の順序に限定される必要はない。特に、ラベルは、ステップの便宜的な区別に使用されているに過ぎず、そのようなステップを実行する特定の順序を指定又は必須とするように意図されてはいない。
【0202】
本願で説明される様々な実施例の機能の実現は、ハードウエア、ソフトウエア、ファームウエア及び/又は他の利用可能な機能要素又は構築ブロックで等価的に実現可能である。特定の装置やプログラミングシーケンスに特に限定されるようには決して意図されていない。上記の教示に照らせば、他の変形例及び実施例が可能である。
【先行技術文献】
【特許文献】
【0203】
【特許文献1】米国特許第7,191,141号明細書
【符号の説明】
【0204】
102 タスク割当エディタ
104 タスク割当ウェブページ
202 プロジェクト計画エディタ
204 プロジェクト計画ウェブページ
302 メンバスケジュールエディタ
304 メンバスケジュールウェブページ
500 ネットワーク
501,502 ワークステーション
507,530 ウェブサーバ
506,536 データベース
508,538 データ
524 アクセスポイント
601 ユーザインターフェース
602 クライアントプロセッサ
604 サーバプロセッサ
606 データベース
3500 コンピュータシステム
3502 バス
3504 プロセッサ
3506 メインメモリ
3508 リードオンリメモリ
3510 ストレージデバイス
3512 ディスプレイ
3514 入力装置
3516 カーソル制御部
3518 通信インターフェース
3520 ネットワークリンク
3522 ローカルネットワーク
3524 ホスト
3526 インターネットサービスプロバイダ
3528 インターネット
3530 サーバ


【特許請求の範囲】
【請求項1】
プロジェクト管理システムに関連するウェブサーバでプログラム命令を実行するステップと、
前記プログラム命令の実行中に、異常状態に遭遇したか否かを、前記ウェブサーバの例外ハンドラを用いて確認するステップと、
前記ウェブサーバで異常状態に遭遇していた場合、前記ウェブサーバで該異常状態に遭遇していることをブラウザイネーブルクライアントが確認するためのブラウザ実行可能コードを生成するステップと、
前記ブラウザ実行可能コードを前記ブラウザイネーブルクライアントに送信するステップと、
前記ウェブサーバでの前記プログラムコードの実行を終了するステップと、
を有する、コンピュータで実行する方法。
【請求項2】
前記ブラウザ実行可能コードは、固有の言語構造を有しないプログラム言語でプログラムされ、該言語で書かれたプログラムの終了を引き起こす、請求項1記載の方法。
【請求項3】
前記ウェブサーバがデバッグモードで動作しているか否かを検査するステップと、
前記ウェブサーバがデバッグモードで動作しているのを検出したことに応じて、或るコードを用いて前記ブラウザ実行可能コードを生成するステップと、
を更に有し、前記或るコードは、実行された場合に、前記異常状態を引き起こしたサーバ側コードを特定する情報をブラウザウインドウに表示する、請求項1記載の方法。
【請求項4】
ウェブサーバとネットワーク通信を行うウェブブラウザを有するデータ処理システムであって、前記ウェブサーバは、
プロセッサと、
該プロセッサに結合されたメモリと、
を有し、前記メモリは、前記プロセッサに或る方法を実行させる命令を含み、
前記方法は、
プロジェクト管理システムに関連するウェブサーバでプログラム命令を実行するステップと、
前記プログラム命令の実行中に、異常状態に遭遇したか否かを、前記ウェブサーバの例外ハンドラを用いて確認するステップと、
前記ウェブサーバで異常状態に遭遇していた場合、前記ウェブサーバで該異常状態に遭遇していることをブラウザイネーブルクライアントが確認するためのブラウザ実行可能コードを生成するステップと、
前記ブラウザ実行可能コードを前記ブラウザイネーブルクライアントに送信するステップと、
前記ウェブサーバでの前記プログラムコードの実行を終了するステップと、
を有する、データ処理システム。
【請求項5】
前記ブラウザ実行可能コードは、固有の言語構造を有しないプログラム言語でプログラムされ、該言語で書かれたプログラムの終了を引き起こす、請求項4記載のデータ処理システム。
【請求項6】
前記ウェブサーバがデバッグモードで動作しているか否かを検査するステップと、
前記ウェブサーバがデバッグモードで動作しているのを検出したことに応じて、或るコードを用いて前記ブラウザ実行可能コードを生成するステップと、
を前記方法が更に有し、前記或るコードは、実行された場合に、前記異常状態を引き起こしたサーバ側コードを特定する情報をブラウザウインドウに表示する、請求項4記載のデータ処理システム。
【請求項7】
前記例外ハンドラを呼び出した関数、クラス、コード行番号及びファイル名の内の1つ以上を前記情報が指定する、請求項6記載のデータ処理システム。
【請求項8】
生成されたブラウザ実行可能コードが、ジャバスクリプトコードでプログラムされている、請求項4記載のデータ処理システム。
【請求項9】
前記例外ハンドラは、PHPでプログラムされたグローバル関数である、請求項4記載のデータ処理システム。
【請求項10】
前記グローバル関数は、前記異常状態を特定し、前記ウェブサーバに結合されたディスプレイに出力する、請求項9記載のデータ処理システム。
【請求項11】
前記異常状態は、前記グローバル関数を呼び出した関数、クラス、コード行番号及びファイル名の内の1つで特定される、請求項9記載のデータ処理システム。
【請求項12】
1つ以上の命令のシーケンスを有するコンピュータ読取可能な媒体であって、前記命令は実行されると1つ以上のプロセッサに或る方法を実行させ、該或る方法は、
プロジェクト管理システムに関連するウェブサーバでプログラム命令を実行するステップと、
前記プログラム命令の実行中に、異常状態に遭遇したか否かを、前記ウェブサーバの例外ハンドラを用いて確認するステップと、
前記ウェブサーバで異常状態に遭遇していた場合、前記ウェブサーバで該異常状態に遭遇していることをブラウザイネーブルクライアントが確認するためのブラウザ実行可能コードを生成するステップと、
前記ブラウザ実行可能コードを前記ブラウザイネーブルクライアントに送信するステップと、
前記ウェブサーバでの前記プログラムコードの実行を終了するステップと、
を有する、コンピュータ読取可能な媒体。

【図1A】
image rotate

【図1B】
image rotate

【図2A】
image rotate

【図2B】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図36A】
image rotate

【図36B】
image rotate

【図37】
image rotate

【図38】
image rotate


【公開番号】特開2009−223888(P2009−223888A)
【公開日】平成21年10月1日(2009.10.1)
【国際特許分類】
【出願番号】特願2009−38659(P2009−38659)
【出願日】平成21年2月20日(2009.2.20)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】