(57)【特許請求の範囲】
【請求項１】
ウェブイネーブルクライアントが実行する処理方法であって、
ブラウザの実行可能なジャバスクリプトで表現されたコードをウェブサーバから受信し、前記ブラウザのウインドウでタスクエディタに関連するユーザ入力フォームを少なくとも表示するステップと、
受信した前記コードの少なくとも一部を例外ハンドラ内で実行するステップと、
前記例外ハンドラにおいて、トライブロックステートメントにより前記ジャバスクリプトの各ラインを評価することで、異常状態に遭遇したか否かを確認し、異常状態に遭遇した場合、第１のグローバル関数を呼び出すことで前記ジャバスクリプトの実行を止め、キャッチブロックステートメントにより前記ジャバスクリプトのうち異常状態であるラインを発見し、第２のグローバル関数を呼び出すことで、表示されている前記ブラウザのウインドウをクリアし、第３のグローバル関数を呼び出すことで、前記ウェブイネーブルクライアントの前記ブラウザのウインドウでエラーメッセージを表示するステップと
を有する処理方法。  
【請求項２】
ウェブイネーブルクライアントとネットワーク通信を行うウェブサーバを有するデータ処理システムであって、前記ウェブイネーブルクライアントは、
プロセッサと、
前記プロセッサに結合されたメモリと
を有し、前記メモリは前記プロセッサに処理方法を実行させる命令を有し、
該処理方法は、
ブラウザの実行可能なジャバスクリプトで表現されたコードをウェブサーバから受信し、前記ブラウザのウインドウでタスクエディタに関連するユーザ入力フォームを少なくとも表示するステップと、
受信した前記コードの少なくとも一部を例外ハンドラ内で実行するステップと、
前記例外ハンドラにおいて、トライブロックステートメントにより前記ジャバスクリプトの各ラインを評価することで、異常状態に遭遇したか否かを確認し、異常状態に遭遇した場合、第１のグローバル関数を呼び出すことで前記ジャバスクリプトの実行を止め、キャッチブロックステートメントにより前記ジャバスクリプトのうち異常状態であるラインを発見し、第２のグローバル関数を呼び出すことで、表示されている前記ブラウザのウインドウをクリアし、第３のグローバル関数を呼び出すことで、前記ウェブイネーブルクライアントの前記ブラウザのウインドウでエラーメッセージを表示するステップと
を有する、データ処理システム。
【請求項３】
表示される前記エラーメッセージは、前記異常状態に関する診断情報を示す請求項２記載のデータ処理システム。
【請求項４】
表示される前記エラーメッセージは、タスクエディタが不具合を有することを示す、請求項２記載のデータ処理システム。
【請求項５】
コンピュータ読取可能な記憶媒体に格納され、実行時にウェブイネーブルクライアントに処理方法を実行させるコンピュータプログラムであって、該処理方法は、
ブラウザの実行可能なジャバスクリプトで表現されたコードをウェブサーバから受信し、前記ブラウザのウインドウでタスクエディタに関連するユーザ入力フォームを少なくとも表示するステップと、
受信した前記コードの少なくとも一部を例外ハンドラ内で実行するステップと、
前記例外ハンドラにおいて、トライブロックステートメントにより前記ジャバスクリプトの各ラインを評価することで、異常状態に遭遇したか否かを確認し、異常状態に遭遇した場合、第１のグローバル関数を呼び出すことで前記ジャバスクリプトの実行を止め、キャッチブロックステートメントにより前記ジャバスクリプトのうち異常状態であるラインを発見し、第２のグローバル関数を呼び出すことで、表示されている前記ブラウザのウインドウをクリアし、第３のグローバル関数を呼び出すことで、前記ウェブイネーブルクライアントの前記ブラウザのウインドウでエラーメッセージを表示するステップと
を有する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は一般にプロジェクト管理に関連する。更に本願は、異常状態に遭遇した場合に、クライアント側のウェブブラウザスクリプトがプロジェクトタスクエディタを実行することを止めることに関連する。
【背景技術】
【０００２】
ウェブプログラミング言語は、オブジェクト指向型のスクリプト言語をもたらし、しばしばクライアント側のウェブアプリケーションの開発に使用される。言語の具体例はジャバスクリプトである。スクリプト言語は、ネットワーク上で対話式に実行可能なウェブアプリケーションをプログラマが作成できるようにする。スクリプト言語を使って開発されたウェブアプリケーションは、ダイナミックなHTMLページを許容し、そのHTMLページは、ユーザ入力を処理し、特別なオブジェクト及びファイルを使う永続的なデータを維持し、リレーショナルデータベースとやりとりを行うことができる。ジャバスクリプト又は等価的なオープンソースのスクリプト言語は、概してHTMLの改善と考えられ、一般的には静的な文字や画像を表示することに限られる。ジャバスクリプトのようなスクリプト言語を利用する利点は、動的なウェブページの設計及び実現が簡単になることである。
【０００３】
ジャバスクリプト又は同等なスクリプト言語を用いて開発された大規模な対話式ウェブアプリケーションを使用する際の欠点の１つは、ウェブサーバと情報をやりとりするようプログラムされていた場合、クライアントウェブブラウザをデバッグするのが困難なことである。例えば、ウェブブラウザで不適切に動作している又は不具合のあるアプリケーションは、ウェブブラウザイネーブルクライアントで検出されないかもしれない。ある一般的な状況では、ウェブブラウザで実行するクライアントスクリプトは、ウェブブラウザの機能状態が悪化している又は被害を被っていることをユーザに一切通知せずに、単にウェブページを表示し続けるかもしれない。
【０００４】
別の更に深刻な状況の場合、スクリプトを用いたアプリケーションがアクティブのままであり、エラーのあるオブジェクト及びデータを生成し続けてしまう(オブジェクト及びデータは、ウェブサーバによる抽出及び消去を待機しながらローカルにキャッシュされている。)。誤りが蓄積したオブジェクト及びデータは、クライアントのローカルリソースが消尽するまで又はクライアントが停止するまで有効なオブジェクトやデータを上書きしてしまい、入力データの喪失を招き、おそらくは、クライアントに保存された他のオブジェクト及びデータも被害を受ける。
【０００５】
ウェブブラウザの機能状態を確認できないことは、異常状態に遭遇した際に終了するように(サーバ側スクリプト及びコンパイル言語で利用可能であるように)規定されたジャバスクリプトステートメント又はファンクションが欠如していることに起因する。例えば、PHPはdie()及びexit()ステートメントを含み、C++のようなコンパイル言語は適切に(gracefully)終了するためにabend()及び他のステートメントを有する。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、ウェブサーバが異常状態に遭遇した際、クライアント側ウェブブラウザで動作している動的なウェブページの処理をウェブサーバが終了できるようにすることである。
【課題を解決するための手段】
【０００７】
一実施例は、クライアント側のウェブスクリプト言語を使用するプログラミングに適用され、或る手段をもたらし、その手段は、ウェブブラウザが異常状態に遭遇した場合、ウェブイネーブルクライアントが、動的なウェブページの処理を終了できるようにする。一実施例の場合、ジャバスクリプト又は等価なオープンソーススクリプト言語に追加するものが用意される。一実施例では、ウェブイネーブルクライアントは、ウェブサーバからブラウザ実行可能コードを受け取る。その実行可能コードは或る情報を含み、その情報は、クライアントのブラウザウインドウでプロジェクト管理システムに関するタスクエディタのウェブページを表示するためのものである。受け取ったコードの一部が例外ハンドラで実行され、異常状態に遭遇しているか否かを判定する。異常状態に遭遇していた場合、例外ハンドラは１つ以上のグローバル関数を呼び出し、クライアント側のブラウザが実行可能なコードの実行を適切に止め、現在表示されているブラウザウインドウをクリアし、そのブラウザウインドウにエラーメッセージを表示する。
【０００８】
一実施例では、受け取ったブラウザ実行可能コードの少なくとも一部分は、ジャバスクリプトを使ってプログラムされている。
【０００９】
一実施例では、例外ハンドラは、１つ以上のジャバスクリプトのトライ及びキャッチブロックステートメント(JavaScript  try  and  catch  block  statement)を含む。
【００１０】
一実施例の場合、表示されるエラーメッセージは、異常状態に関する診断情報を提供する。
【００１１】
一実施例の場合、表示されるエラーメッセージは、タスクエディタが不具合を有することをクライアントのユーザに通知する。
【図面の簡単な説明】
【００１２】
【図１Ａ】タスク割り当てエディタの画面例を示す図。
【図１Ｂ】タスク割り当てウェブページのサンプルを示す画面例を示す図。
【図２Ａ】プロジェクト計画エディタの画面例を示す図。
【図２Ｂ】プロジェクト計画ウェブページのサンプルを示す画面例を示す図。
【図３Ａ】メンバスケジュールエディタの画面例を示す図。
【図３Ｂ】メンバのスケジュールウェブページのサンプルを示す画面例を示す図。
【図４】プロジェクトメンバが何れかのエディタ(タスク割り当て、プロジェクト計画、メンバのスケジュール)にログオンするためのログインウェブページの画面例を示す図。
【図５】本発明の実施例が使用されてよい動作環境を示す図。
【図６】(自動スケジューリングシステムのソフトウエア構成要素を含む)本発明の実施例が使用されてよい通信アーキテクチャを示す図。
【図７】システムのクライアントプロセッサ及びサーバプロセッサ間のインターフェースを示す図。
【図８】プロジェクトメンバ又は管理者がログインウェブページを使って何れかのエディタにログオンする際のシーケンス図。
【図９】プロジェクト管理者がタスク割り当てエディタと共に行うセッション例のシーケンス図。
【図１０】プロジェクト管理者がプロジェクト計画エディタと共に行うセッション例のシーケンス図。
【図１１】プロジェクトメンバがプロジェクトメンバのスケジュールエディタ(即ち、メンバのスケジュールエディタ)と共に行うセッション例のシーケンス図。
【図１２】プロジェクト及びプロジェクトメンバのタスク割り当て及びタスクスケジュール情報を保存及び管理するのに使用されるデータベーステーブルを示す概略図。
【図１３】図６のサーバプロセッサのプログラミングパッケージ図。
【図１４】エディタプロセッサパッケージのプログラミングパッケージ図。
【図１５】MemberSchedulePHPProcessorパッケージのクラス図。
【図１６】MemberScheduleJavaScriptProcessorパッケージのクラス図。
【図１７】PostMemberSchedulePHPProcessorパッケージのクラス図。
【図１８】MemberScheduleWebPageGeneratorパッケージのクラス図。
【図１９】ProjectSchedulePHPProcessorパッケージのクラス図。
【図２０】ProjectScheduleJavaScriptProcessorパッケージのクラス図。
【図２１】PostProjectSchedulePHPProcessorパッケージのクラス図。
【図２２】ProjectScheduleWebPageGeneratorパッケージのクラス図。
【図２３】TaskAssignmentPHPProcessorパッケージのクラス図。
【図２４】TaskAssignmentJavaScriptProcessorパッケージのクラス図。
【図２５】PostTaskAssignmentPHPProcessorパッケージのクラス図。
【図２６】TaskAssignmentWebPageGeneratorパッケージのクラス図。
【図２７】データベースの問合を行うのに使用される一定の文字列例を示す図。
【図２８】図２７の一定の文字列からデータベースクエリを生成するのに使用されるスクリプト例を示す図。
【図２９】一定の文字列からクエリ文字列を生成するプロセスを示すフローチャート。
【図３０】(例えば、メンバスケジュールエディタ、プロジェクト計画エディタ及びタスク割当エディタ等の)エディタ用のウェブページの構成要素を示す図。
【図３１】エディタ用のウェブページの構成要素を示す図。
【図３２】クライアントサーバ形式のプロジェクト計画管理システムと共にプロジェクト計画を管理する方法例を示すフローチャート。
【図３３】ネットワーク形式のプロジェクト計画管理システムでデータベースクエリを自動的に生成する方法例を示すフローチャート。
【図３４】プロジェクト計画管理システムでタスクを管理する方法例を示すフローチャート。
【図３５】本発明の実施例を使用することができるコンピュータシステムを示すブロック図。
【図３６】図３６Ａ及び図３６Ｂの相互関係を示す図。
【図３６Ａ】エディタに対応するシステムの３つの主要なパッケージに着目したテーブル７のインデックス部分を示す図。
【図３６Ｂ】エディタに対応するシステムの３つの主要なパッケージに着目したテーブル７のインデックス部分を示す図。
【図３７】トライアンドキャッチステートメントが、クライアントでウェブアプリケーションを適切に終了する手段をもたらす様子を示す図。
【図３８】トライアンドキャッチステートメントを使用するウェブブラウザの処理フローチャートを示す図。
【発明を実施するための形態】
【００１３】
一実施例のプログラム技法は、クライアントブラウザウインドウで実行するインタープリタ型のスクリプトコードの適切な終了(graceful  termination)をもたらす。実施例は、クライアント−サーバ形式のプロジェクト計画タスク管理システムに関連する。しかしながら本願で説明される技法は、他のソフトウエア開発プロジェクトに広く利用可能である。以下の説明は、説明を目的として、多くの具体的詳細が本発明の十分な理解を促すために記述されている。
【実施例１】
【００１４】
＜タスク割当エディタ＞
図１Ａは、タスク割り当てエディタの画面例を示す。タスク割当エディタ102は、プロジェクトの中で達成されるべきプロジェクトタスクをユーザが生成することを支援する。組織によっては、全てのプロジェクトに共通するデフォルトプロジェクトタスクが存在し、その組織と共に実行される。プロジェクトタスクにはサブタスクが関連付けられ、サブタスクはプロジェクトメンバ(プロジェクト構成員)に割り当てられる。一般にプロジェクトマネジャ(プロジェクト管理者)は、タスクを決定し、プロジェクトメンバにタスクを割り当てる。プロジェクト管理者は、このタスク割当エディタ102を使ってプロジェクトについてプロジェクトタスクを決定し、プロジェクトタスク各々についてサブタスクを作成し、サブタスクをメンバに割り当てる。プロジェクト管理者がタスクを追加及び割り当てる一方、タスク割当に関する情報は、タスク割当エディタ102で保存及び維持される。管理者がタスク割当エディタ102とのセッションを完了すると、タスク割当情報がデータベースに伝送され、保存され、維持される。
【００１５】
タスク割当セッションの完了に応答して、例えば図１Ａのタスク割当エディタ102の「終了(Finish)」ボタンをユーザが選択したことに応答して、タスク割当ウェブページ104がウェブサーバで自動的に作成され、様々なプロジェクトメンバに割り当てられたタスクを表示する。図１Ｂは、タスク割り当てウェブページのサンプルを示す画面例である。タスク割当エディタ102を介して入力及び編集されたタスク及びタスク割当情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのタスク及びタスク割当は、１つ以上のデータベーステーブル内に格納され(好ましくは、各行が１つのタスクに対応する)、タスク割当エディタ102及びタスク割当ウェブページ104で表示される。
【００１６】
一実施例の場合、タスク割当エディタ102(図1A)は、様々な機能を実行するのに利用可能なボタンを含み、例えば、「詳細を追加(Add  Details)」、「上に行を追加(Add  Rows  Above)」、「下に行を追加(Add  Rows  Below)」、「削除(Delete)」及び「終了(Finish)」である。「終了」ボタンは編集セッションを終了し、保存及び維持されるタスク割当情報をデータベースに投稿する。他のボタンはタスクの各処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。「詳細を追加」ボタンは、プロジェクトタスク直下に行を追加し、管理者がサブタスクを追加し及び管理者がサブタスクをプロジェクトメンバに割り当てられるようにする。「上に行を追加」及び「下に行を追加」ボタンは、選択されたタスク(プロジェクトタスク又はサブタスク)に対応する行の上又は下に行を追加し、管理者がより多くのプロジェクトタスクを追加できるようにする又はより多くのサブタスクを割り当てられるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたタスクを削除し、そのプロジェクトからプロジェクトタスクを除去する、或いはプロジェクトメンバに対するサブタスクの割当を解除する。
【００１７】
＜プロジェクト計画エディタ＞
図２Ａは、プロジェクト計画エディタの画面例を示す。プロジェクト計画エディタ202は、タスク割当エディタ102(図1A)で作成されたプロジェクトタスクについて予定を立てるのに使用される。プロジェクトタスクは、プロジェクト計画エディタ202で作成されスケジューリングされてもよい。しかしながら一実施例の場合、プロジェクト計画エディタ202を用いて、サブタスクをプロジェクトメンバに割り当てるために、サブタスクをプロジェクトタスクに追加することはできない。おそらくは、プロジェクト管理者は、タスク割当エディタ102の後でプロジェクト計画エディタ202を使用するであろう。タスク割当エディタ102で追加された主なプロジェクトタスクについて、管理者はプロジェクト計画エディタ202を用いて初期のプロジェクト計画を立てることができる。プロジェクト管理者がタスクを追加及びスケジューリングしながら、プロジェクトタスクの計画に関する情報は、プロジェクト計画エディタ202に保存及び維持される。管理者がプロジェクト計画エディタのセッションを終了すると、プロジェクトタスクの計画情報はデータベースに伝送され、保存され、維持される。
【００１８】
プロジェクト計画のセッションの完了に応答して、例えば図2Aのプロジェクト計画エディタ202で「終了」ボタンユーザが選択したことに応答して、プロジェクトスケジュールウェブページ204がウェブサーバで自動的に作成され、プロジェクトの計画表を表示する。プロジェクトのサブタスクについて、プロジェクトメンバ各自の予定が立てられ及び／又は更新されると、プロジェクト計画エディタ202は、全てのサブタスクの予定と共に各プロジェクトタスクスケジュールを表示する。プロジェクト計画エディタ202は、サブタスクと、そのサブタスクに割り当てられたプロジェクトメンバとを表示する。編集セッションを終了することで、或いは図2Aのプロジェクト計画エディタ202で「統合(Consolidate)」ボタンを選択することで、プロジェクトタスク各々について全てのタスクスケジュールは、プロジェクトタスクの予定を更新するように自動的に統合又は集約され、及びプロジェクトタスクスケジュールはデータベース内で更新される。
【００１９】
図２Ｂは、プロジェクト計画ウェブページのサンプルを示す画面例を示す。プロジェクト計画ウェブページ204が作成され、サブタスク又はタスクが割り当てられているメンバと共に、プロジェクトタスク及びそのサブタスクのスケジュールを表示する。プロジェクト計画ウェブページ204は、プロジェクトタスク及びサブタスク各々の過去のスケジュール全てを示し(例えば、以前の日付の取り消し線と共に示される)、プロジェクトチームが、タスクのスケジュールに生じた変更を分かるようにする。プロジェクト計画エディタ202により入力及び編集されたプロジェクト計画情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのプロジェクトタスクの予定及びサブタスクの予定は、１つ以上のデータベースに保存され(好ましくは、行の各々が１つのタスクに対応する)、プロジェクト計画エディタ202及びプロジェクト計画ウェブページ204で表示される。
【００２０】
一実施例の場合、プロジェクト計画エディタ202(図2A)は、様々な機能を実行するのに利用可能なボタンを含み、例えば、「上に行を追加(Add  Rows  Above)」、「下に行を追加(Add  Rows  Below)」、「削除(Delete)」、「統合(Consolidate)」及び「終了(Finish)」である。「終了」及び「統合」ボタンはプロジェクト計画エディタのセッションを終了し、保存及び維持されるプロジェクトタスク計画情報をデータベースに投稿する。「統合」ボタンは、メンバのスケジュールがプロジェクトスケジュールと共に統合されることを引き起こし、データベース内でプロジェクト計画が更新されるようにする。「統合」ボタンは、更新されたタスクスケジュールと共に、プロジェクトスケジュールが、プロジェクト計画ウェブページで再表示されることを引き起こす。他のボタンはタスクの各処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。処理はプロジェクトタスクでのみ実行可能であり、メンバに割り当てられたサブタスクでは実行可能でない。「上に行を追加」及び「下に行を追加」ボタンは、選択されたプロジェクトに対応する行の上又は下に行を追加し、管理者がより多くのプロジェクトタスクを追加できるようにするようにし及びそのタスクについて予定をたてられるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたプロジェクトタスクを削除する。
【００２１】
＜メンバスケジュールエディタ＞
図３Ａは、メンバスケジュールエディタの画面例を示す。メンバスケジュールエディタ302(個別スケジュールエディタとも言及される)は、プロジェクトメンバ各人のスケジュールを作成するのに使用される。一実施例では、メンバのスケジュールが以前に作成されていなかった場合、メンバスケジュールエディタ302は未終了のタスクのみを表示する。メンバのタスクは、そのプロジェクトに関係ないタスク及び／又はプロジェクトサブタスクとすることができる。メンバは、メンバスケジュールエディタ302を介して、あるタスクについて予定を立て、予定を変更し、及び結果を更新できる。タスクの詳細な予定を立てるために、あるメンバのタスク各々は、更に下位のレベルのタスクに落とされてもよい。下位レベルのタスクを追加又は修正することは、上位レベルのタスクの予定に影響を及ぼすかもしれない。従って、「更新(Update)」ボタンが選択されると、上位レベルのタスクスケジュールは更新される。メンバがメンバスケジュールエディタ302のセッションを終了すると、タスクスケジュール情報がデータベースに伝送され、保存され、維持される。図3Aはドロップダウンリストに含まれるタスクを示す。
【００２２】
メンバスケジュールのセッションの完了に応答して、例えば図3Aのメンバスケジュールエディタ302の「終了(Finish)」ボタンをユーザが選択したことに応答して、メンバ計画ウェブページ304(図3Bの画面例では「タスクスケジュール(Task  Schedule)」と言及されている)がウェブサーバで自動的に作成され、メンバの計画表を表示する。図3Bは、メンバの計画のウェブページのサンプルを示す画面例である。メンバスケジュールエディタ302を介して入力及び編集された各自のスケジュール情報は、ウェブブラウザで表示される場合、ウェブページ形式で表示される。全てのタスクのスケジュールは、あるテーブル(表)の中で表示され、その表の各行は１つのタスクに対応する。メンバスケジュールウェブページ304は、プロジェクトタスク及びサブタスク各々の以前のスケジュールを示し(例えば、以前の日付の取り消し線と共に示される)、プロジェクトチームが、タスクのスケジュールに生じた変更を分かるようにする。
【００２３】
メンバスケジュールエディタ302の場合、様々な機能を実行するのに利用可能なボタン(「詳細を追加(Add  Details)」、「末尾に行を追加(Add  Rows  At  Bottom)」、「上に行を追加(Add  Rows  Above)」、「下に行を追加(Add  Rows  Below)」、「削除(Delete)」、「更新(Update)」及び「終了(Finish)」)がテーブル(表)の近くに設けられている。「終了」ボタンはメンバスケジュールエディタのセッションを終了し、保存及び維持されるタスクスケジュール情報をデータベースに投稿する。「更新」ボタン及び「末尾に行を追加」ボタンを除いて、他のボタンはタスクの処理を実行し、そのタスクは、タスクに対応する行のチェックボックスを選択することで選択される。「詳細を追加」ボタンは、タスク直下に行を追加し、管理者がサブタスク(１段階下位のタスク)をタスクに追加し、より詳細なタスクを与えることができるようにする。「上に行を追加」及び「下に行を追加」ボタンは、選択されたタスクに対応する行の上又は下に行を追加し、メンバが、より多くのタスクを同じレベルのスケジュールに追加できるようにする。追加される行数は、「下に行を追加」ボタン隣の「行数」メニューを選択することで設定される。「削除」ボタンは、選択されたタスクを削除する。また、「削除」ボタンは、タスク及びそのタスクより下位のレベルの全てのタスクを、メンバのスケジュールから除去する。「末尾に行を追加」ボタンは、１つ以上の最高レベルの行をスケジュールの末尾に追加し、追加される行数は、「行数」メニューを選択することで設定される。「更新」ボタンは、下位レベルのタスクスケジュールと共に全ての上位レベルタスクスケジュールを更新し、新たな日付を見せるように、メンバスケジュールエディタ302の表示を更新する。
【００２４】
タスクに関するスケジュール情報は、開始予定日及び終了予定日、並びに実際の開始日及び実際の終了日を含む。タスクに関する予定の及び実際の日付は、メンバスケジュールエディタ302で設定及び修正可能である。しかしながら、予定日だけは、タスクが始めて計画された場合に、プロジェクト計画エディタ202(図2A)でそのプロジェクトタスクについて決定される。プロジェクトタスクの予定日及び実際の日付についてのメンバスケジュール(統合された場合)に基づいて、予定日は自動的に更新され、実際の日付は自動的に設定される。図示されてはいないが、プロジェクト計画エディタ202は、予定日が変更できるように修正可能である。しかしながら、プロジェクトタスクの予定日になされる変更が何であれ、それは、プロジェクトサブタスクのメンバのスケジュールの予定日を統合することで上書きされる。プロジェクト管理者が、プロジェクトエディタのセッションを終了した場合、又はプロジェクト計画エディタ202の「統合」ボタンを適用した場合、データベースの情報は、プロジェクトタスクの実際の日付を更新するのに使用される。
【００２５】
図４は、プロジェクトメンバが何れかのエディタ(タスク割り当て、プロジェクト計画、メンバのスケジュール)にログオンするためのログインウェブページの画面例を示す。メンバは、プロジェクト番号、メンバ名を入力し、適切なエディタを選択肢、エディタにアクセスするための情報を提示する。プロジェクト管理システムは、入力を確認し、そのメンバがプロジェクトの正当なメンバであるか否か及び選択されたエディタについてのアクセス権を有するか否かを確認する。確認できなかった場合、そのメンバがエディタにアクセスすることは禁止される。より強いセキュリティを求める場合、ログインウェブページ及びエディタはセキュアHTTP(例えば、HTTPS)で用意されてもよく、そのログインページは、ログインする前にパスワードを要求してもよい。
【００２６】
＜プロジェクト計画管理システム＞
図５は、本発明の実施例が使用されてよい動作環境を示す。図示の動作環境は、本願で説明されるプロジェクト計画管理システムの全体的なシステム構成を示す。この動作環境例は、複数のワークステーション、１つ以上のウェブサーバ及び１つ以上の関連するデータベースを有し、それらは全て直接的に又は間接的にソフトウエア開発ネットワークと通信するように接続されている。
【００２７】
概して、ウェブサーバ507，530はエディタを表示及び管理するためのリソースを有する。ウェブサーバ507,530はデータベース506，536とそれぞれやりとりを行い、タスク割当及びタスクスケジュール情報(例えば、データ508，538)を保存、維持及び管理する。説明の便宜上、２つのウェブサーバ及び２つのデータベースが描かれている点に留意を要する。即ち、本願で説明されるプロジェクト計画管理システムで使用されるウェブサーバ数及びデータベース数は、実現手段毎に異なってよい。コンピュータワークステーション501，502のウェブブラウザは、ウェブサーバ507，530のリソースにアクセスし、エディタを表示する。プロジェクトメンバ又はプロジェクト管理者は、ネットワーク500(LAN又はWAN)を介してエディタにアクセスできる。プロジェクト管理システムは、組織内の様々なレベルで(例えば、プロジェクト、課、部及び組織等の区分け毎に)プロジェクトを管理するように利用できる。
【００２８】
ワークステーション501，502は、典型的には、図35のコンピュータシステムにより示されるように１つ以上のブラウザと共に構築されたコンピュータシステムであり、例えば、製品開発プロジェクトに関連するタスクを完了するために技術者／開発者により使用される。そのようなタスクに関する非限定的な具体例は、プロジェクトを開始すること、タスク計画を立てること、タスク計画を管理すること、ソフトウエアアーキテクチャを設計すること、仕様を決めること、ソフトウエアコードを作成すること、ソフトウエアコードを実現及び検査すること、様々なタスク成果を検査すること等を含む。更に、プロジェクト管理者は、ワークステーション501，502を使って情報にアクセスし、プロジェクトの進捗を再検討及び管理する。開発者及び管理者は、ネットワーク500を介して、接続された他の要素(例えば、ウェブサーバ507，530；データベース506，536；携帯用装置520及びラップトップ522)へ、アクセスポイント524を通じて情報を送る。ワークステーション501，502、携帯装置520及びラップトップ522は、ウェブサーバ507，530からウェブページにアクセスでき、ウェブページが含むジャバスクリプトを処理し、ブラウザでエディタを管理できる。ブラウザはジャバスクリプトを処理できる。
【００２９】
ウェブサーバ507，530は一般的なコンピュータハードウエア及びソフトウエアの組み合わせであるウェブサーバを表し、(例えば、ハイパーテキストトランスファープロトコル[HTTP]及び伝送制御プロトコル／インターネットプロトコル[TCP/IP]のような)適切なプロトコルを使用して、(ハイパーテキストマークアップ言語[HTML]又は拡張マークアップ言語[XML]ファイル等の)ウェブページを作成するファイルをユーザ(例えば、ワークステーション501,502における開発者又は管理者)に提供する。一般に、開発プロジェクトのライフサイクルで通信及び管理される情報の過半数は、ウェブサーバ507，530によりネットワーク500を介して提供される。更に、図示の実施形態はウェブサーバ507，530で実現及び実行されるかもしれないが、本発明の実施形態はそのような実施形態に限定されない。本技法は、ワークステーション501，502のような他の如何なる処理システムで実現されてもよいし、或いは図35に示されるような同様なコンピュータシステムで実現されてもよい。
【００３０】
データベース506，536は、開発プロジェクトに関するデータ508，538を保存する一般的なデータベースを示し、ネットワーク500を介して伝送される問合(クエリ)を利用して、ワークステーション501，502における権限のある者は情報にアクセスする。データベース506，536に保存されるデータ種別は事実上無制限であり、例えば、プロジェクト開始フォーム、メンバ及びプロジェクトタスク計画、仕様、ソフトウエアコード、検査報告、ウェブページファイル、ドキュメントディレクトリ及びインデックス等であるが、これらに限定されない。
【００３１】
ネットワーク500はパケット交換ネットワークのような通常のネットワークであり、(ワークステーション501，502、ウェブサーバ507，530及びデータベース506，536等のような)接続された様々な要素間での情報交換を促す。ネットワークは、(通常のイーサーネット、高速イーサーネット、トークンリング等のような)ローカルエリアネットワーク(LAN)や、(電気電子技術機構−IEEE−のワーキンググループで開発された)802.11a及び802.11bで規定されている無線LAN等でもよく、LANや無線LANは企業内で使用されているかもしれない。更に、ネットワーク500は、仮想プライベートネットワーク(VPN)により遠隔ユーザとの通信を促すインターネットのような広域ネットワーク(WAN)でもよいし、或いはネットワーク500はLAN及びWANの組み合わせでもよい。更に、ネットワーク500は多種多様な媒体を使って形成されてよく、例えば電気的なワイヤやケーブル、光学的な又は無線の接続でもよいが、これらに限定されない。
【００３２】
図６は、(自動スケジューリングシステムのソフトウエア構成要素を含む)本発明の実施例が使用されてよい通信アーキテクチャを示す。クライアントプロセッサ602はウェブブラウザに対応し、サーバプロセッサ604は例えば図５のウェブサーバ507，530のようなウェブサーバに対応する。プロジェクトメンバ又は管理者は、ユーザインターフェース601を通じてクライアントプロセッサ602とやりとりを行う。クライアントプロセッサ602は、ログインウェブページ(図４)及び様々なエディタウェブページ(図1A，2A，3A)を管理及び維持する。クライアントプロセッサ602は、これらのウェブページで起こる全てのイベントを処理する。一実施例では、クライアントプロセッサ602はHTTPプロトコルを通じてサーバプロセッサ604とやりとりを行う。一実施例では、クライアントプロセッサ602は、セキュアHTTPプロトコルを通じてサーバプロセッサ604とやりとりを行う。
【００３３】
ログインウェブページ(図４)及びエディタウェブページ(図1A,2A,2A)を表示するための情報を、サーバプロセッサ604はクライアントプロセッサ602に与える。クライアントプロセッサ602がこれらのページの情報を提示した場合、サーバプロセッサ604はログイン及びエディタウェブページの情報を処理する。データベース606は、プロジェクト及びタスクスケジュール情報のレポジトリ(記憶部)である。データベース中の情報を取得、追加及び更新するように、サーバプロセッサ604はデータベースとやりとりを行う。一実施例によれば、サーバプロセッサ604はデータベース606とやりとりを行う。しかしながら、他のデータベース及びプロトコルが使用されてもよい。
【００３４】
＜クライアントサーバーインターフェース＞
図７は、システムのクライアントプロセッサ及びサーバプロセッサ間のインターフェースを示す。ホーム、ログイン(図４)、プロジェクトスケジュールエディタ(図2A)、メンバスケジュールエディタ(図3A)及びタスク割当エディタ(図1A)のウェブページをサーバプロセッサ604からクライアントプロセッサ602が取得するように、HTTP/HTTPS_GETリクエストが用意されている。ログイン(図４)及びエディタウェブページ(図1A,2A,2A)に入力された情報を処理に備えてクライアントプロセッサ602がサーバプロセッサ604に提出するように、HTTP/HTTPS_POSTリクエストが用意されている。適用可能なHTTP/HTTPS_GET及びHTTP/HTTPS_POSTリクエストについては、以下で詳細に説明される。
【００３５】
HTTP/HTTPS_GET_Projetct/Dept/Divisionホームページリクエストは、部又は課にそれぞれ関連するプロジェクトホームページをサーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。そのホームページは、スケジュール、タスク割当及びログイン用の各ウェブページに接続してそれらを編集者に見せるリンク(例えば、ハイパーリンク)を含む。
【００３６】
HTTP/HTTPS_GET_current_project_directory/schedule.htmリクエストは、例えば図2Bに示される現在のプロジェクトのプロジェクト計画を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【００３７】
HTTP/HTTPS_GET_current_project_directory/tasuAssignment.htmリクエストは、例えば図1Bに示される現在のプロジェクトのタスク割当を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【００３８】
HTTP/HTTPS_GET_project_member_directory/schedule.htmリクエストは、例えば図3Bに示される現在のプロジェクトメンバの計画を含むウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。
【００３９】
HTTP/HTTPS_GET_login.htmリクエストは、プロジェクトメンバ又は管理者が何れかのエディタにログオンすることを許可するウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こす。メンバ又は管理者は、プロジェクト、メンバ名及びエディタのセッションタイプに関する情報を入力する。図４はエディタの１つにログインするウェブページを示す。
【００４０】
HTTP/HTTPS_GET_TaskAssigEditor.htmリクエストは、タスク割当エディタのウェブページをサーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、タスク割当エディタは、現在のプロジェクトのプロジェクトメンバにタスクを割り当てる際に使用される。サーバプロセッサ604がタスク割当エディタのウェブページを返すのに先だって、プロジェクト管理者は、タスクをプロジェクトメンバに割り当てるアクセス特権を要する。管理者がログインウェブページ(図４)に情報を提示する際、その特権が確認される。一実施例の場合、TaskAssignEditor.htmは、タスク割当エディタでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、TaskAssignEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図1Aに示されるように、その情報がタスク割当エディタで表示されるようにする。
【００４１】
HTTP/HTTPS_GET_ProjectScheduleEditor.htmリクエストは、プロジェクトスケジュールエディタのウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、そのウェブページは現在のプロジェクトのプロジェクト計画を更新するのに使用される。サーバプロセッサ604がプロジェクトスケジュールエディタを返すのに先だって、プロジェクト管理者は、プロジェクトスケジュールを作成するアクセス特権を要する。管理者がログインウェブページ(図４)に情報を提示する際、その特権が確認される。一実施例の場合、ProjScheduleEditor.htmは、プロジェクトスケジュールエディタのウェブページでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、ProjScheduleEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図2Aに示されるように、その情報がプロジェクトスケジュールエディタで表示されるようにする。
【００４２】
HTTP/HTTPS_GET_MemberScheduleEditor.htmリクエストは、メンバスケジュールエディタのウェブページを、サーバプロセッサ604がクライアントプロセッサ602に返すことを引き起こし、そのウェブページは現在のプロジェクトのプロジェクトメンバの計画を作成又は更新するのに使用される。一実施例では、プロジェクトメンバのスケジュールが以前に作成されていなかった場合、スケジュールエディタは未完了のタスクのみを表示する。サーバプロセッサ604がこのウェブページを返すのに先だって、プロジェクト管理者は、スケジュールを作成又は編集するアクセス特権を要する。メンバがログインウェブページ(図４)に情報を提示する際、その特権が確認される。一実施例の場合、MembScheduleEditor.htmは、プロジェクトメンバのスケジュールエディタでイベントを表示、管理及び処理するジャバスクリプトを含む。一実施例では、MembScheduleEditor.htmはPHPスクリプトを含み、データベース506,536から情報を取得し、その情報をジャバスクリプトに渡し、例えば図3Aに示されるように、その情報がメンバのスケジュールエディタで表示されるようにする。
【００４３】
HTTP/HTTPS_POSTlogin.htmは、クライアントプロセッサ602が(プロジェクトスケジュール、メンバスケジュール、タスク割当のような)様々なエディタにアクセス及びそれを表示することを許可する。login.htmに対応するウェブページから“Submit(提示)”ボタンが選択された場合、このインターフェースが呼び出される。login.htmに入力された情報は、サーバプロセッサ604のPostLogin.htmに与えられる。PostLogin.htmは、この情報を使ってプロジェクトのメンバの有向性を確認し、そのメンバが要求しているエディタに対するアクセス特権を有するか否かを判定する。情報が有効でなかった場合又はメンバがエディタに対するアクセス特権を備えていなかった場合、PostLogin.htmは、そのプロジェクトメンバが要求のエディタにアクセスできないことを示すメッセージを、クライアントプロセッサ602に返す。或いは、PostLogin.htmは何れかのエディタに関連するウェブページを返してもよい、即ち、ウェブブラウザは、要求されたエディタに関連するウェブページに変更されてもよい。
【００４４】
HTTP/HTTPS_POSTPostTaskAssign.htmは、タスク割当エディタ(図1A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。TaskAssignEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。TaskAssignEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostTaskAssign.htmに与えられる。PostTaskAssign.htmは、適切なデータベース506，536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostTaskAssign.htmは、例えば図1Bに示されるようなタスク割当エディタのウェブページを作成する。
【００４５】
HTTP/HTTPS_POSTPostProjSchedule.htmは、プロジェクトスケジュールエディタ(図2A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。ProjScheduleEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。ProjScheduleEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostProjSchedule.htmに与えられる。PostProjSchedul.htmは、適切なデータベース506，536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostProjSchedule.htmは、例えば図2Bに示されるようなプロジェクトスケジュールのウェブページを作成する。
【００４６】
HTTP/HTTPS_POSTPostMembSchedule.htmは、プロジェクトメンバのスケジュールエディタ(図3A)に入力された情報全てを、クライアントプロセッサ602がサーバプロセッサ604に提示することを許可する。MembScheduleEditor.htmに対応するウェブページから“Finish(終了)”ボタンが選択された場合、このインターフェースが呼び出される。MembScheduleEditor.htmのエディタに入力された情報は、サーバプロセッサ604でPostMembSchedule.htmに与えられる。PostMembSchedul.htmは、適切なデータベース506，536でタスク割当情報を追加及び更新する。入力された何らかの情報が有効でなかった場合、或いはプロセスが適切なデータベースにアクセスすることに又は問い合わせることに失敗した場合、或る適切なメッセージが表示される。PostMembSchedule.htmは、例えば図3Bに示されるようなプロジェクトスケジュールのウェブページを作成する。
【００４７】
非限定的な一実施例の場合、(TaskAssignEditor.htm、ProjScheduleEditor.htm及びMembScheduleEditor.htmのような)様々なエディタのウェブサイトは、ジャバスクリプト又はPHPスクリプトを含むファイルを有する。本願で説明される様々な機能を実行するのに使用されるスクリプト言語は、実施形態毎に異なってよい。ウェブブラウザ(例えば、クライアントプロセッサ)がエディタのウェブページを要求する場合、ジャバスクリプトに対応する全てのファイル及びエディタウェブページが、ウェブブラウザに提供され、これによりウェブブラウザはそのジャバスクリプトを処理することになる。しかしながら、PHPスクリプトの場合ファイルはウェブブラウザに提供されない。PHPスクリプトは図５のウェブサーバ507，530のようなウェブサーバで処理され、PHPスクリプトがウェブページ書き込んだもののみがウェブブラウザに提供される。
【００４８】
図８は、プロジェクトメンバ又は管理者がログインウェブページを使って何れかのエディタにログオンする際のシーケンス図を示す。この図は、メンバ又は管理者にエディタが表示される前に、システムの構成要素間で通信される情報を示す。ログインウェブページ(図４)で生じる全てのインベントの処理は、クライアントプロセッサ602内で行われる。ログインページで入力された情報の有効性を確認し、エディタに関するメンバのアクセス特権を確認する処理は、サーバプロセッサ604内で行われる。サーバプロセッサ604は、アクセス特権の有向性を確認するため、適切なデータベース506又は536から情報を取得する。どのエディタに情報を与える前にも、プロジェクトメンバ又は管理者はこのプロセスを実行し、それらのシーケンスは図9-11で説明される。
【００４９】
＜エディタのシーケンス図＞
図９(タスク割当エディタ)、図10(プロジェクトスケジュールエディタ)及び図11(メンバ介ジールエディタ)は、ウェブブラウザで各エディタを表示し、セッションが終了した場合にエディタの情報を投函又は公表(post)する。全てのエディタは同様なシーケンスに従う。クライアントプロセッサのウェブブラウザでエディタの初期表示を得るため、適切なタスク割当/スケジュール情報が、(PHPスクリプトを使って)サーバプロセッサのデータベースから取得される。或るコードと共にエディタを管理及び維持するようにクライアントプロセッサが実行できるコード(ジャバスクリプト)を含むウェブページを、サーバプロセッサは伝送し、そのコードはサーバプロセッサが(PHPスクリプトを使って)生成したものであり、クライアントプロセッサで初期エディタを表示する。サーバプロセッサがデータベースから取得したタスク割当/スケジュール情報をクライアントプロセッサに伝送するコードが、サーバプロセッサにより生成される。
【００５０】
図９は、プロジェクト管理者がタスク割当エディタと共に行うセッション例のシーケンスを示す。クライアントプロセッサ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に示されるようなもの)を自動的に作成する。
【００５１】
図１０は、プロジェクト管理者がプロジェクト計画エディタと共に行うセッション例のシーケンスを示す。クライアントプロセッサ602がProjScheduleEditor.htmを要求した場合、ProjScheduleEditor.htmのファイル及びジャバスクリプトを含む包含ファイル全ては、サーバプロセッサ604からクライアントプロセッサ602に伝送される。PHPスクリプトを含む包含ファイルは、サーバプロセッサ604で処理される。PHPスクリプトは、適切なデータベースからタスクスケジュール情報を取得し、ProjScheduleEditor.htmのウェブページにジャバスクリプトを書き込み、情報をクライアントプロセッサ602に伝送する。クライアントプロセッサ602は受信したファイル全ての中のジャバスクリプトを処理し、プロジェクトスケジュールエディタを表示する。エディタを管理、維持及び更新するように、プロジェクト管理者及びプロジェクトスケジュールエディタ間の全てのやりとりは、ジャバスクリプトで処理される。管理者がセッションを終了すると(例えば、「終了」ボタンを選択すると)、プロジェクトスケジュールエディタ中のプロジェクトタスクスケジュール情報全てが、インターフェース(PostProgScheduleEditor.htm)を介してクライアントプロセッサ602からサーバプロセッサ604に伝送される。サーバプロセッサ604は、適切なデータベース中の情報を追加又は更新することで、情報を処理する。サーバプロセッサ604は、プロジェクトスケジュールと共にプロジェクトメンバのスケジュールを自動的にまとめ、データベース中のプロジェクトスケジュールを追加又は更新する。データベース中のプロジェクトタスクスケジュール情報を使って、サーバプロセッサ604は、プロジェクトスケジュールのウェブページ(例えば図2Bに示されるようなもの)を自動的に作成する。
【００５２】
「統合(Consolidate)」ボタンの選択に応じたシステム動作は、「終了」ボタンを選択したときの動作と同じである。何れのボタンも、(a)プロジェクトスケジュールエディタからの情報と共に適切なデータベースの追加及び更新を行うこと、(b)プロジェクトスケジュールと共にメンバ各自のスケジュールを統合すること、(c)データベースのプロジェクトスケジュールの追加及び更新を行うこと、及び(d)プロジェクトスケジュールのウェブページを作成することを引き起こす。更に、「統合」は、ProjScheduleEditor.htmを再び要求することで、更新されたプロジェクトスケジュールと共にプロジェクトスケジュールエディタを再表示する。
【００５３】
図１１は、プロジェクトメンバがプロジェクトメンバのスケジュールエディタ(即ち、メンバのスケジュールエディタ)と共に行うセッション例のシーケンスを示す。クライアントプロセッサ602がMembScheduleEditor.htmを要求した場合、MembScheduleEditor.htmのファイル及びジャバスクリプトを含む包含ファイル全ては、サーバプロセッサ604からクライアントプロセッサ602に伝送される。PHPスクリプトを含む包含ファイルは、サーバプロセッサ604で処理される。PHPスクリプトは、適切なデータベースからタスクスケジュール情報を取得し、MembScheduleEditor.htmのウェブページにジャバスクリプトを書き込み、情報をクライアントプロセッサ602に伝送する。クライアントプロセッサ602は受信したファイル全ての中のジャバスクリプトを処理し、メンバスケジュールエディタを表示する。メンバスケジュールエディタを管理、維持及び更新するように、プロジェクトメンバ及びメンバスケジュールエディタ間のやりとりは、ジャバスクリプトで処理される。管理者がセッションを終了すると(例えば、「終了」ボタンを選択すると)、メンバスケジュールエディタ中のメンバタスクスケジュール情報が、インターフェース(PostMembScheduleEditor.htm)を介してクライアントプロセッサ602からサーバプロセッサ604に伝送される。サーバプロセッサ604は、適切なデータベース中の情報を追加又は更新することで、情報を処理する。サーバプロセッサ604は、データベース中のプロジェクトスケジュールを追加又は更新することで、情報を処理する。データベース中のメンバタスクスケジュール情報を使って、サーバプロセッサ604は、メンバスケジュールのウェブページ(例えば図3Bに示されるようなもの)を自動的に作成する。
【００５４】
＜データベース概要＞
図１２は、プロジェクト及びプロジェクトメンバのタスク割り当て及びタスクスケジュール情報を保存及び管理するのに使用されるデータベーステーブルの概要を示す。テーブルは、タスク割当に関する情報、プロジェクトタスクのスケジュール及び各プロジェクトメンバのスケジュールを保持する。タスク割当、プロジェクトスケジュール及びメンバのスケジュールが全て関連するように、テーブルは組織され結び付けられる。
【００５５】
タスク割当テーブル1202は、プロジェクトタスク及び関連するプロジェクトのサブタスクを格納する。最上位プロジェクトタスク(TopLevelProjectTask)テーブル1204は、タスク割当テーブル1202中のプロジェクトタスクのスケジュールを格納する。レベル１メンバタスク(Level1MemberTask)テーブル1206は、タスク割当テーブル1202で割り当てられているメンバタスクのスケジュールを格納し、TopLevelProjectTaskテーブル1204中の対応するプロジェクトタスクのスケジュールにリンクする。これらのテーブル間のリンクは、プロジェクトスケジュールと共に、メンバスケジュールを自動的に統合できるようにする。Level1MemberTaskテーブル1206は、どのプロジェクトタスクにも関係ないメンバタスクのスケジュールを格納する。LevelXメンバタスクテーブル(Xは1,2,3及び4)及びメンバタスクテーブル1208は、様々なレベルのメンバタスク間のリンクを保存及び管理する。下位レベルのタスクは、上位レベルのタスクよりも詳細なタスクである。これらのテーブル構成は、メンバのスケジュールを維持する。プロジェクトチーム(ProjectTeam)テーブル1210は、プロジェクトメンバに関する情報を含む。プロジェクトメンバのプロジェクトメンバ情報は、(a)様々なエディタに対するアクセス特権を確認するための役職(role)、(b)メンバスケジュールのウェブページが保存されている場所を示すディレクトリ、及び(c)様々なレベルでメンバタスクの身元を確認するのに使用されるIDを含む。
【００５６】
ログインプロセスは、プロジェクトチームテーブル1210中の情報を使用して、エディタを表示する前に、要求されるエディタに対するアクセス特権を確認する。タスク割当エディタは、デフォルトタスク(Default  Task)1212、タスク割当1202、タスク割当履歴(TaskAssignmentHistory)1218、最上位プロジェクトタスク1204及びメンバタスク1208のテーブル中有の情報を使用及び／又は更新する。プロジェクトスケジュールエディタは、デフォルトタスク1212、タスク割当1202、最上位プロジェクトタスク1204、メンバタスク1208及びレベル1メンバタスク1206のテーブル中の情報を使用及び／又は更新する。メンバスケジュールエディタは、プロジェクトチーム1210、タスク割当1202、最上位プロジェクトタスク1204、メンバタスク1208及びレベルXメンバタスクのテーブル中の情報を使用及び／又は更新する。
【００５７】
以下、図１２に示されており及び本願のプロジェクトスケジュール管理システム例で使用される様々なテーブルを説明する。しかしながら、図１２に関して説明されているテーブルの数及び構造は、実施形態毎に異なってよい。
【００５８】
デフォルトタスクテーブル1212  −  このテーブルは、全てのプロジェクトについて一般的なタスクのタスク名を含む。ソフトウエア開発プロジェクトの場合、デフォルトタスクの具体例は、プロジェクトプラン(Project  Plans)、条件(Requirements)及び上位レベル設計(Top  Level  Design)である。
【００５９】
プロジェクトチームテーブル1210  −  このテーブルは、プロジェクトのプロジェクトメンバに関する情報を含む。sMemberLabelは２〜４文字列であり、プロジェクトスケジュールを表示する際にプロジェクトメンバを特定するのに使用され、プロジェクトタスク及び関連するメンバタスクを図1A及び1Bに示されるように表示する。一実施例では、プロジェクトメンバのイニシャルがsMemberLabelに使用される。nMemberRoleはプロジェクトメンバの役割を示すのに使用される。例えば、プロジェクト管理者＝１、プロジェクトリーダ＝２、プロジェクトアドミニストレータ＝３及びプロジェクトメンバ＝４である。役割は、エディタへのアクセス権を有する者を示す。例えば、役割番号が１であるプロジェクトメンバは、全てのエディタに対するアクセス権を有する。しかしながら、役割番号が４のプロジェクトメンバは、メンバスケジュールエディタにしかアクセスできない。システムは、エディタ各々に対してどの役割番号がアクセス権を有するかを決めるように構成されてもよい。sMemberDirectoryは、メンバスケジュールのHTMLファイルが保存されている場所を特定するのに使用され、プロジェクトチームがメンバのスケジュールを閲覧できるようにする。
【００６０】
nMemberTaskIDはプロジェクトメンバに割り当てられた番号であり、その番号を使ってメンバのタスクのIDを特定する。一実施例の場合、nMemberTaskIDはタスクの開始IDとして使用される。小さなチームの場合IDはMOD10(1,2,...,9)でもよいし、大きなチームの場合はMOD100(1,2,...,99)又はそれ以上でもよく、これらはプロジェクトチームの大きさに依存してよい。タスクIDは、MODの増分である。例えば、プロジェクトメンバ‘test1’のnMemberTaskIDが１であった場合、test1のタスクのタスクIDは11，21，31(又は大規模なチームの場合、101，201，301等)のようになる。タスクIDは、たとえタスクの名前の一部が同じであったとしても、プロジェクトメンバのタスクを一意に区別する。タスクIDは全てのレベルのタスクを一意に特定する。nLevelXMaxTaskIDは、プロジェクトメンバの様々なレベルのタスクについて使用される最高のタスクIDを維持するのに使用される。これらの数は、タスクのタスクIDを決めるのに使用された開始IDを与え、そのタスクはメンバのスケジュールエディタのセッションで追加されたものである。これらの値は，エディタのセッション後に抽出及び更新される。nLevelXMaxTaskIDの値を除いて、他の入力の値はプロジェクトの開始以前に設定される必要がある。
【００６１】
タスク割当テーブル1202  −  このテーブルは、プロジェクトのプロジェクトメンバに割り当てられたプロジェクトタスク及びサブタスクに関する情報を含む。sTaskNamaはタスクの名称に使用され、nProjectTaskIDはそのタスクに関連するIDである。プロジェクト開始タスクIDは０であり、タスクのIDがMODの増分になるようにする(例えば、小さなチームの場合、10，20，30,．．．)。sLevel1TaskNameはプロジェクトタスクに関連するサブタスク(メンバのタスク)の名称に使用され、nLevel1TaskIDはサブタスクに関連するIDに使用される。sMemberLabelは、サブタスクに割り当てられたプロジェクトメンバを特定するのに使用される。bIsObsoletedは、タスクがプロジェクトから除去されているか否かを指定するのに使用される。タスクがスケジュールから削除されたとしても、そのタスクの情報はデータベースに維持される。TaskName、nProjectTaskID、sLevel1TaskName及びsMemberLabelの値は、タスク割当エディタのセッションによりタスク割当テーブル1202に追加可能である。プロジェクトスケジュールエディタのセッションは、sTaskName及びnProjectTaskIDの値を追加できる。メンバスケジュールエディタのセッションだけが、nLevel1TaskIDの値を追加できる。
【００６２】
最上位プロジェクトタスクテーブル1204  −  このテーブルは、プロジェクトタスクのスケジュールに関する情報を含む。sTaskNameはタスクの名称に使用され、nProjectTaskはタスクに関連するIDに使用される。planStart及びplanEndは、タスクを開始及び終了する予定日に使用される。actualStart及びactualEndは、タスクが開始及び終了した実際の日付に使用される。setDateは、予定日が設定又は修正された日付に使用される。nScheduleRevNumberはタスクスケジュールの改訂番号に使用される。プロジェクトタスクに関する最新のスケジュールは、最高の改訂番号に対応する。プロジェクトタスクの全ての改訂は、最上位プロジェクトタスクテーブル1204で維持され、プロジェクトタスクのスケジュールの変更を追跡する。プロジェクトスケジュールエディタで予定日が異なる日に変更された場合にのみ、改訂番号は増やされる。プロジェクトスケジュールエディタのセッション又はタスク割当エディタのセッションを通じて、nProjectTaskID、sTaskName、日付及びnScheduleRevNumberの全ての値は、最上位プロジェクトタスクテーブル1204で追加又は更新される。
【００６３】
メンバタスクテーブル1208  −  このテーブルは、全てのプロジェクトメンバについての全てのタスク(全レベルのタスク)に関する情報を含む。タスクID及びnLevelXTaskIDはプロジェクトの各メンバに関連付けられ、全てのタスク及びそれらの関連性を互いに識別する。タスク割当テーブルと同様に、タスクがプロジェクトメンバのスケジュールから削除されているか否かを、bIsObsoletedは示す。bIsCompletedはタスクが完了しているか否かを示す。nLevelXTaskIDは、メンバタスクテーブル1208に追加されたタスクに使用され、新たなタスクがメンバのスケジュールエディタセッションで追加された場合、プロジェクトチームテーブル1210のnLevelXMaxTaskIDから判別される。(メンバスケジュール、プロジェクトスケジュール、タスク割当のような)３つのエディタセッションのどの結果によっても、テーブル中の値は更新又は修正可能である(bIsObsoleted又はbIsCompleted)。メンバタスクテーブル1208は、下位レベルのタスクスケジュールと上位レベルのタスクスケジュール間のリンクをもたらす点で重要である。
【００６４】
レベルXメンバタスクテーブル(例えば、レベル１メンバタスクテーブル1206、レベル２メンバタスクテーブル1214、レベル３メンバタスクテーブル1216)−  このテーブルは、メンバのタスクの予定に関する情報を含む。sLevelXTaskNameはタスク名に使用され、nLevelXTaskIDはタスクに関するIDに使用される。新たなタスクがメンバスケジュールエディタのセッションで追加された場合、テーブルに追加されたタスクのnLevelXTaskIDは、プロジェクトチームテーブル1210のnLevelXMaxTaskIDから決定される。planStart及びplanEndは、タスクを開始及び終了する予定日に使用される。actualStart及びactualEndは、タスクが開始及び終了した実際の日付に使用される。setDateは、予定日が設定又は修正された日付に使用される。nScheduleRevNumberはタスクスケジュールの改訂番号に使用される。プロジェクトタスクに関する最新のスケジュールは、最高の改訂番号に対応する。メンバタスクの全ての改訂はテーブルで維持され、メンバタスクのスケジュールの変更を追跡する。一実施例の場合、メンバスケジュールエディタで予定日が変更された場合にのみ、改訂番号は増やされる。レベルXメンバタスクテーブルの各々は、上位レベルタスクのタスクIDを含む(但し、レベル１を除く。この場合、タスクは親としてのプロジェクトタスクを有する又は親タスクを一切有しない)。これは、親タスク及び子タスクへのリンクをタスクにもたらす。親タスクID、sLevelXTaskName、nLevelXTaskID、日付及びnScheduleRevNumberの全ての値は、メンバスケジュールエディタのセッションを通じてテーブルに追加される又は更新される。レベル１メンバタスクテーブル1206だけが、sMemberLabelを含み、タスク割当テーブル1202へのリンクをもたらす。
【００６５】
データベースはレベル４に至る下位レベルしか示していない。しかしながら、データベースは、タスクスケジュールを更に詳細にする更に下位のレベルを含むように修正可能である。
【００６６】
タスク割当履歴テーブル1218  −  このテーブルは、プロジェクトタスクに関連するタスクのプロジェクトメンバに割当を行った履歴の情報を含む。このテーブルはプロジェクトメンバに関する情報を含み、そのメンバは、タスクが他のプロジェクトメンバに割り当て直される前に、そのタスクにかつて割り当てられていた者である。nProjectTaskIDはタスクに関連するIDである。sLevel1TaskNameはプロジェクトに関するサブタスク(メンバのタスク)の名前である。sMemberLabelはサブタスクに割り当てられるプロジェクトメンバである。nRevNumberはプロジェクトメンバにタスクを割り当てた改訂番号である。nRevNumberはプロジェクトのタスクの再割当を示す。タスク割当エディタ102(図1A)は、タスク割当履歴テーブル1218の情報を利用及び/又は更新する。
【００６７】
＜サーバのプログラミングパッケージ図＞
図１３は、図６のサーバプロセッサのプログラミングパッケージ図を示す。サーバプロセッサパッケージ1300は４つのパッケージを含み、各パッケージは、クライアントプロセッサ602でユーザに表示されるウェブページ/エディタに対応し、ユーザがログイン又はエディタのセッションを終了した際、ユーザの入力した情報が処理される。
【００６８】
ログインプロセッサ1302パッケージは、或るフォームを表示するウェブページを提供し、そのフォームは、プロジェクトメンバが何れかのエディタにログインすることを可能にする。メンバがそのフォームを提示すると、ログインプロセッサ1302パッケージは、メンバが入力した情報を処理し、その情報の有効性を確認する。情報が有効であり且つメンバが適切なアクセス特権を持っていた場合、ログインプロセッサ1302パッケージは、江ティ他に対応する何れかのパッケージに仕向けるようにシステムを変更する。
【００６９】
タスク割当プロセッサ1304パッケージは、タスク割当エディタ102を表示するウェブページを提供し、プロジェクトメンバに対するプロジェクトタスクの割当を追加又は修正するのに使用される。タスク割当エディタ102が提示されると、タスク割当プロセッサ1304パッケージは、タスク割当エディタ102からの情報を処理及び保存し、最新のタスク割当のウェブページを作成する。
【００７０】
プロジェクトスケジュールプロセッサ1306パッケージは、プロジェクトスケジュールエディタ202を表示するウェブページを提供し、これはプロジェクトタスクのスケジュールを追加又は編集するのに使用される。プロジェクトスケジュールエディタ202が提示されると、プロジェクトスケジュールプロセッサ1306パッケージは、プロジェクトスケジュールエディタ202からの情報を処理及び保存し、最新のプロジェクトスケジュールのウェブページを作成する。
【００７１】
メンバスケジュールプロセッサ1308パッケージは、メンバスケジュールエディタ302(図3A)を表示するウェブページを提供し、これはメンバのタスクのスケジュールを追加又は編集するのに使用される。メンバスケジュールエディタ302が提示されると、メンバスケジュールプロセッサ1308パッケージは、メンバスケジュールエディタ302からの情報を処理及び保存し、最新のメンバスケジュールのウェブページを作成する。
【００７２】
ログインプロセッサ1302パッケージをエディタパッケージに仕向けることを除いて、プロセッサパッケージは互いに独立しており、一般にエディタパッケージ間の相互作用はない。プロセッサパッケージ1302−1308の各々はデータベース1310(例えば、図５のデータベース506,536)とやりとりを行い、情報を取得、追加又は更新する。ログインプロセッサ1302パッケージは、データベース1310にアクセスし、メンバがアクセス特権を有するか否かを判別する。他のプロセッサパッケージ1304−1308の各々は、データベース1310にアクセスし、タスク情報を取得し、対応するエディタ及び対応するウェブページ(エディタが生成するウェブページ)の表示を行い、関連するタスク情報の追加又は更新を行う。非限定的な例として、データベース1310はMySQLを用いて実現されてもよい；しかしながら、データベース1310はMySQLを使って実現されるように限定されるわけではない。
【００７３】
一実施例の場合、エディタプロセッサ1304−1308パッケージの各々は、PHPスクリプトファイル、ジャバスクリプトファイル及びHTMLファイルを有する。PHPスクリプトファイルは、データベース1310からプロジェクト及びタスク情報を取得し、クライアントプロセッサ602(図６)でエディタを表示するジャバスクリプトを生成する。これは、PHPスクリプトがジャバスクリプトとインターフェースをとることを可能にする。ジャバスくくり婦とはエディタを生成し、エディタ及びプロジェクトメンバ間の全てのやりとりを管理する。エディタが提示されると、PHPスクリプトファイルはエディタ中の情報を処理し、データベース1310に情報を追加し及び情報を更新し、エディタに対応するウェブページを作成する。
【００７４】
図１４は、エディタプロセッサ1304−1308パッケージのプログラミングパッケージ図を示す。一実施例では、タスク割当プロセッサ1304、プロジェクトスケジュールプロセッサ1306及びメンバスケジュールプロセッサ1308のパッケージは全て図14に示されるこのパッケージ図を利用する。パッケージは２つの主要部分1402，1404に分割され、ディスプレイエディタ1402はエディタの表示及び管理の責務を有し、エディタからのポスト情報部1404はエディタの情報を投函してウェブページを生成する責務を有する。
【００７５】
XXX用のウェブページ1406(XXXは、タスク割当、プロジェクトスケジュール又はメンバスケジュールの何れかを指す)は、以下のパッケージを統合し、エディタを表示する。XXXPHPプロセッサ1408パッケージのPHPスクリプトファイル全てと、XXXジャバスクリプトプロセッサ1410パッケージのジャバスクリプトファイル全てとを、ウェブページ1406は含み、エディタを表示及び管理する。全てのPHPスクリプトファイルは、データベースからタスク情報を取得するためにウェブサーバ(例えば、図５のウェブサーバ507，530)で処理され、XXXジャバスクリプトプロセッサ1410パッケージとのインターフェース機能を果たすジャバスクリプトを生成する。全てのジャバスクリプトはクライアントプロセッサ602(図６)のウェブブラウザで実行され、エディタの初期画面をもたらす。全てのジャバスクリプトファイルはクライアントプロセッサ602のウェブブラウザに与えられ、えでぃたを管理する−即ち全ての対応する編集イベントを処理する。
【００７６】
ポストXXX用のウェブページ1412は、情報を投函する以下のパッケージを統合し、ポストウェブページを生成する。エディタからの情報を投函するポストXXXPHPプロセッサ1414パッケージのPHPスクリプトファイル全てと、ウェブページを生成するXXXウェブページジェネレータ1416パッケージのPHPスクリプトファイル全てとを、XXX1412のウェブページは含む。ポストXXXPHPプロセッサ1414パッケージは、エディタからのタスク情報全てを取得し、タスク情報をデータベースに追加し又はデータベースのタスク情報を更新する。XXXウェブページジェネレータ1416パッケージは、データベースからタスク情報を取得し、適切なウェブページを生成する。
【００７７】
図14の各パッケージは、パッケージのインターフェースをもたらすクラスを提供し、パッケージ内のクラスを管理する。これは、他のパッケージに影響を及ぼさずに、パッケージ内で設計が容易に変更できるようにする。
【００７８】
＜メンバスケジュールプロセッサパッケージ＞
図15乃至18は、メンバスケジュールプロセッサ1308パッケージ(図13)に対応する、メンバスケジュールエディタ302(図３)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタ1404からのポスト情報及びディスプレイエディタ1402の４パッケージに対応するクラス設計例を示す。XXXPHPProcessor(XXXPHPプロセッサ)1408パッケージ(図14)は、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図６)のエディタの初期表示用のコードを生成する。XXXJavaScriptProcessor(XXXジャバスクリプトプロセッサ)1410パッケージ(図14)は、クライアントプロセッサ602(図６)のエディタを表示、管理及び維持する。PostXXXPHPProcessor(ポストXXXPHPプロセッサ)1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函(ポスト)する。XXXWebPageGenerator(XXXウェブページジェネレータ)1416パッケージ(図14)は、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、３つのエディタの間で４つのパッケージ設計が類似していることを示す。各エディタは異なるタスクを実行するが、全てのエディタは同様な設計パターンに従っている。
【００７９】
図１５は、MemberSchedulePHPProcessor(メンバスケジュールPHPプロセッサ)パッケージ1500(例えば、図14のXXXPHPプロセッサ1408)のクラス図を示す。MemberSchedulePHPProcessorパッケージ1500はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図６)のウェブブラウザで初期のメンバスケジュールエディタ302を表示する。
【００８０】
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スクリプトで実現される。
【００８１】
図１６は、(図14のXXXJavaScriptProcessor1410のような)MemberScheduleJavaScriptProcessor(メンバスケジュールジャバスクリプトプロセッサ)パッケージ1600のクラス図を示す。MemberScheduleJavaScriptProcessorパッケージ1600は、クライアントプロセッサ602(図６)のウェブブラウザのメンバスケジュールエディタ302(図3A)を管理する。
【００８２】
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パッケージの構造及び上記クラスの全てが、ジャバスクリプトで実現される。
【００８３】
図１７は、(図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スクリプトで実現される。
【００８４】
図１８は、(図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スクリプトで実現される。
【００８５】
テーブル(表)１は、メンバスケジュールエディタ302(図３)のドキュメントオブジェクトモデル表現を示す。テーブル１は、メンバスケジュールエディタ302を構築する要素(element)と、対応する要素名及びid属性とを説明している。いくつかの要素は、エディタに表示されるエディタの一部分に対応し、例えば、テーブル要素、行要素、セル要素、チェックボックス入力要素、入力テキスト要素及び選択要素等である。いくつかの要素は、情報を表示すると言うよりもむしろ保存のために使用され、例えば、隠れ入力要素である。情報を保存する又はユーザから情報を受信する要素は、情報をサーバプロセッサに与え、エディタのセッションによるタスク情報を掲示する際に重要になる。
【００８６】
エディタの構成要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、メンバスケジュールエディタ302中の要素各々について、要素は、図16のMemberScheduleJavaScriptProcessor1600のクラスの１つの中に包含される。要素はクラスの属性(attribute)である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表１】
0005396904.tif 000002
【００８７】
以下の表２は、図16に示されるMemberScheduleJavaScriptProcessor1600パッケージのCTaskCell1610の属性メンバを示す。CTaskCell1610は、包含する要素全ての属性値を取得及び設定できる。
【表２】
0005396904.tif 000003
【００８８】
＜プロジェクトスケジュールプロセッサパッケージ＞
図19乃至22は、図13のProjScheduleProcessor1310パッケージに対応する、プロジェクトスケジュールエディタ202(図2A)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタからのポスト情報1404及びディスプレイエディタ1402の４パッケージに対応するクラス図を示す。XXXPHPプロセッサ1408(図14)パッケージは、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図６)のエディタの初期表示のコードを生成する。XXXJabaScriptProcessor1410(図14)パッケージは、クライアントプロセッサ602(図６)でエディタを表示、管理及び維持する。PostXXXPHPProcessor1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函する。XXXWebPageGenerator1416(図14)パッケージは、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、３つのエディタの間で４つのパッケージの設計が類似していることを示す。エディタ各々は異なるタスクを実行するが、それらは全て同様な設計パターンに従っている。
【００８９】
図１９は、(図14のXXXPHPプロセッサ1408のような)ProjectSchedulePHPProcessor(プロジェクトスケジュールPHPプロセッサ)パッケージのクラス図を示す。ProjectSchedulePHPProcessorパッケージ1900はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図６)のウェブブラウザで初期のプロジェクトスケジュールエディタ202を表示する。
【００９０】
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スクリプトで実現される。
【００９１】
図２０は、(図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パッケージの構造及び上記クラスの全てが、ジャバスクリプトで実現される。
【００９２】
図２１は、(図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スクリプトで実現される。
【００９３】
図２２は、(図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スクリプトで実現される。
【００９４】
テーブル(表)３は、プロジェクトスケジュールエディタ202(図2A)のドキュメントオブジェクトモデル表現を示す。テーブル３は、プロジェクトスケジュールエディタ202を構築する要素(element)と、対応する要素名及びid属性とを説明している。各要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、プロジェクトスケジュールエディタ202中の要素各々について、要素は、図20のProjectScheduleJavaScriptProcessor2000パッケージのクラスの１つの中に包含される。要素はクラスの属性(attribute)である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表３】
0005396904.tif 000004
【００９５】
表４は、図20に示されるProjScheduleJavaScriptProcessor2000パッケージのクラスCTaskCell2008の属性メンバを示す。CTaskCell2008は、包含する全ての要素の属性値を取得及び設定する。
【表４】
0005396904.tif 000005
【００９６】
＜タスク割当プロセッサパッケージ＞
図23乃至26は、図13のTaskAssignmentProcessorパッケージに対応する、タスク割当エディタ102(図1A)に対応する、図14のパッケージのクラス図を示す。これらの図は、エディタからのポスト情報1404及びディスプレイエディタ1402の４パッケージに対応するクラス図を示す。XXXPHPプロセッサ1408(図14)パッケージは、データベースからタスク割当/スケジュール情報を取得し、サーバプロセッサ604(図６)のエディタの初期表示のコードを生成する。XXXJabaScriptProcessor1410(図14)パッケージは、クライアントプロセッサ602(図６)でエディタを表示、管理及び維持する。PostXXXPHPProcessor1414(図14)パッケージは、クライアントプロセッサ602のエディタセッションからのタスク割当/スケジュール情報全てを、サーバプロセッサ604のデータベースに投函する。XXXWebPageGenerator1416(図14)パッケージは、サーバプロセッサ604のデータベースからタスク割当/スケジュール情報を取得し、タスク情報を表示する適切なウェブページを生成する。これらの図は、３つのエディタの間で４つのパッケージの設計が類似していることを示す。エディタ各々は異なるタスクを実行するが、それらは全て同様な設計パターンに従っている。
【００９７】
図23は、(図14のXXXPHPプロセッサ1408のような)TaskAssignmentPHPProcessor(タスク割当PHPプロセッサ)2300パッケージのクラス図を示す。TaskAssignmentPHPProcessorパッケージ2300はジャバスクリプトインターフェースを生成し、そのジャバスクリプトインターフェースは、クライアントプロセッサ602(図６)のウェブブラウザで初期のタスク割当エディタ102を表示する。
【００９８】
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スクリプトで実現される。
【００９９】
図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パッケージの構造及び上記クラスは、ジャバスクリプトで実現される。
【０１００】
図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スクリプトで実現される。
【０１０１】
図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スクリプトで実現される。
【０１０２】
テーブル(表)５は、タスク割当エディタ102(図1A)のドキュメントオブジェクトモデル表現を示す。テーブル５は、タスク割当エディタ102を構築する要素と、対応する要素名及びid属性とを説明している。各要素にはそのidを通じてアクセス可能であり、要素の値及び/又は表示を変更するように要素の属性は設定可能である。一実施例では、タスク割当エディタ102中の要素各々について、要素は、図24のTaskAssignmentJavaScriptProcessor2400パッケージのクラスの１つの中に包含される。要素はクラスの属性である。従って、クラスのメンバ関数は、要素に直接的にアクセスでき、必要に応じてそれらの属性を修正できる。要素への直接的なアクセスが可能なクラスにより、要素をidを用いて取得する必要はなくなる。
【表５】
0005396904.tif 000006
【０１０３】
以下の表６は、図24に示されるTaskAssignmentJavaScriptProcessorパッケージのクラスCTaskCell2408の属性メンバを示す。CTaskCell2408は、包含する要素全ての値を取得及び設定で得きる。
【表６】
0005396904.tif 000007
【０１０４】
メンバスケジュールエディタ302(図3A)、プロジェクトスケジュールエディタ202(図2A)及びタスク割当エディタ(図1A)各々についてのPHPProcessor、JavaScriptProcessor、PostPHPProcessor及びWebPageGeneratorを説明している図15〜26から分かるように、各エディタの設計は同様なパターンに従っている。従って、システムに加えられる新たな如何なるエディタも、同様な設計パターンに従うようにできる。
【０１０５】
テーブル(表)７は、本願で説明されるオブジェクト指向スケジューリングシステムのソフトウエア設計仕様の見出しを示し、設計の類似性を示す。表７は、パッケージ及びパッケージ内のクラスを列挙し、３つのエディタ設計の類似性を示す。
【表７】
0005396904.tif 000008
【０１０６】
＜プレースホルダ文字列と共に一定の文字列からデータベースクエリを生成すること＞
図２７は、データベースの問い合せを行うのに使用される一定の文字列例を示す。２種類の一定の文字列が使用される。「一定の問い合わせ文字列(Constant  query  string)」は、プレースホルダ文字列を伴う問い合わせ文字列全体を含み、プレースホルダ文字列は所与の問合の値で置換される。一定の問い合わせ文字列は全体的な問い合わせを示し、プレースホルダ文字列は問い合わせの中に置く必要のある値が何であるかを示す。「プレースホルダ文字列のコンスタント(constant)」は、探索(サーチ)の際に使用され、実際の値を伴う一定のクエリ文字列においてプレースホルダ文字列を置換するのに使用される。問い合わせにおけるプレースホルダ文字列は、問い合わせの結果を制限する制約を適用する。図27に示される例は、PHPスクリプトに対応するが、本発明は如何なる言語にも使用可能である。
【０１０７】
プレースホルダ文字列を有する一定の問い合わせ文字列を利用することは、一連の文字列の連結により文字列を構築することを上回る改善をもたらし、一連の文字列の連結を読み取り及び理解することは困難である。データベースにアクセスするパッケージのクラス図各々はパッケージコンスタントを含み、パッケージコンスタントは図15，17，18，19，21，22，23，25及び26に示されるようにパッケージ内で使用される。一定の問い合わせ文字列はパッケージ内で規定され、それらが発見しやすいようにする。一定の文字列問い合わせの別の利点は、ナビキャットMySQL(Navicat  MySQL)のようなデータベースツールでそれらを検査できることである。一定の問い合わせ文字列は、値で置換されたプレースホルダと共にそのようなツールにコピー可能であり、問い合わせ文字列が有効な文字列であるか否かを確認できる。
【０１０８】
図２８は、図２７の一定の文字列からデータベースクエリを生成するのに使用されるスクリプト例を示す。図28に示される例はPHPスクリプトに対応するが、シーケンスを実現するのに如何なる言語が使用されてもよい。この例は、スクリプトの文各々が実行された後の問い合わせ文字列の値を示す。第１ステートメントを実行する場合、一定の文字列は、文字列変数  $loc_sQuery  に割り当てられる。変数  $loc_sQuery  は、データベース問い合わせに使用される問い合わせを含む。第２，第３及び第４ステートメントを実行する場合、“%%ProjectNumbber%%”,“%%MemberLabel%%”及び“%%ProjectTaskID%%”のプレースホルダ文字列は、それぞれ“J17”，“T1”，“40”の値で置換される。第４ステップの実行は、結果の問い合わせ文字列を示す。この例では、プロジェクト番号、番号ラベル及びプロジェクトタスクidのような簡単な値でプレースホルダを置換している。そのエディタと共に行うセッションを通じて不変のプロジェクト番号や番号ラベルのように、プレースホルダと置き換わるいくつかの値は静的であってよい。例示の問い合わせは、指定されたプロジェクト番号、番号ラベル及びプロジェクトタスクidにより、データベースのテーブルの記録に制限される。
【０１０９】
図２９は、一定の文字列から問い合わせ文字列を生成するプロセスを示すフローチャートを示す。ブロック2902において、一定の問い合わせ文字列が変数文字列(variable  string)に割り当てられる。変数文字列は、一定の文字列の値を不変にしつつ、プレースホルダを値で置換することを可能にするのに必要である。ブロック2904では、変数文字列が何らかのプレースホルダ文字列を含んでいるか否かを確認するため、変数文字列が検査される。変数文字列が、別の如何なるプレースホルダ文字列も含んでいなかった場合、その問い合わせ文字列は当初の一定の問い合わせ文字列に相当し、プロセスはブロック2906で終了する。変数文字列が更なるプレースホルダ文字列を含んでいた場合、ブロック2908において、変数文字列中のプレースホルダは値で置換される。ブロック2908における置換の後、制御フローはブロック2904に戻り、変数文字列が何らかの別のプレースホルダ文字列を含んでいるか否かを確認する。全てのプレースホルダ文字列の変数が値で置換されると、問い合わせ文字列が生成され、データベースに問い合わせる準備を行う。データベースに問い合わせがなされると、データベースは結果を生成し、その結果は、要求者に回答可能であり、他のプロセスに提供可能であり或いは用途に応じて適切に処理可能なものである。
【０１１０】
CXXXDBInterfaceクラス(例えば、図17のCPostDBInterface1706及び図18のCWebPageDBInterface1808クラス)及びCYYYDBQueryGeneratorクラス(例えば、図17のCPostDBQueryGenerator1708クラス及び図18のCWebPageDBQueryGenerator1810)は、問い合わせを生成して使用する。場合によっては、CXXXDBInterfaceクラスはプライベート関数を含み、プライベート関数は、エディタを介してユーザから取得した及びデータベースから取得した定数及び値により、問い合わせ文字列を生成する。具体例は図15のCEditorDBInterface1510である。多くの場合、CXXXDBInterfaceクラスはCYYYDBQueryGeneratorクラスのパブリック関数を使用して、問い合わせ文字列を生成する。具体例は、図17のCPostDBInterface1706及びCPostDBQueryGenerator1708である。
【０１１１】
＜エディタウェブページ構成要素＞
図３０は、(例えば、メンバスケジュールエディタ302、プロジェクト計画エディタ202及びタスク割当エディタ101等の)エディタ用ウェブページの構成要素を示す。ウェブページは、ウェブサーバのようなサーバプロセッサ604(図６)に保存されたファイルである。ウェブページは、ジャバスクリプト構成要素及びPHP構成要素を含む。ジャバスクリプト構成要素は、エディタで生じるイベントを処理するジャバスクリプト機能を有する。ジャバスクリプト構成要素は他のジャバスクリプトファイルを含み、そのファイルは、エディタの表示、管理及び維持のためのクラス、ユーティリティ及び定数に関連する。ウェブページのPHP構成要素は、ジャバスクリプトコードの生成を開始させるPHPスクリプトを含み、データベースから得たタスク割当/スケジュール情報をエディタで表示する。PHP構成要素はクラス、ユーティリティ及び定数に対応するPHPスクリプトと共にファイルを含み、データベースからタスク割当/スケジュール情報を取得し及びエディタのジャバスクリプトコードを生成する。
【０１１２】
ウェブブラウザがエディタウェブページを要求するように、ウェブページがクライアントプロセッサ602(図６)で要求されると、ウェブページのPHP構成要素のみがサーバプロセッサ604で処理される。例えば、ウェブサーバ507，530(図５)のようなウェブサーバでPHPスクリプトが実行される。PHPスクリプトは、データベース中のタスク割当/スケジュール情報にアクセスし及びそれを取得する。PHPスクリプトは、タスク情報を保存してジャバスクリプトに与えるための構造をジャバスクリプトコードで生成する。PHPスクリプトは、エディタを生成、管理及び維持するジャバスクリプトクラスのオブジェクトを生成するジャバスクリプトコードを生成し、オブジェクトのメンバ関数を呼び出し、タスク情報と共にエディタの初期表示を作成する。ウェブページがクライアントプロセッサ602に与えられる際、PHPスクリプトで生成されたジャバスクリプトコードがエディタのウェブページに加えられる。PHPコードは、クライアントプロセッサに与えられるので、ウェブページ内には無いであろう。クライアントプロセッサはウェブページ内のジャバスクリプトコード全てを実行し、初期エディタを表示し、ユーザがエディタと共にやりとりする際に、エディタを管理及び維持する。PHPスクリプトは、クライアントプロセッサ602に与えられないが、サーバ側のコードである。
【０１１３】
図３１は、ウェブページ中の要素を処理するプロセッサと共に、(例えば、メンバスケジュールエディタ302、プロジェクトスケジュールエディタ202及びタスク割当エディタ102のような)エディタ用のウェブページの構成要素を示す。PHPプロセッサはサーバ側にあり、ジャバスクリプトプロセッサはクライアント側にある。サーバ側のPHPプロセッサはPHP要素を実行し、クライアント側のジャバスクリプトプロセッサで実行されるジャバスクリプトコードを生成する。
【０１１４】
＜クライアントサーバー形式のプロジェクト計画システムでプロジェクト計画を管理する方法＞
図３２は、クライアントサーバー形式のプロジェクト計画管理システムと共にプロジェクト計画を管理する方法例を示すフローチャートを示す。図32に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する１つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図３５のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【０１１５】
ブロック3202では、クライアントサーバー形式のプロジェクトスケジュールシステムに関連するエディタを表示する要求に応答して、サーバは、データベース中の第１のスケジュール関連情報にアクセスする。例えば、タスク割当エディタ102(図1A)、メンバスケジュールエディタ302(図3A)又はプロジェクトスケジュールエディタ202(図2A)の何れかを要求するため、クライアントプロセッサ602(図６)におけるユーザはユーザインターフェースとやりとりを行う。その要求に応答して、サーバプロセッサ604(図６)はデータベース中のデータにアクセスし、例えばデータベース506(図５)内のデータ508及び/又はデータベース538(図５)内のデータ536にアクセスする。サーバプロセッサ604はPHPスクリプトコードを実行し、データベースから適切なデータを抽出し、要求しているユーザ及び対応するプロジェクトについて具体的に要求されたエディタに入力する。サーバがデータベースから抽出したデータは、ユーザが要求したエディタに特有であり、且つユーザid及びプロジェクトidのような要求に関連してユーザにより入力された様々な情報に特有である。あるエディタについての要求に応じてサーバがデータベースから抽出するデータは、初期情報を含み(もしあれば)、要求されたエディタのフィールドを埋める。
【０１１６】
ブロック3204では、要求しているクライアントによる実行に備えて、サーバは、クライアントの実行可能なコードを生成する。サーバで生成されるクライアントの実行可能なコードは、要求のエディタをクライアントで表示すること、抽出した情報をエディタの適切なフィールドで表示すること、及びクライアントでエディタを管理することに関する。例えば、サーバプロセッサ604(図６)はPHPスクリプトコードを実行し、抽出したデータを、クライアントプロセッサ602(図６)が実行可能なフォーマットに変換する。例えば、クライアントプロセッサ602がサーバのスクリプトコードを理解しない場合、サーバは抽出した情報をクライアントが理解及び使用できるフォーマットに処理する必要があり、例えばクライアントプロセッサ602で実行可能なジャバスクリプトコードで情報をラッピング(wrapping)する。burokku  3206では、クライアントの実行可能なコード及び第１のスケジュール関連情報を、実行に備えてサーバはクライアントに与える。
【０１１７】
付録A,C,Eはエディタ各々のコードリスト例を示し、コードリスト例は<script>タグで示されたジャバスクリプト及び<?php  and?>タグで囲まれたPHPスクリプトを示す。エディタページは、ウェブサーバ507，530(図５)のようなサーバプロセッサ604に保存される。ウェブブラウザのようなクライアントプロセッサ602がエディタページにアクセスする場合、PHPスクリプトがサーバプロセッサ604で実行され、PHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトコードで置換される。PHPスクリプトで生成されたものを含む全てのジャバスクリプトコードは、実行に備えてクライアントプロセッサ602に与えられる。
【０１１８】
ブロック3208では、クライアントの実行可能なコード又はそのようなコードの少なくとも一部分をクライアントが実行し、要求されたエディタで第１のスケジュール関連情報を表示し、概してデータ及びエディタを管理する。こうして、クライアント及びサーバプロセッサ各々に関する上記の処理に基づいて、要求されたエディタの初期表示が完了する。
【０１１９】
サーバにより生成されたクライアントの実行可能なコード(例えば、ジャバスクリプト)を実行することで、エディタページがクライアント側にロードされると、ユーザはエディタと共に編集及び/又は情報の追加を開始できる。そしてブロック3210では、クライアントはエディタを通じてユーザから第２のスケジュール関連情報を受信する。例えば、特定のエディタに依存して、タスク割当情報、メンバスケジュール情報又はプロジェクトスケジュール情報を、クライアントプロセッサ602は、エディタを介して入力を行うユーザから受信する。
【０１２０】
ブロック3212では、クライアントはクライアントの実行可能なコードの少なくとも一部を実行し、クライアント側のエディタで第２のスケジュール関連情報を管理及び/又は維持する。例えば、コードを実行することで、新規の又は更新されたデータをサーバに提示する前にそのようなデータをクライアントで維持するデータ構造及び関連性を用意し、(例えば、HTMLボタン、テキスト入力オブジェクト等)エディタページオブジェクトに組み込まれる機能を用意する。
【０１２１】
ブロック3214では、クライアントはエディタからサーバへ第２のスケジュール関連情報を渡す。そしてブロック3216において、サーバは第２のスケジュール関連情報をデータベースに保存し、データベース中のその情報には以後アクセス可能であり、要求に応じてクライアントに返すことができる。例えば、スケジュール関連情報は、(例えば、図1A,2A,3Aのような)エディタのページ各々のリクエストに応答して或いは(図1B,2B,3Bのような)エディタ各々に関連するウェブページのリクエストに応答して、サーバからクライアントに与えられてもよい。
【０１２２】
＜ネットワーク形式のプロジェクト計画システムでデータベースクエリを自動的に生成する方法＞
図３３は、ネットワーク形式のプロジェクト計画管理システムでデータベースクエリを自動的に生成する方法例を示すフローチャートである。図33に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する１つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図35のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【０１２３】
ブロック3302では、ネットワーク形式のプロジェクトスケジュールシステムの特定のエディタに関するリクエストに応答して、その特定のエディタに関連する特定の問い合わせ文字列が用意される。問い合わせ文字列は、「一定の問い合わせ文字列」とも言及され(図27〜29)、１つ以上のプレースホルダ文字列を含む。プレースホルダ文字列の置換物として渡される値に備えて、プレースホルダ文字列は、一定の問い合わせ文字列の中でプレースホルダとして機能する。例えばデータベース506及び／又はデータベース536のようなデータベースに提示するため、各プレースホルダ文字列はプレースホルダ文字列が置き換わる値のタイプを特定する。「値のタイプ」は、データタイプではなく、変数名に関連し、その変数名は対応するプレースホルダ文字列を置換するのに使用される値に対応する。図27,28を参照するに、例えば、プレースホルダ文字列‘%%ProjectNumber%%’はプロジェクト番号に関する値(例えば、“J17”)で置換され；プレースホルダ文字列‘%%MemberLabel%%’はプロジェクト番号のラベルに関する値(例えば、“T1”)で置換され；プレースホルダ文字列‘%%ProjectTaskID%%’はプロジェクトタスクのidに関する値(例えば、“40”)で置換され；これらが図面に示されている。C_ProjectNumberKey、C＿MemberLabelKey及びC_ProjectTaskIDKeyのようなプレースホルダ文字列の定数が文字列関数(例えば、PHPの場合、str_replace())で使用され、一定の問い合わせ文字列中のプレースホルダ文字列を発見し、そのプレースホルダ文字列を適切な値で置換する。
【０１２４】
ブロック3304では、特定の問い合わせ文字列中の１つ以上のプレースホルダ文字列を関連する値で自動的に置換することで、データベース問い合わせ信号(データベースクエリ)が生成される。例えばプレースホルダ文字列‘%%ProjectNumber%%’は“J17”で置換され；プレースホルダ文字列‘%%MemberLabel%%’は“T1”で置換され；プレースホルダ文字列‘%%ProjectTaskID%%’は“40”で置換される。
【０１２５】
図27を参照しながら説明したように、一実施例では、「プレースホルダ文字列の定数(コンスタント)」を使用して、何らかのプレースホルダ文字列の「一定の問い合わせ文字列」を探し、プレースホルダ文字列を或る値で置換する。
【０１２６】
図29を参照しながら説明したように、一実施例では、CXXXDBInterfaceクラス及びCYYYDBQueryGeneratorクラスは、サーバプロセッサ604(図６)に関連し、これらはブロック3304でデータベースクエリを作成するのに使用され、クエリ生成プロセスは、CXXXDBInterfaceクラスのプライベート関数に基づいてもよいし、CYYYDBQueryGeneratorクラスのパブリック関数に基づいてもよい。一実施例によれば、データベースのデータにアクセスするために同様なデータベースクエリを自動的に生成するため、特定の問い合わせ文字列は、変数文字列に割り当てられ(例えば、図28の$loc_sQuery)、プレースホルダ文字列の置換を許容する一方、再利用可能な問い合わせテンプレートとして機能する前提のコンスタント問い合わせ文字列を変えない。
【０１２７】
ブロック3306では自動的に生成されたデータベースの問い合わせがデータベースになされ、要求に応じてデータベース問い合わせの結果がブロック3308で返される。
【０１２８】
＜プロジェクト計画システムでタスクを管理する方法＞
図３４は、プロジェクト計画管理システムでタスクを管理する方法例を示すフローチャートである。図34に示される方法例はコンピュータ及び/又はマシンで実行される方法として実現され、コンピュータ又はマシンは、例えば命令を実行する１つ以上のプロセッサにより本方法ステップを実行する。例えば、本方法は図35のコンピュータシステム3500のようなコンピュータシステムにて又はコンピュータシステムにより実行されてもよい。
【０１２９】
ブロック3402では、エディタの表示テーブルの行に影響を及ぼすイベントに応答して、その影響を受けた行に対応するクラスオブジェクトは、そのクラスオブジェクトの１つ以上の属性に直接的にアクセスし、その属性は、プロジェクトスケジュールシステムに関するエディタの要素に対応する。表示テーブルの各行は、プロジェクトスケジュールに関するスケジュールタスクに対応し、エディタの要素に対応する値を表示する。重要なことに、クラスオブジェクトはその属性に直接的にアクセスできる(なぜならエディタの要素はクラスオブジェクトの属性として構築されているからである)。従って、クラスオブジェクトは、影響を受けた行の影響を受けた要素について要素idを構築する必要はなく、そのような要素を取得する必要もない。
【０１３０】
例えば、ネットワークスケジュールエディタ302(図3A)を介して、ユーザは特定のタスクのスケジュールデータを編集する。ユーザの編集は或るイベントを含み、そのイベントはメンバのスケジュールエディタのテーブルの行に影響する。メンバスケジュールエディタのXXXJavaScriptProcessor1410(図14)のクラスのメンバ関数(例えば、図15のCMemberScheduleTaskRowData1506)は、クラスのオブジェクトの属性として、要素に直接的にアクセスし、イベントに基づいて要素の属性を適切に修正する。その要素は行内のタスクに関する情報を維持し、その情報は、エディタのセッションが完了した際、サーバプロセッサに渡すことのできるものである。
【０１３１】
ブロック3404では、影響を受けた行に対応するクラスオブジェクトは、イベントに基づいて、クラスオブジェクトの１つ以上の属性各々の値を直接的に処理する。その例の場合、メンバスケジュールエディタ302のXXXJavaScriptProcessor1410のCMemberScheduleTaskRowData1506クラスのオブジェクトのメンバ関数は、オブジェクトの属性値を設定し、これによりメンバスケジュールエディタ302の要素の値を処理する。
【０１３２】
ブロック3406では、１つ以上の属性各々についての値をクライアントはサーバに送信し、その値は、ブロック3404で処理された属性値を含む。例えば、クライアントプロセッサ602(図６)は、メンバスケジュールエディタ302のXXXJavaScriptProcessor1410を形成し、処理したデータをサーバプロセッサ604(図６)に提示する。ブロック3408では、1つ以上の属性各々に対する値を、サーバはデータベースに保存する。例えば、サーバープロセッサ604は(図５の)データベース506，536のようなデータベースにデータを保存する。エディタのセッションが終了すると、テーブルの行の中で変化したタスク又はそのタスクについて加わった情報は、データベースで更新され又は追加される。
【０１３３】
＜設計パターン＞
「設計パターン(design  pattern)」は、オブジェクト指向システムで繰り返しなされる設計問題に対処する一般的な設計に関する。メンバスケジュールエディタの一般的設計は、タスク割当エディタ及びプロジェクトスケジュールエディタに適用される。図15〜18は、メンバスケジュールエディタの様々なパッケージのクラス設計例を示す。この設計は、図19〜22に示されるようにプロジェクトスケジュールエディタに、図23〜26に示されるようにタスク割当エディタに同様に使用される。各エディタの特性及び動作は異なるが、その設計パターンはシステムの全てのエディタで使用可能である。プロジェクトスケジュール管理システムに追加的なエディタが付加される場合、新たなエディタを設計及び実現する労力及び作業は、存在しているエディタの設計パターンに従うことでかなり削減できる。
【０１３４】
図３６は、エディタに対応するシステムの３つの主要なパッケージに着目したテーブル７のインデックス部分を示す。各エディタは図14で説明されたように４つのサブパッケージ(副パッケージ)を有する。サブパッケージ各々は、それらのプロセスを実行する同様なクラス構造を有する。様々なパッケージのクラスの記述は、エディタの設計パターンを示すのに役立つ。
【０１３５】
CTaskAssignmentTaskRowData3602、CProjectScheduleTaskRowData3612及びCMemberScheduleTaskRowData3622のクラスは、各自のXXXPHPProcessorパッケージの一部であり、データベースからタスク情報を取得し、クライアントコードを生成し、対応するエディタの行にタスク情報を表示する。CTaskAssignmentTaskRowData3602は、プロジェクトタスク、対応するメンバタスク、及びメンバに対するメンバタスクの割当に関する情報を取得する。CTaskAssignmentTaskRowData3602は、クライアントコードを生成し、プロジェクトタスク行及びメンバタスク行を、タスク割当エディタにおけるメンバ割当と共に表示する。CProjectScheduleTaskRowData3612は、プロジェクトタスク、対応するメンバタスク、及びタスクのスケジュールに関する情報を取得する。CProjectScheduleTaskRowData3612はクライアントコードを生成し、プロジェクトスケジュールエディタで対応するメンバタスクスケジュールと共にプロジェクトタスクスケジュールの行を表示する。CMemberScheduleTaskRowData3622は、メンバタスク、全ての詳細タスク(レベル４タスクに至るまで)及びタスクのスケジュールに関する情報を取得する。CMemberScheduleTaskRowData3622は、クライアントコードを生成し、メンバスケジュールエディタにて対応する詳細タスクスケジュールと共に、メンバタスクスケジュールの行を表示する。各エディタのパッケージXXXPHPProcessorはクラスを使ってコードを生成し、情報は異なるけれども、クライアントプロセッサのエディタでタスク行を表示する。
【０１３６】
CTaskAssignmentTable3604、CProjectTableManager3614、及びCTableManagerとCMemberScheduleTable3624との組み合わせのクラスは、各自のXXXJavaScriptProcessorの一部であり、対応するエディタの行及びテーブルを生成、管理及び維持する。メンバスケジュールエディタは、タスク割当エディタ及びプロジェクトスケジュールエディタと比較して複雑なので(即ち、異なるレベルでタスクを追加及び削除し、実際の日付を設定し、下位のタスクスケジュールを上位のタスクスケジュールと共に更新している)、２つのクラスを使ってテーブル及び行を管理する。エディタのテーブルに現れうるタイプのイベント及びテーブルの要素は異なるが、パッケージの設計で１つ以上のクラスで全て表現可能である。XXXJavaScriptProcessorパッケージは、テーブル、行及びセルのようなエディタの様々な部分に対応するクラスを含む。
【０１３７】
CTaskAssignmentUpdater3606、CProjectTaskUpdater3616及びCMemberTaskUpdater3626  のクラスは、PostXXXPHPProcessorパッケージ各々の一部であり、クライアントプロセッサで関連するエディタのセッションから与えられた情報と共に、データベース中のタスク情報を更新する。エディタでタスクについてなされた処理に依存して、データベース中のタスクについての情報を更新するのに適切な処理がなされる。処理タイプは様々なエディタの間で異なり、処理の詳細はクラスの設計の中で処理されるが、クラスの全体的な機能はデータベース中のタスク情報を更新することである。従って、エディタのセッションからエディタ全てのデータベースへ情報を提示するように、設計パターンは利用可能である。
【０１３８】
CTaskAssignmenWebPageManager3608、CProjectScheduleWebPageManager3618及びCMemberScheduleWebPageManager3628のクラスは、XXXWebPageGeneratorパッケージ各々の一部であり、そのパッケージは、タスク割当、プロジェクトスケジュール及びメンバスケジュールのそれぞれについてウェブページを生成するクラスを管理する。CTaskAssignmenWebPageManager3608は様々なクラスを使って、プロジェクトタスク及びメンバタスクを示すテーブルと共にウェブページを作成し、メンバタスクは、タスクに割り当てられたメンバ及びタスクの履歴を示す。
【０１３９】
CProjectScheduleWebPageManager3618は様々なクラスを使ってテーブルと共にウェブページを生成し、そのテーブルは、スケジュールの履歴と共にプロジェクトタスクスケジュール及びそのメンバのタスクスケジュールを示す。CMemberScheduleWebPageManager3628は、様々なクラスを使って、テーブルと共にウェブページを生成し、そのテーブルは、スケジュールの履歴に沿って詳細タスクと共にタスクスケジュールを示す。様々な情報を含むウェブページを生成する全てのエディタで同じ設計パターンが使用されている。
【０１４０】
CTaskAssignmenWebPageGeneratorDBInterface3610、CProjectWebPageDBInterfaceとCProjetWebPageDBQueryGenerator3620との組み合わせ、及びCWebPageDBInterfaceとCWebPageDBQueryGenerator3630との組み合わせのクラスは、データベースと共にインターフェースを処理するXXXWebPageGeneratorパッケージ各々の一部であり、タスク割当、プロジェクトスケジュール及びメンバスケジュール各々について、ウェブページを生成するのに必要なタスク情報にアクセスする。エディタに関する各クラス及びクラスの組み合わせは、データベースに問い合わせを行い、その問い合わせに応じて情報を取得するデータベースインターフェースを表現する。
【０１４１】
図36のパッケージのクラスの説明では、メンバスケジュールエディタのクラスは、他のエディタと同様なクラスを有する。従って、メンバスケジュールで使用された設計パターンは、他のエディタでも使用可能である。エディタのパッケージ各々は異なる動作を行うが、それでも同じ設計パターンを使用できる。
【０１４２】
＜付録＞
付録Ａはプロジェクトスケジュールエディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php  and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507，530(図５)のようなサーバプロセッサ604(図６)に保存される。ウェブブラウザのようなクライアントサーバ602(図６)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【０１４３】
付録Ａ
【数１】
0005396904.tif 000009
0005396904.tif 000010
0005396904.tif 000011
0005396904.tif 000012
【０１４４】
付録Ｂは付録Ａの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))。
【０１４５】
付録Ｂ
【数２】
0005396904.tif 000013
0005396904.tif 000014
0005396904.tif 000015
【０１４６】
タスク割当エディタ(付録Ｃ及びＤ)及びメンバスケジュールエディタ(付録Ｅ及びＦ)は、エディタを生成するウェブページに関し、プロジェクトスケジュールエディタに関する付録Ａ及びＢに示されるものと同様なフォーマットに従う。
【０１４７】
付録Ｃはタスク割当エディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php  and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507，530(図５)のようなサーバプロセッサ604(図６)に保存される。ウェブブラウザのようなクライアントサーバ602(図６)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【０１４８】
付録Ｃ
【数３】
0005396904.tif 000016
0005396904.tif 000017
0005396904.tif 000018
0005396904.tif 000019
【０１４９】
付録Ｄは付録ＣのPHPコードで生成されたジャバスクリプトコード例を示す。ジャバスクリプトコードはウェブページ中のPHPコードを置換する。ジャバスクリプトコードは、データベースから取得したタスクスケジューリング情報を含む。タスク情報は、処理するジャバスクリプトに渡される。また、ジャバスクリプトコードが生成され、オブジェクトを生成し、オブジェクトのメンバ関数を呼び出し、タスク割当エディタの初期表示を用意する(例えば、var  glo_EditorManager  =  new  CTaskAssignmentEditorManager(),  glo_EditorManager.setup_createEditor(“J99”),  and  glo_EditorManager.setup_addTopLevelTaskToEditor(“10”,”Project  Preparation”)  )。
【０１５０】
付録Ｄ
【数４】
0005396904.tif 000020
0005396904.tif 000021
【０１５１】
付録Ｅはメンバスケジュールエディタ用ウェブページのコードリスト例を示す。コードリスト例は、<script>タグで示されるジャバスクリプト及び<?php  and?>タグで囲まれたPHPスクリプトを示す。ウェブページは、ウェブサーバ507，530(図５)のようなサーバプロセッサ604(図６)に保存される。ウェブブラウザのようなクライアントサーバ602(図６)がウェブページにアクセスすると、サーバプロセッサ604でPHPスクリプトが実行され、そのPHPスクリプト全体は、PHPスクリプトが生成するジャバスクリプトで置換される。PHPスクリプトで生成されたものを含むジャバスクリプトコードの全ては、実行に備えてクライアントプロセッサ602に渡される。
【０１５２】
付録Ｅ
【数５】
0005396904.tif 000022
0005396904.tif 000023
0005396904.tif 000024
0005396904.tif 000025
0005396904.tif 000026
【０１５３】
付録Ｆは付録Ｅの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))。
【０１５４】
付録Ｆ
【数６】
0005396904.tif 000027
0005396904.tif 000028
0005396904.tif 000029
【０１５５】
＜クライアントブラウザウインドウで実行するインタープリタ型スクリプトコードを適切に終了すること＞
スクリプトコードは、Jscript及びECMAScriptのようなジャバスクリプトその他のスクリプト言語でプログラムされる。ネットスケープ(Netscape)で当初規定されるジャバスクリプトは、ウェブブラウザ拡張素子でオンザフライ(on-the-fly)で処理されるインタープリタ型言語である。様々なオープンソースのジャバスクリプトバージョンが、幅広く利用可能である。本実施例は、ネットスケープで規定されるようなジャバスクリプトに限定されず、或いはその用語が当初の狭義に使用されているようには限定されない。従って、本願で使用されているように、ジャバスクリプトという用語は、如何なるスクリプト型プログラミング言語にも広く関連し、ネットスケープによるジャバスクリプトだけでなく、JScript、ECMAScript等も含まれる。
【０１５６】
一実施例では、ウェブブラウザイネーブルクライアントは、ウェブサーバからのプロジェクトタスクエディタ用ウェブページを要求する。ウェブサーバはHTMLウェブページを返し、HTMLウェブページは、ウェブページと共に含まれている又はウェブサーバで生成された組込ジャバスクリプトを含み、ウェブサーバは、ジャバスクリプトがクライアントにより実行された場合に、タスク情報を含むタスクエディタを表示する。ウェブページは、クラス、グローバル関数(global  function)及びコンスタント(constant)に関するジャバスクリプトコードを含み、それらは、タスクエディタを生成、管理及び維持するためにウェブイネーブルクライアントで使用される。ジャバスクリプトコードは、ウェブページと共に包含され、或いはウェブサーバによりウェブページで生成される。ウェブイネーブルクライアントがエディタのウェブページを受信すると、タスクエディタの初期表示に備えて、クライアントプロセッサはウェブサーバにより生成されたジャバスクリプトコードを実行する。
【０１５７】
ジャバスクリプトコードは、ウェブページに含まれるクラスに対応するオブジェクトを生成し、タスクエディタを表示及び管理するグローバル関数を呼び出しながらクラスのメンバ関数を呼び出す。ジャバスクリプトコードの実行中に生じた異常状態に対処するため、ジャバスクリプトコードは、ジャバスクリプトTry及びCatchブロックステートメントのTryブロックで囲まれる。
【０１５８】
ジャバスクリプトコードに例外処理（例えば、グローバル関数など）を投入しながらトライアンドキャッチブロックステートメント(Try  and  Catch  Block  Statement)を使用して異常状態に対処することは、ウェブブラウザイネーブルクライアントで実行するジャバスクリプトコードの適切な終了(graceful  termination)を可能にする。ウェブブラウザイネーブルクライアントでタスクエディタを生成、管理及び実行する際に異常状態に対処する可能な他の方法は、エディタのセッションに関するメッセージを表示するウェブページへ、グローバル関数をリダイレクトする(グローバル関数の出力を変更する)ことを含む。グローバル関数は、異常状態の場所を示すメッセージを表示するデバッグの目的に有益であり、そのメッセージは、グローバル関数を呼び出した関数名、クラス、行番号及び／又はファイル名を含んでもよい。ジャバスクリプトは、診断の目的に合わせて、グローバル関数が呼び出された場所を特定するように修正されてもよい。
【０１５９】
図５は、プロジェクト管理システムを実現するクライアントサーバ動作環境例を示す。動作環境例は、複数のワークステーション、１つ以上のウェブサーバ及び１つ以上の関連するデータベースを有し、それらは全て直接的に又は間接的にソフトウエア開発ネットワークと通信するように接続されている。
【０１６０】
概して、ウェブサーバ507，530はエディタを表示及び管理するためのリソースを有する。ウェブサーバ507,530はデータベース506，536とそれぞれやりとりを行い、タスク割当及びタスクスケジュール情報(例えば、データ508，538)を保存、維持及び管理する。説明の便宜上、２つのウェブサーバ及び２つのデータベースが図５に描かれているが、他の実施例は、ウェブサーバ及びデータベースを幾つ使用してもよい。コンピュータワークステーション501，502のウェブブラウザは、ウェブサーバ507，530のリソースにアクセスし、エディタを表示する。プロジェクトメンバ又はプロジェクト管理者は、ネットワーク500(LAN又はWAN)を介してエディタにアクセスできる。プロジェクトタスク管理システムは、組織内の様々なレベルで(例えば、プロジェクト、課、部及び組織等の区分け毎に)プロジェクトを管理するように利用できる。
【０１６１】
ワークステーション501，502は、ウェブサーバ507，530のクライアントである。一実施例の場合、ワークステーション501，502は、典型的には、１つ以上のブラウザと共に構築されたコンピュータシステムであり、例えば、製品開発プロジェクトに関連するタスクを完了するために技術者／開発者により使用される。タスクの具体例は、プロジェクトを開始すること、タスク計画を立てること、タスク計画を管理すること、ソフトウエアアーキテクチャを設計すること、仕様を決めること、ソフトウエアコードを作成すること、ソフトウエアコードを実現及び検査すること、様々なタスク成果を検査すること等を含む。プロジェクト管理者は、ワークステーション501，502を使って情報にアクセスし、プロジェクトの進捗を再検討及び管理する。開発者及び管理者は、ネットワーク500を介して、接続された他の要素(例えば、ウェブサーバ507，530；データベース506，536；携帯用装置520及びラップトップ522)へ、アクセスポイント524を通じて情報を送る。
【０１６２】
ワークステーション501，502、携帯装置520及びラップトップ522は、ウェブサーバ507，530からウェブページにアクセスでき、ウェブページが含むジャバスクリプトを処理し、タスクエディタを管理し及びブラウザに含まれる他のアプリケーションを管理できる。ブラウザはブラウザ拡張要素(browser  add-in  component)を使用してジャバスクリプトを処理する。ブラウザ拡張要素の具体例は、アクティブXコントロール(ActiveX  Control)、ブラウザ拡張要素及びブラウザ支援オブジェクト(browser  helper  object)を含む。多くのブラウザ構成の場合、ジャバスクリプト拡張要素が用意され、ワークステーション501，502各々にインストールされたウェブブラウザが、ウェブサーバ507，530から受信したジャバスクリプトを処理できるようにする。
【０１６３】
ウェブサーバ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等のような非スクリプト言語が使用されてもよい。
【０１６４】
一般に、通信及び管理される情報は、ウェブサーバ507，530によりネットワーク500を介して提供される。データベース506，536は通常の如何なるリレーショナルデータベース言語でプログラムされてもよく、例えば、ORACLE，SQLサーバ(Sequel  Server)，MySQL，SQL，MS  ACCESS，DB2，MS  FOXBASE，DBASE，PostgreSQL及びPBASE等であるがこれらに限定されない。
【０１６５】
本願で説明されるプログラミング技法の更なる形態がウェブサーバ507，530で実現及び実行されてもよいが、これらの技法はそのような実施形態に限定されない。本技法は、ワークステーション501，502のような又は図35のコンピュータシステムのような他の如何なる処理システムで実現されてもよい。
【０１６６】
データベース506，536は、開発プロジェクトに関するデータ508，538を保存する一般的なデータベースを示し、ネットワーク500を介して伝送される問合(クエリ)を利用して、ワークステーション501，502における権限のある者は情報にアクセスできる。データベース506，536には如何なるタイプのデータが保存されてもよい。例えば、プロジェクト開始フォーム、メンバ及びプロジェクトタスク計画、仕様、ソフトウエアコード、検査報告、ウェブページファイル、ドキュメントディレクトリ及びインデックス等である。
【０１６７】
一実施例では、ネットワーク500はパケット交換ネットワークを形成し、（ワークステーション501，502、ウェブサーバ507，530及びデータベース506，536等のような)接続された様々な要素間での情報交換を促す。ネットワーク500は、イーサーネット、高速イーサーネット、トークンリング等のようなローカルエリアネットワーク(LAN)でもよいし、IEEE標準規格802.11a及び802.11bで規定されている無線LAN等でもよい。更に、ネットワーク500は、仮想プライベートネットワーク(VPN)により遠隔ユーザとの通信を促す１つ以上のインターネット網を介する広域ネットワーク(WAN)でもよいし、或いはネットワーク500はLAN及びWANの組み合わせでもよい。更に、ネットワーク500は多種多様な媒体を使って形成されてよく、例えば電気的なワイヤやケーブル、光学的な又は無線の接続でもよいが、これらに限定されない。
【０１６８】
図３７は、トライアンドキャッチブロックステートメント(Try  and  Catch  Block  statement)3705，3720が、クライアント側のタスクエディタアプリケーションを適切に終了する手段をもたらす様子を示す。一実施例では、ジャバスクリプト3700がウェブサーバ507からクライアント501へ送られる。ジャバスクリプト3700はウェブブラウザで処理される。ジャバスクリプト3700は、トライブロックステートメント(Try  Block  statement)3705内で実行される。トライブロックステートメント3705はスクリプト3700の各ラインを評価し、異常状態の存否を確認する。スクリプト3700の各ラインは、トライブロックステートメント3705内で実行され、スクリプト内の様々な箇所において、スクリプトは異常状態について評価又は検査される。異常状態は、適切でないオブジェクト、データの欠落、予期されていないデータ、オブジェクトの欠落、予期されていないオブジェクト及び／又は無効なデータ等を含む。異常状態が一切発見されなかった場合、スクリプトは最後まで実行し、通常的に終了する。
【０１６９】
しかしながら、異常状態が発見された場合(3710)、スクリプトはトライブロックステートメント3705内に例外を投入し、キャッチブロックステートメント(Catch  block  statement)の中で処理が再開されることを引き起こす。キャッチブロックステートメント3720は、異常状態3710を含むスクリプト内のラインを発見し、現在表示しているウェブページ3725をクリアする第２のグローバル関数を呼び出す(3725)。そして、エラーメッセージを含むウェブページを表示する第３のブローバル関数が呼び出され、エラーメッセージは、プロジェクトタスクエディタのセッションが止められたことをユーザに通知する。
【０１７０】
別の実施例の場合、クライアント側ウェブブラウザで実行するスクリプトを止めることは、ウェブサーバ507で生じた異常状態の結果としてウェブサーバ507から送られたジャバスクリプト3700により直接的になされてもよい。本実施例の場合、ジャバスクリプトは、第２及び第３のグローバル関数3725，3730を直接的に呼び出すステートメントを含み、現在表示しているウェブページ3725をクリアし、エラーメッセージを含むウェブページを表示し、エラーメッセージは、プロジェクトタスクエディタのセッションが止められたことをユーザに通知する。
【０１７１】
ジャバスクリプトの実行を止め、クライアントのブラウザウインドウをクリアし、エラーメッセージを表示するように、ジャバスクリプトで書かれたグローバル関数例は、以下のテーブル(表)１に示されている。
【０１７２】
テーブル１−終了用のグローバル関数例(付録Ｉ)
リスト１−ブラウザウインドウに表示される入力メッセージと共に例外を処理するグローバル関数。この関数は、トライブロックステートメントのコードの何処ででも呼び出し可能である。
【数７】
0005396904.tif 000030
【０１７３】
リスト２−グローバル関数は、<body>タグ内の全ての要素を消去することで、ブラウザウインドウをクリアする。
【数８】
0005396904.tif 000031
【０１７４】
リスト３−グローバル関数は、クライアントのブラウザウインドウで入力メッセージを表示する。
【数９】
0005396904.tif 000032
【０１７５】
トライ及びキャッチブロックステートメント3705，3720を含むジャバスクリプト例は、テーブル(表)２に示されている。
【０１７６】
テーブル２−トライアンドキャッチブロックステートメントを用いるコード例(付録Ｊ)
ジャバコードリスト−トライ及びキャッチブロックステートメントを使用して異常状態を取り扱うコードリスト例。プロジェクトタスク管理エディタのHTML<body>タグ内のサーバプロセッサ(ウェブサーバ)で生成されたジャバスクリプトコードは、ウェブページが、初期エディタを表示することを引き起こす。クライアント側のウェブブラウザは、トライブロック(Try  Block)のジャバスクリプトを実行する。エディタで使用される様々なクラスの関数のコードは、異常状態を検査する。何らかの異常状態に遭遇した場合、fglo_abnormalEnd()が呼び出され、トライブロック内でコードの実行を止める例外処理を開始し、コードの実行はキャッチブロックステート内で続く。
【数１０】
0005396904.tif 000033
0005396904.tif 000034
【０１７７】
図３８は、クライアント側のウェブブラウザの処理を示し、ウェブイネーブルクライアントによるスクリプトの実行中に、異常状態に遭遇した場合、トライアンドキャッチブロックステートメントを使用して、プロジェクトタスク管理システムのクライアント側スクリプトを終了する。
【０１７８】
ジャバスクリプトを含むウェブページがウェブサーバから受け取られると、クライアント側のウェブブラウザによる処理が始まる(ステップ3800)。受信したジャバスクリプトは、ステップ3805において、トライブロックステートメントで実行される。ジャバスクリプトの各行(ライン)は、トライブロックステートメントで実行される。スクリプト内の様々な場所が、異常状態について検査される。ステップ3810で異常状態が一切発見されなかった場合、クライアント側のウェブブラウザは、追加的なスクリプトが実行されるべきか否かをステップ3816で確認する。
【０１７９】
追加的なジャバスクリプトが実行される場合、ステップ3805において、処理はトライブロックステートメント内で続けられる。全てのジャバスクリプトが実行された場合、ジャバスクリプトの処理はステップ3830で終了する。ステップ3810で異常状態が確認された場合、第1のフローバル関数が呼び出され、例外処理が生じ、トライブロックステートメント内のジャバスクリプトの実行はステップ3820で止められる。ステップ3825では、キャッチブロックステートメント内でジャバスクリプトの動作がなされ、第２のグローバル関数は、現在表示されているウェブページをクリアし、第３のグローバル関数は、クライアント側のブラウザウインドウ内でウェブページを表示し、タスクエディタが不具合を有することをユーザに通知する。
【０１８０】
テーブル３は、グローバル関数fglo_abnormalEnd()を利用するシステムのサンプルコードを提供する。この関数を使用しなかった場合、エディタは適切に動作しないであろう。
【０１８１】
テーブル３−異常終了関数の利用(付録Ｋ)
リスト１−予測されていない入力値、存在しないメンバオブジェクト、ウェブページのエレメント(フォームエレメント)へのアクセスの失敗等は、処理の終了に至る。この関数はデバッグメッセージの利用を示す。
【０１８２】
【数１１】
0005396904.tif 000035
【０１８３】
リスト２−予測されていない及び無効な入力値、ウェブページのエレメント(セルエレメント)を作成することの失敗、オブジェクト生成の失敗等は、処理の終了に至る。
【数１２】
0005396904.tif 000036
【０１８４】
リスト３−予測されていない及び無効な入力値、ウェブページのエレメント(セルエレメント)を作成することの失敗等は、処理の終了に至る。
【数１３】
0005396904.tif 000037
【０１８５】
＜ハードウエア概要＞
図３５は、本発明の実施例を使用することができるコンピュータシステム3500を示すブロック図である。  ＜実現手段＞
図35は本発明の実施例で使用されるコンピュータシステム3500のブロック図を示す。更に、コンピュータシステム3500は、ワークステーション102（図１）及びウェブサーバ104(図１)の非限定的なシステム例を示す。  コンピュータシステム3500は、情報を通信するためのバス3502又は他の通信手段と、バス3502に結合された情報を処理するプロセッサ3504とを有する。コンピュータシステム3500は、ランダムアクセスメモリ(RAM)又は他のダイナミックストレージデバイスのようなバス3502に結合されたメインメモリ3506を有し、メインメモリはプロセッサ3504で実行される命令や情報を格納する。メインメモリ3506は、プロセッサ3504で実行される命令の実行中に、一時的な変数又は他の中間的な情報を格納するのに使用されてもよい。コンピュータシステム3500は、バス3502に結合されたリードオンリメモリ(ROM)又は他のスタティックストレージデバイスを更に含み、それらはプロセッサ3504のための命令や静的な情報を格納する。磁気ディスク、光ディスク又は光磁気ディスクのようなストレージデバイス3510は、情報及び命令を格納するために用意されてバス3502に結合される。
【０１８６】
コンピュータシステム3500は、コンピュータユーザに情報を表示するために、陰極線管(CRT)又は液晶ディスプレイ(LCD)のようなディスプレイ3512にバス3502を介して結合されてもよい。英数字その他のキーを含む入力装置3514は、情報及び命令選択内容をプロセッサ3504に通知するためにバス3502に結合される。他の種類のユーザ入力装置は、カーソル制御装置3516（例えば、マウス、トラックボール、又はカーソル方向キー）であり、指示情報及び命令選択をプロセッサ3504に通知し且つディスプレイ3512でのカーソルの動きを制御する。この入力装置は典型的には第１軸（例えば、ｘ）及び第２軸（例えば、ｙ）の２軸による２つの自由度を有し、装置が平面上の位置を指定できるようにする。
【０１８７】
本発明の実施例は、説明された技法を実現するコンピュータシステム3500を利用することに関連する。本発明の一実施例によれば、メインメモリ3506に含まれる１以上の命令の１以上のシーケンスを実行するプロセッサ3504に応じて、本技法はコンピュータシステム3500により実行される。そのような命令は、ストレージデバイス3510のような他のコンピュータ読取可能な媒体からメインメモリ3506に読み込まれてもよい。メインメモリ3506に含まれている命令シーケンスの実行は、本願で説明されるプロセスステップをプロセッサ3504が実行することを引き起こす。代替実施例では、本発明を実施するために、ハードワイヤード回路が、代替的に使用されてもよいし或いはソフトウエア命令との組み合わせで使用されてもよい。すなわち本発明の実施例はハードウエア回路及びソフトウエアの特定の如何なる組み合わせにも限定されない。
【０１８８】
ここで使用されているように「コンピュータ読取可能な媒体」なる用語は、命令をプロセッサ3504の実行に備えて提供することに関与する如何なる媒体にも関連する。そのような媒体は多くの形態をとってよく、限定ではないが、不揮発性媒体、揮発性媒体及び伝送媒体を含む。不揮発性媒体の具体例は、例えば、ストレージデバイス3510のような光磁気ディスクを含む。揮発性媒体は、メインメモリ3506のようなダイナミックメモリを含む。伝送媒体は、同軸ケーブル、銅線及び光ファイバを含み、バス3502を構成するワイヤを含む。伝送媒体は、無線電波及び赤外線データ通信の際に生成されるもののような、音波又は光波の形式をとってもよい。
【０１８９】
コンピュータ読取可能な媒体の一般的な形態は、フロッピディスク、フレキシブルディスク、ハードディスク、磁気テープその他の如何なる磁気媒体；CD-ROM、DVDその他の如何なる光媒体又は光磁気媒体；パンチカード、紙テープ又は穴のパターンを有する他の如何なる物理的媒体；RAM、PROM、EPROM、フラッシュEPROMその他のメモリチップ又はカートリッジ、上記のような搬送波又はコンピュータが読み取ることの可能な他の如何なる媒体をも含む。
【０１９０】
コンピュータ読取可能な様々な形態は、１以上の命令の１以上のシーケンスをプロセッサ3504の実行に備えて搬送する際にも適用可能である。例えば命令は初期には遠く離れたリモートコンピュータの磁気ディスクで搬送されてもよい。リモートコンピュータは自身のダイナミックメモリに命令をロードし、モデムを用いて電話回線を介して命令を送信してもよい。コンピュータシステム3500付近のモデムは電話回線でそのデータを受信し、赤外線送信機を用いてそのデータを赤外線信号に変換する。赤外線検出器は、赤外線信号で搬送されたデータを受信し、適切な回路がそのデータをバス3502に置く。バス3502はデータをメインメモリ3506に運び、プロセッサ3504はメインメモリから命令を抽出して実行する。メインメモリ3506で受信された命令は、プロセッサ3504で実行される前又は後にストレージデバイス3510に選択的に格納されてもよい。
【０１９１】
コンピュータシステム3500はバス3502に結合された通信インターフェース3518も含む。通信インターフェース3518は、ローカルネットワーク3522に接続されたネットワークリンク3520に結合する双方向データ通信をもたらす。例えば、通信インターフェース3518は、データ通信接続を対応するタイプの電話回線に与える統合サービスディジタルネットワーク(ISDN)カード又はモデムでもよい。別の例では、通信インターフェース3518は、データ通信接続をコンパチブルなLANに与えるローカルエリアネットワーク(LAN)カードでもよい。無線リンクが使用されてもよい。どの実現手段でも、通信インターフェース3518は、電気的な、電磁的な又は光学的な信号を送信及び受信し、様々なタイプの情報を表現するディジタルデータストリームを運ぶ。
【０１９２】
ネットワークリンク3520は典型的には１以上のネットワークを介して他のデータ装置とのデータ通信をもたらす。例えば、ネットワークリンク3520はローカルネットワーク3522を介してホストコンピュータ3524とのコネクションを提供する、或いはインターネットサービスプロバイダ(ISP)3526により運営されるデータ機器とのコネクションを提供する。そしてISP3526はデータ通信サービスをワールドワイドパケットデータ通信ネットワーク(今日、インターネット3528として一般に言及されている)を介して提供する。ローカルネットワーク3522及びインターネット3528の双方は、ディジタルデータストリームを搬送する、電気的な、電磁的な又は光学的な信号を使用する。様々なネットワークを介する信号や、ネットワークリンク3520及び通信インターフェース3518を介する信号は、コンピュータシステム3500に及びそこからディジタルデータを搬送し、例えば情報を伝送する搬送波の形式をとってもよい。
【０１９３】
コンピュータシステム3500は、ネットワーク、ネットワークリンク3520及び通信インターフェース3518を介して、メッセージを送信し及びプログラムコードを含むデータを受信する。インターネットの例では、サーバー3530はインターネット3528、ISP3526、ローカルネットワーク3522及び通信インターフェース3518を介して、アプリケーションプログラムに関する要求されたコードを送信するかもしれない。
【０１９４】
プロセッサ3504は受信したコードを受信したときに実行してもよいし、後の実行に備えてストレージデバイス3510又は他の不揮発性ストレージに格納してもよい。このようにコンピュータシステム3500は搬送波の形式でアプリケーションコードを取得してもよい。
【０１９５】
＜拡張及び代替＞
以上の記述により本願実施例が説明され、当業者は実施例を十分に理解するであろう。更に本発明は特定の実施例に関連して説明されてきた。しかしながら本発明の広範な概念から逸脱せずに、実施例に様々な修正及び変更がなされてもよいことは明らかであろう。従って本明細書及び図面は、限定的な意味ではなく例示として解釈されなければならない。
【０１９６】
更に、本説明では或るプロセスステップが特定の順序で説明され、アルファベット及び英数ラベルがステップを識別するために使用されたかもしれない。本説明において特に断りのない限り、実施例は、そのようなステップを実行する何らかの特定の順序に限定される必要はない。特に、ラベルは、ステップの便宜的な区別に使用されているに過ぎず、そのようなステップを実行する特定の順序を指定又は必須とするように意図されてはいない。
【０１９７】
本願で説明される様々な実施例の機能の実現は、ハードウエア、ソフトウエア、ファームウエア及び／又は他の利用可能な機能要素又は構築ブロックで等価的に実現可能である。特定の装置やプログラミングシーケンスに特に限定されるようには決して意図されていない。上記の教示に照らせば、他の変形例及び実施例が可能である。
【先行技術文献】
【特許文献】
【０１９８】
【特許文献１】米国特許第7,191,141号明細書
【符号の説明】
【０１９９】
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  サーバ
【図１Ａ】
0005396904.tif 000038
【図１Ｂ】
0005396904.tif 000039
【図２Ａ】
0005396904.tif 000040
【図２Ｂ】
0005396904.tif 000041
【図３Ａ】
0005396904.tif 000042
【図３Ｂ】
0005396904.tif 000043
【図４】
0005396904.tif 000044
【図５】
0005396904.tif 000045
【図６】
0005396904.tif 000046
【図７】
0005396904.tif 000047
【図８】
0005396904.tif 000048
【図９】
0005396904.tif 000049
【図１０】
0005396904.tif 000050
【図１１】
0005396904.tif 000051
【図１２】
0005396904.tif 000052
【図１３】
0005396904.tif 000053
【図１４】
0005396904.tif 000054
【図１５】
0005396904.tif 000055
【図１６】
0005396904.tif 000056
【図１７】
0005396904.tif 000057
【図１８】
0005396904.tif 000058
【図１９】
0005396904.tif 000059
【図２０】
0005396904.tif 000060
【図２１】
0005396904.tif 000061
【図２２】
0005396904.tif 000062
【図２３】
0005396904.tif 000063
【図２４】
0005396904.tif 000064
【図２５】
0005396904.tif 000065
【図２６】
0005396904.tif 000066
【図２７】
0005396904.tif 000067
【図２８】
0005396904.tif 000068
【図２９】
0005396904.tif 000069
【図３０】
0005396904.tif 000070
【図３１】
0005396904.tif 000071
【図３２】
0005396904.tif 000072
【図３３】
0005396904.tif 000073
【図３４】
0005396904.tif 000074
【図３５】
0005396904.tif 000075
【図３６】
0005396904.tif 000076
【図３６Ａ】
0005396904.tif 000077
【図３６Ｂ】
0005396904.tif 000078
【図３７】
0005396904.tif 000079
【図３８】
0005396904.tif 000080