(57)【要約】自己参照フィールドは、クライアントコンピュータとサーバーコンピュータとの間の双方向同期の同期パスにおいて同期される。同期オペレーションが実行されると、サーバーに関連付けられているサーバータスクのリスト、およびクライアントに関連付けられているプロジェクトタスクのリストがロードされる。同期されるタスク毎に、２つの先行作業リストが保持される。同期中に、比較を実行し、プロジェクトタスクデータを使用するのか、またはサーバータスクデータを使用するのかを確定する。プロジェクトタスクデータが使用される場合、プロジェクト先行作業リスト内に格納されている先行作業ＩＤが使用される。サーバータスクデータが使用される場合、サーバー先行作業リスト内に格納されている先行作業ＩＤが使用される。
2012527048.tif 000002
【特許請求の範囲】
【請求項１】
プロジェクト管理アプリケーションとコラボレーションアプリケーションとの間で自己参照フィールドを同期するための、コンピュータのプロセッサ上で実行される方法であって、
クライアントコンピューティングデバイス上に１つのプロジェクトに対するプロジェクトタスクをロードするステップ（４１０）と、
サーバーコンピューティングデバイス上に前記プロジェクトに対するコラボレーションタスクをロードするステップ（４１０）と、
それぞれのプロジェクトタスクについてプロジェクト先行作業リストを作成するステップ（４２０）と、
それぞれのコラボレーションタスクについてコラボレーション先行作業リストを作成するステップ（４３０）と、
それぞれのプロジェクトタスクおよび対応するコラボレーションタスクについて競合解決（５１０）を実行することによってプロジェクトタスクデータをいつ使用するか、また前記コラボレーションタスクデータをいつ使用するかを確定するステップと、
前記プロジェクト先行作業リスト（６２０）および前記コラボレーション先行作業リスト（６４０）にアクセスして、書き込みのために前記プロジェクト先行作業リストをいつ選択するか、また前記コラボレーション先行作業リストをいつ選択するかを確定するステップとを含むことを特徴とする方法。
【請求項２】
前記プロジェクトタスクデータが使用されるときに前記コラボレーション先行作業リストをクリアするステップ（５２５）をさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記コラボレーションタスクデータが使用されるときに前記プロジェクト先行作業リストをクリアするステップ（５４０）をさらに含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記コラボレーション先行作業リストがクリアされたときに前記プロジェクト先行作業リストを書き込むステップ（６３０）と、前記プロジェクト先行作業リストがクリアされたときに前記コラボレーション先行作業リストを書き込むステップ（６５０）とをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記コラボレーション先行作業リストがクリアされたときに前記プロジェクト先行作業識別子をコピーするステップ（５３０）と、前記プロジェクト先行作業リストがクリアされたときに前記コラボレーション先行作業識別子をコピーするステップ（５４５）とをさらに含むことを特徴とする請求項２に記載の方法。
【請求項６】
前記コラボレーション先行作業識別子と前記プロジェクト先行作業識別子との間のマッピングを実行するステップ（６２５、６４５）をさらに含むことを特徴とする請求項３に記載の方法。
【請求項７】
どのリストがクリアされるかに基づき前記マッピングを確定するステップ（６２５、６４５）をさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
クライアントコンピューティングデバイス上のタスク管理アプリケーションおよびサーバーコンピューティングデバイス上のコラボレーションアプリケーションのタスクに関連付けられている自己参照識別子を同期するためのコンピュータ実行可能命令を収容したコンピュータ可読記憶媒体であって、
クライアントとサーバーとの間でタスクを含むプロジェクトに対しプロジェクトデータを同期する同期セッション（３０８）を開始するステップと、
前記プロジェクトについてタスクをロードし（４１０）、タスク毎にプロジェクト先行作業リストおよびコラボレーション先行作業リストを作成するステップ（４２０、４３０）であって、前記プロジェクト先行作業リストは、前記プロジェクトタスクが先行作業を有しているときに少なくとも１つのプロジェクト先行作業識別子を含み、前記コラボレーション先行作業リストは、前記コラボレーションタスクが先行作業を有しているときに少なくとも１つのコラボレーション先行作業識別子を含む、ステップと、
プロジェクトタスクデータをいつ使用するか、またそれぞれのタスクを同期するときにコラボレーションタスクデータをいつ使用するかを確定するステップ（５２０）と、
前記同期の書き込みフェーズにおいて、プロジェクトタスクデータが使用されるときに前記プロジェクト先行作業リストを書き込み、コラボレーションタスクデータが使用されるときに前記コラボレーション先行作業リストを書き込むステップ（５５０）とを含むことを特徴とするコンピュータ可読記憶媒体。
【請求項９】
前記プロジェクトに対するタスクをロードするステップは、前記サーバーからコラボレーションタスクをロードし、前記クライアントからプロジェクトタスクをロードするステップ（４１０）を含むことを特徴とする請求項８に記載のコンピュータ可読記憶媒体。
【請求項１０】
プロジェクトタスクデータが使用されるときに前記コラボレーション先行作業リストをクリアするステップ（５２５）と、プロジェクトタスクデータが使用されるときに前記プロジェクト先行作業リストをクリアするステップ（５４０）とをさらに含むことを特徴とする請求項９に記載のコンピュータ可読記憶媒体。
【請求項１１】
クリアされていない先行作業リスト内に識別子があればそれを前記クリア済みリスト内の対応する識別子にマッピングするステップと、どの先行作業リストがクリアされるかに基づきどの先行作業リストに書き込むかを確定するステップ（６２５、６４５）とをさらに含むことを特徴とする請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１２】
クライアントとサーバーとの間の同期の単一パスにおいて自己参照フィールドを同期するためのシステムであって、
プロセッサ（５）およびコンピュータ可読媒体（１４）と、
前記コンピュータ可読媒体上に格納され、前記プロセッサ上で実行される動作環境（１６）と、
クライアント上で動作するプロジェクト管理アプリケーション（２７）と、
サーバー上で動作する同期アプリケーション（２６）と、
タスクを実行するように構成された同期モジュールであって、前記タスクは、
前記クライアントと前記サーバーとの間でタスクを含むプロジェクトに対しプロジェクトデータを同期する同期セッション（３０８）を開始するステップと、
前記プロジェクトについてタスクをロードし（４１０）、タスク毎にプロジェクト先行作業リストおよびコラボレーション先行作業リストを作成するステップ（４２０、４３０）であって、前記プロジェクト先行作業リストは、前記プロジェクトタスクが先行作業を有しているときに少なくとも１つのプロジェクト先行作業識別子を含み、前記コラボレーション先行作業リストは、前記コラボレーションタスクが先行作業を有しているときに少なくとも１つのコラボレーション先行作業識別子を含み、前記プロジェクトに対するタスクをロードするステップは、前記サーバーからコラボレーションタスクをロードし、前記クライアントからプロジェクトタスクをロードするステップを含む、ステップと、
プロジェクトタスクデータをいつ使用するか、またそれぞれのタスクを同期するときにコラボレーションタスクデータをいつ使用するかを確定するステップ（５２０）と、
プロジェクトタスクデータが使用されるときに前記プロジェクト先行作業リストを書き込み（６３０）、コラボレーションタスクデータが使用されるときに前記コラボレーション先行作業リストを書き込むステップ（６５０）とを含む、同期モジュールと
を備えることを特徴とするシステム。
【請求項１３】
プロジェクトタスクデータが使用されるときに前記コラボレーション先行作業リストをクリアするステップ（５２５）と、プロジェクトタスクデータが使用されるときに前記プロジェクト先行作業リストをクリアするステップ（５４０）とをさらに含むことを特徴とする請求項１２に記載のシステム。
【請求項１４】
クリアされていない先行作業リスト内に識別子があればそれを前記クリア済みリスト内の対応する識別子にマッピングするステップ（６２５、６４５）をさらに含むことを特徴とする請求項１３に記載のシステム。
【請求項１５】
どの先行作業リストがクリアされるかに基づきどの先行作業リストに書き込むかを確定し、前記クライアント上でタスクに対する前記先行作業識別子を書き込み、前記サーバー上で前記先行作業識別子を書き込む（６３０、６５０）ことを特徴とする請求項１２に記載のシステム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、双方向同期における自己参照フィールドの同期に関する。
【背景技術】
【０００２】
ユーザーは、タスク管理アプリケーションソフトウェアによって、プロジェクトを効率的に、また効果的に管理することができる。プロジェクトマネージャは、１つのプロジェクトを複数のタスクに分けて構成し、複数の特定のユーザーにタスクを割り当て、タスクにリソースを配分することができる。タスク管理ソフトウェアは、仕事の流れを制御し、相互に関係するタスクをリンクし、プロジェクトの期限が確実に守られるようにすることができる。
【０００３】
タスク管理情報は、相互に関係するデータを共有する２つまたはそれ以上のコンピュータシステム上に格納することができる。それらのシステムにおいて同じデータへの更新が許容される場合、特に相互に関係するデータが逐次的に関係するタスクを含むときに、競合が発生する可能性がある。例えば、１つのシステム上のユーザーがタスクの開始日を変更すると、相互に関係するタスクに対する開始日および完了日も変化する可能性がある。
【発明の概要】
【０００４】
この「課題を解決するための手段」は、以下の「発明を実施するための形態」でさらに説明される概念の抜粋を簡素化された形式で紹介するために提供される。この「課題を解決するための手段」は、請求された主題の重要な特徴または本質的な特徴を識別することを意図されていないし、また請求された主題の範囲を定める補助手段として使用されることも意図されていない。
【０００５】
自己参照フィールド（Ｓｅｌｆ−ｒｅｆｅｒｅｎｃｉｎｇ  ｆｉｅｌｄｓ）は、クライアントコンピュータとサーバーコンピュータとの間の双方向同期の同期パスにおいて同期される。同期オペレーションが実行されると、サーバー上のプロジェクトに関連付けられているコラボレーションタスク（ｃｏｌｌａｂｏｒａｔｉｏｎ  ｔａｓｋｓ）のリスト、およびクライアント上のプロジェクトに関連付けられているプロジェクトタスクのリストがロードされる。同期するそれぞれのタスクについて、プロジェクト先行作業リスト（ｐｒｏｊｅｃｔ  ｐｒｅｄｅｃｅｓｓｏｒ  ｌｉｓｔ）およびコラボレーション先行作業リスト（ｃｏｌｌａｂｏｒａｔｉｏｎ  ｐｒｅｄｅｃｅｓｓｏｒ  ｌｉｓｔ）を含む２つのリストが保持される。同期中に、それぞれのタスクについて比較を実行し、プロジェクトタスクデータを使用するのか、またはコラボレーションタスクデータを使用するのかを確定する。プロジェクトタスクデータが使用される場合、コラボレーション先行作業リストがクリアされ、プロジェクト先行作業リストに、対応するプロジェクト先行作業ＩＤが書き込まれる。コラボレーションタスクデータが使用される場合、プロジェクト先行作業リストがクリアされ、コラボレーション先行作業リストに、対応するコラボレーション先行作業ＩＤが書き込まれる。同期の書き込みフェーズにおいて、プロジェクト先行作業リストおよびコラボレーション先行作業リストが、どのような先行作業ＩＤを書き込むべきかを確定するために使用される。プロジェクトタスクが書き込まれていて、プロジェクト先行作業リストが空でない場合、プロジェクト先行作業リストが使用される。プロジェクト先行作業リストが空であるが、コラボレーション先行作業リストが空でない場合、コラボレーション先行作業ＩＤが使用される。
【図面の簡単な説明】
【０００６】
【図１】あるコンピュータのコンピュータアーキテクチャを例示する図である。
【図２】自己参照フィールドを同期するための例示的な同期システムを示す図である。
【図３】プロジェクト管理システムでタスク管理アプリケーションソフトウェアを実行する例示的なクライアントコンピュータを示す図である。
【図４】自己参照フィールドを同期するための同期の読み込みフェーズにおけるプロセスを示す図である。
【図５】同期オペレーションの比較フェーズに基づいて先行作業リストを調整するためのプロセスを例示する図である。
【図６】同期オペレーションの書き込みフェーズにおいて自己参照フィールドを同期するためのプロセスを例示する図である。
【図７】クライアントコンピュータおよびサーバーコンピュータ上で相互に関係するデータ間の競合を解決するためのプロセス７００を示す図である。
【図８】競合解決を含む例示的な同期オペレーションの流れ図である。
【発明を実施するための形態】
【０００７】
次に、類似の番号は同様の要素を表す、図面を参照しつつ、さまざまな実施形態について説明する。特に、図１およびそれに対応する説明は、実施形態を実装できる好適なコンピューティング環境について簡潔に述べた一般的な説明であることが意図されている。
【０００８】
一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造、および他の種類の構造を含む。ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家電製品、ミニコンピュータ、メインフレームコンピュータ、および同様のものを含む、他のコンピュータシステム構成も使用できる。通信ネットワークを通じてリンクされているリモート処理デバイスによりタスクが実行される分散コンピューティング環境も使用できる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートの両方の記憶装置デバイス内に配置されうる。
【０００９】
次に、図１を参照しつつ、さまざまな実施形態において使用されるコンピュータ１００の例示的なコンピュータアーキテクチャについて説明する。図１に示されているコンピュータアーキテクチャは、デスクトップ、サーバー、またはモバイルコンピュータとして構成することができ、中央演算処理装置５（「ＣＰＵ」）、ランダムアクセスメモリ９（「ＲＡＭ」）および読み出し専用メモリ（「ＲＯＭ」）１０を含むシステムメモリ７、およびメモリをＣＰＵ  ５に結合するシステムバス１２を備える。起動時などにコンピュータ内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システムは、ＲＯＭ  １０に格納される。コンピュータ１００は、以下でさらに詳しく説明される、オペレーティングシステム１６、アプリケーションプログラム２４、および他のプログラムモジュールを格納するための大容量記憶装置デバイスをさらに備える。
【００１０】
大容量記憶デバイス１４は、バス１２に接続されている大容量記憶装置コントローラ（図示せず）を通じてＣＰＵ  ５に接続されている。大容量記憶装置デバイス１４およびその関連するコンピュータ可読媒体は、コンピュータ１００用の不揮発性記憶域を提供する。本明細書に記載されているコンピュータ可読媒体の説明では、ハードディスクまたはＣＤ−ＲＯＭドライブなどの大容量記憶装置デバイスに言及しているが、コンピュータ可読媒体は、コンピュータ１００によってアクセスできる利用可能な任意の媒体とすることができる。
【００１１】
例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納するための方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。コンピュータ記憶媒体としては、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたはその他のソリッドステートメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（「ＤＶＤ」）、またはその他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、または所望の情報を格納するために使用することができ、しかもコンピュータ１００によりアクセスできる他の媒体が挙げられる。
【００１２】
さまざまな実施形態により、コンピュータ１００は、インターネットなどの、ネットワーク１８を通じてリモートコンピュータへの論理的接続を使用しネットワーク接続環境において動作する。コンピュータ１００は、バス１２に接続されているネットワークインターフェイスユニット２０を通じてネットワーク１８に接続することができる。ネットワーク接続は、有線方式および／または無線方式としてよい。ネットワークインターフェイスユニット２０は、他の種類のネットワークおよびリモートコンピュータシステムに接続するために使用することもできる。コンピュータ１００は、キーボード、マウス、または電子スタイラス（図１には示されていない）を含む、多数の他のデバイスから入力を受け取り、処理するための入出力コントローラ２２を備えることもできる。同様に、入出力コントローラ２２は、ユーザーインターフェイス２８を備えるディスプレイ画面、プリンタ、または他の種類の出力デバイスへの出力を行うことができる。
【００１３】
上で簡単に述べたように、コンピュータ１００の大容量記憶装置デバイス１４およびＲＡＭ  ９に、ワシントン州レドモンド所在のＭＩＣＲＯＳＯＦＴ  ＣＯＲＰＯＲＡＴＩＯＮ社のオペレーティングシステムＷＩＮＤＯＷＳ（登録商標）  ＶＩＳＴＡ（登録商標）などの、ネットワーク接続されたパーソナルコンピュータのオペレーションを制御するのに適しているオペレーティングシステム１６をふくむ、多数のプログラムモジュールおよびデータファイルを格納することができる。大容量記憶装置デバイス１４およびＲＡＭ  ９には、１つまたは複数のプログラムモジュールを格納することもできる。特に、大容量記憶装置デバイス１４およびＲＡＭ  ９には、１つまたは複数のアプリケーションプログラム２４を格納することができる。アプリケーションプログラムの１つは、ＭＩＣＲＯＳＯＦＴ  ＰＲＯＪＥＣＴ（登録商標）などのプロジェクト管理アプリケーション２７とすることができる。サーバーとして構成されている場合、アプリケーションプログラムのうちの１つは、ＷＩＮＤＯＷＳ（登録商標）  ＳＨＡＲＥＰＯＩＮＴ  ＳＥＲＶＩＣＥＳ（ＷＳＳ）などのコラボレーションプログラムとしてもよい。
【００１４】
ユーザーインターフェイス（ＵＩ）２８は、プロジェクト管理アプリケーション２７、サーバー上に保持されるコラボレーションアプリケーション、さらには他のアプリケーションとインタラクティブにやり取りするための視覚的な方法をユーザーに提供するように設計されたものである。例えば、ＵＩ  ２８を使用してタスクのリストを表示し、このリストから編集するタスクをユーザーに選択させることができる。ＵＩ  ２８は、タスクの優先度を追加したり、または変更したりするためにも使用できる。
【００１５】
同期アプリケーション２６は、プロジェクト管理アプリケーションを実行するクライアントコンピューティングデバイスとコラボレーションアプリケーションを実行するサーバーコンピューティングデバイスとの間で自己参照フィールドを同期することを含む同期オペレーションを実行するように構成されている。
【００１６】
図２は、自己参照フィールドを同期するための例示的な同期システム２００を示している。例示されているように、システム２００は、クライアント２０１、サーバー２０４、およびネットワーク２０６を含む。１つのクライアントおよびサーバーのみが例示されているが、システム２００は、さらに多くのクライアントおよび／またはサーバーを備えることができる。
【００１７】
典型的には、１つのクライアントコンピュータ、例えばクライアントコンピュータ２０１は、プロジェクトが相互に関係する複数のタスクに分けて構成されるプロジェクト管理アプリケーションソフトウェアプログラム２２０を実行する。タスク管理アプリケーションソフトウェアを実行する例示的なプロジェクト管理システムとして、ワシントン州レドモンド所在のＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ社のＭｉｃｒｏｓｏｆｔ  Ｐｒｏｊｅｃｔ  ２００７が挙げられる。典型的には、サーバーコンピュータ２０４は、やはりＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ社のＷｉｎｄｏｗｓ（登録商標）  Ｓｈａｒｅｐｏｉｎｔ  Ｓｅｒｖｉｃｅｓ（ＷＳＳ）などのコラボレーションおよびドキュメント管理ソフトウェアプログラム２１０を実行する。例示的なクライアント２０１は、ネットワーク２０６を介してウェブサービスおよび／またはウェブブラウザを使用し、サーバー２０４上のコラボレーションアプリケーション経由で格納されているプロジェクト管理タスクリストにアクセスすることができる。
【００１８】
例示的なタスク管理アプリケーションは、多くの相互に関係するタスクを含みうる。１つまたは複数のタスクが、先行作業タスクへの依存関係を含んでいる可能性がある。例えば、タスクＢは、タスクＡが完了するまで開始することが許されない場合がある。そのようなものとして、タスクＡはタスクＢの先行作業タスクである。同様に、タスクＥが、タスクＢ、Ｃ、およびＤが完了するまで開始することが許されない場合がある。そのようなものとして、タスクＢ、Ｃ、およびＤは、タスクＥの先行作業タスクである。
【００１９】
Ｍｉｃｒｏｓｏｆｔ  Ｐｒｏｊｅｃｔ  ２００７などのタスク管理アプリケーションは、典型的には、１人、例えば、プロジェクトマネージャによって制御される。しかし、チームメンバーが、自分たちに割り当てられたタスクにアクセスし、それらのタスクの計画された完了日および進捗度ステータスを更新することができることが望ましい。ＷＳＳのようなオンラインコラボレーションプログラムでは、タスクリストをサーバーコンピュータ、例えばサーバー２０４に格納しておき、ユーザー、例えばクライアント２０１上のユーザーは、それらのタスクリストにアクセスし、しかるべきときにそれらのタスクリストに変更を加えることができる。プロジェクトマネージャまたはチームメンバーによって加えられた変更は、クライアントとサーバーとの間で同期をとる必要があり、実際の競合を解決する必要がある。クライアントとサーバーとの間で同期をとるときに、それぞれのタスクに対する自己参照先行作業ＩＤ（つまり、他のアイテムを指すデータを含むフィールド）の同期もとる。しかし、典型的には、クライアントに関連付けられている先行作業ＩＤは、サーバー上のコラボレーションソフトウェアに対する先行作業ＩＤと一致しない。この例では、先行作業ＩＤは、クライアント２０１とサーバー２０４との間で異なる。例えば、サーバー上のコラボレーションアプリケーションに関連付けられているタスクに対するＩＤは、クライアント上のプロジェクト管理アプリケーションに関連付けられているタスクに対する対応するＩＤと異なる。
【００２０】
同期処理アプリケーションは、２つの先行作業リストを作成する。一方の先行作業リストは、プロジェクト先行作業のＩＤに対するリストであり、他方のリストは、コラボレーション先行作業に対するリストである。同期処理の比較および修正段階において、これらのリストはクリアされ、アイテム毎に上書きされうる。同期処理の書き込み段階で、これらのリストを調べて、どのようなデータを書き込むべきかを確定する（つまり、プロジェクトタスクデータまたはコラボレーションタスクデータ）。同期処理アプリケーションが現在、プロジェクトデータを書き込んでいる場合、クリアでない限りプロジェクト先行作業リストは書き込まれ、その場合，コラボレーション先行作業リストは、プロジェクトＩＤにマッピングされ、次いで書き込まれる。同期処理アプリケーションが現在、コラボレーションデータを書き込んでいる場合、クリアでない限りコラボレーション先行作業リストは書き込まれ、その場合，プロジェクト先行作業リストは、プロジェクトＩＤにマッピングされ、次いで書き込まれる。２つのリストを保持することで、クライアント２０１とサーバー２０４との間の単一パスの同期を実行しやすくなる。
【００２１】
一実施形態によれば、上述のように、クライアント２０１上のプロジェクト管理アプリケーション２２０およびサーバー２０４上のコラボレーションアプリケーション２１０は、ＩＤを使用してプロジェクト内のタスクに対する先行作業を定義する。例えば、プロジェクト管理アプリケーション２２０に対するプロジェクトは、ＩＤ  ４および５を持つ２つのタスクを有することができ、タスク５は、タスク４の先行作業タスクとすることが可能である。同様に、コラボレーションアプリケーション２１０とともに格納される対応するプロジェクトは、タスク４および５をタスク１４および１５として格納することができる。プロジェクト管理アプリケーション２２０とコラボレーションアプリケーション２１０との間で関係するタスクを関連付けるために、プロジェクトタスクＩＤとコラボレーションタスクＩＤとの間のマッピングが保持される。例えば、クライアント２０１上で、プロジェクト管理アプリケーション２２０に関連付けられているタスク５は、コラボレーションアプリケーションのタスク１４と同期されることを示すフィールドにマッピングされる。同様のマッピングが、サーバー２０４上にも存在する。
【００２２】
クライアント２０１とサーバー２０４との間の同期オペレーション実行時に、プロジェクトタスクおよびコラボレーションタスクが別々のデータ構造に読み込まれ、これにより、同期アプリケーション２１２は、基礎となるデータに影響を及ぼすことなくデータを比較し、修正することができる。これらのデータ構造は、上述の２つの先行作業リスト（プロジェクトＩＤを格納するプロジェクト先行作業リストとコラボレーションＩＤを格納するコラボレーション先行作業リスト）を含む。同期オペレーションの「読み込みフェーズ」において、プロジェクト管理アプリケーション２２０およびコラボレーションアプリケーション２１０に関連付けられている先行作業が、それらの各リスト内に読み込まれる。例えば、プロジェクトタスクでは、最初に、プロジェクト先行作業リストの書き込みが行われ、コラボレーションタスクでは、最初に、コラボレーション先行作業リストの書き込みが行われる。
【００２３】
同期の比較フェーズでは、どのようなタスクをマージし、潜在的に上書きするのかを確定する。例示的な比較フェーズについては、図７および８ならびに関係する説明を参照されたい。他の比較アルゴリズムも使用することができる。先行作業を受け入れるために、プロジェクトタスクが比較フェーズにおいて「勝つ」（つまり、コラボレーションタスク内のデータを上書きする）ときには必ず、コラボレーションタスクのコラボレーション先行作業リストがクリアされ、プロジェクト先行作業リストに、対応するプロジェクトＩＤが書き込まれる。コラボレーションタスクが比較フェーズにおいて「勝つ」（つまり、プロジェクトタスク内のデータを上書きする）ときには必ず、プロジェクトタスクのプロジェクト先行作業リストがクリアされ、コラボレーション先行作業リストに、対応するコラボレーションＩＤが書き込まれる。
【００２４】
書き込みフェーズにおいて、これら２つの先行作業リストを使用して、先行作業情報をどのように書き込むかを確定する。プロジェクトタスクが書き込まれていて、プロジェクト先行作業リストが空でない場合、その先行作業リストが使用されるが、プロジェクトアイテムが同期の比較フェーズにおいて「勝った」からである。しかし、プロジェクト先行作業リストが空であり、コラボレーション先行作業リストが空でない場合、コラボレーション先行作業リストＩＤが使用されるが、それは、プロジェクトタスクが比較フェーズにおいて「負けた」からである。上述のように、プロジェクトタスクＩＤとコラボレーションタスクＩＤとの間のマッピングを使用して、クライアント２０１からのＩＤをサーバー２０４に、サーバー２０４からのＩＤをクライアント２０１にマッピングする。例えば、コラボレーションＩＤからは、プロジェクトＩＤを確定することができるが、それは、そのアイテムの同期がすでにとられているか（したがって、対応するプロジェクトＩＤをすでに持っているか）、またはタスクがプロジェクト管理アプリケーション２２０に対するプロジェクトにおいてちょうど作成されたばかりであり、したがって正しいプロジェクトＩＤがコラボレーションＩＤに基づいているからである。同期処理時にタスクが削除されると、次いで「書き込み」フェーズにおいて、この削除は検出され、アイテムが削除されてしまっているアイテムへの先行作業を有している場合にその先行作業は書き込まれない。他の実施形態によれば、比較フェーズにおいて「負ける」リストをクリアする代わりに、それらの先行作業リストをマージすることができ、その場合、両方のリストが使用される。
【００２５】
図３は、Ｍｉｃｒｏｓｏｆｔ  Ｐｒｏｊｅｃｔ  ２００７などのプロジェクト管理システムでタスク管理アプリケーションソフトウェアを実行する例示的なクライアントコンピュータ３００を示している。例示的なクライアントコンピュータ３００は、例示的なユーザーインターフェイスモジュール３０４および例示的なプロジェクトエンジンモジュール３１０を備える。例示的なプロジェクトエンジンモジュール３１０内には、同期モジュール３１２が収められている。
【００２６】
例示的なユーザーインターフェイスモジュール３０４を使用することで、ユーザーは、タスク、リソース、および割り当てのようなプロジェクトエンティティをプロジェクト管理システムに入力することができる。これらのエンティティは、典型的にはテーブル内に格納され、したがって、典型的には、タスク用のテーブル、リソース用のテーブル、および割り当て用のテーブルがあることになる。プロジェクトタスクに関連付けられるのが、そのタスクに関係する１つまたは複数の属性である。これらの属性は、タスクテーブル内の列に対応する。いくつかの例示的な属性は、タスクの名前、所有者、開始日、完了日、プロジェクト期間、およびステータスである。それぞれのタスクは、そのタスクを識別するための一意的なプロジェクト識別子をも有する。
【００２７】
ユーザーは、例示的なプロジェクト管理システム内で利用可能にされている複数の属性から属性を選択することができる。例示的なユーザーインターフェイスモジュール３０４において、ユーザーは、それらの属性または利用可能な属性のうちの１つまたは複数を選択し、それらの属性を１つのタスクに関連付けることができる。例示的なユーザーインターフェイスモジュール３０４において、ユーザーは、それぞれのタスクに対しサーバーコンピュータ上で利用可能にされている１つまたは複数の属性を選択することもできる。サーバー属性は、典型的には、タスクの名前、所有者、開始日、完了日、プロジェクト期間、およびステータスを含む。結果は、タスク管理システムによって監視される、それぞれのタスクに関連付けられているクライアントおよびサーバーの一組の属性である。
【００２８】
例示的なプロジェクトエンジンモジュール３１０は、プロジェクト管理システムを実行するソフトウェアエンジンを備える。１つまたは複数のタスクを、親／子関係で他のタスクにリンクすることができる。１つまたは複数のタスクが、他のタスクとの先行作業または後続作業の関係を有することができる。開始日またはタスク期間が１つのタスクについて変更になった場合、例示的なプロジェクトエンジンモジュール３１０は、すべてのリンクされているタスクの結果の開始日および終了日を計算し、プロジェクト管理システムにおけるそれらのタスクに対する日付を更新する。
【００２９】
例示的な同期モジュール３１２は、クライアントコンピュータ、例えば、図２に例示されているクライアント２０１とサーバーコンピュータ２０４との間のタスクの同期処理を制御する。同期モジュール３１２は、それぞれのタスクに対するチェンジリストおよびビットマスクも備えることができる。チェンジリストは、クライアントコンピュータ２０１とサーバーコンピュータ２０４との間で同期をとることができるそれぞれのタスクに対する属性のリストである。チェンジリストは、ユーザーインターフェースモジュール３０４を介してユーザーによって選択されたタスクに対するクライアント２０１およびサーバー２０４の属性に対応する。ビットマスクは、チェンジリスト内のそれぞれの属性に対するビットを含むデータ構造である。例えば、対応する属性がクライアントコンピュータ２０１上で変化した場合に、ビットマスク内にビットをセットすることができる。同期モジュール３１２は、これらのビットマスクを使用して、クライアントコンピュータ２０１上でどの属性が変化したかを確定し、それらの属性をサーバーコンピュータ２０４上の対応する属性と同期させることができる。
【００３０】
次に図４〜７を参照して、プロジェクトアプリケーションとコラボレーションアプリケーションとの間の自己参照フィールドの同期をとるための例示的なプロセスを説明する。
【００３１】
本明細書で提示しているルーチンの説明を読むと、さまざまな実施形態の論理的オペレーションは、（１）コンピューティングシステム上で実行される一連のコンピュータ実装活動またはプログラムモジュールとして、および／または（２）コンピューティングシステム内の相互接続されたマシン論理回路または回路モジュールとして実装されることは理解されるであろう。この実装は、本発明を実装するコンピューティングシステムの性能要件に応じて選択できるものである。したがって、本明細書において例示されている、本明細書で説明されている実施形態を構成する論理的なオペレーションは、演算、構造的デバイス、活動、またはモジュールとさまざまに称される。これらの演算、構造的デバイス、活動、およびモジュールは、ソフトウェア、ファームウェア、専用デジタル論理回路、およびこれらの任意の組み合わせで実装されうる。
【００３２】
図４は、自己参照フィールドを同期するための同期の読み込みフェーズにおけるプロセスを示している。
【００３３】
開始オペレーションの後、プロセスはオペレーション４１０に流れ、そこでプロジェクトタスクおよびコラボレーションタスクがロードされる。例えば、プロジェクト管理アプリケーションからのプロジェクトタスクが、クライアントからロードされ、コラボレーションアプリケーションからのコラボレーションタスクが、サーバーからロードされる。
【００３４】
オペレーション４２０に進み、それらのタスクに対し２つの先行作業リストを作成する。一実施形態によれば、それぞれのプロジェクトタスクについて、プロジェクト先行作業リストは、そのタスクの先行作業に対するプロジェクトＩＤ、およびそのタスクの先行作業に対するコラボレーションＩＤを含む最初は空のコラボレーション先行作業リストを含む。
【００３５】
オペレーション４３０に進み、それらのコラボレーションタスクに対し２つの先行作業リストを作成する。一実施形態によれば、サーバーは、そのタスクの先行作業に対するコラボレーションＩＤを含むコラボレーション先行作業リスト、およびそのタスクの先行作業に対するプロジェクトＩＤを含む最初は空のプロジェクト先行作業リストを作成する。
【００３６】
オペレーション４４０に流れ、同期は同期の比較フェーズに進み、その時点において、どのようなデータを書き込むべきかを確定する（例えば、プロジェクトタスクデータまたはサーバータスクデータ）。
【００３７】
次いで、このプロセスは、終了オペレーションに流れ、他のアクションの処理に戻る。
【００３８】
図５は、同期オペレーションの比較フェーズに基づいて先行作業リストを調整するためのプロセス５００を例示している。
【００３９】
開始オペレーションの後、プロセスはオペレーション５１０に流れ、そこで、競合解決を実行することによってどのようなタスクデータの同期をとるべきか（つまり、どのようなタスクが「勝ったか」）を確定する（例示的なプロセスについては、図７および８ならびに関係する説明を参照されたい）。
【００４０】
決定オペレーション５２０へ流れ、１つのタスクに対してプロジェクトデータを使用するか、または１つのタスクに対してコラボレーションタスクデータを使用するかを確定する。
【００４１】
プロジェクトタスクデータを使用する場合、プロセスはオペレーション５２５に進み、そこで、コラボレーション先行作業リストをクリアする。オペレーション５３０に進んで、プロジェクト先行作業ＩＤをプロジェクト先行作業リスト内にコピーする。
【００４２】
コラボレーションタスクデータを使用する場合、プロセスはオペレーション５４０に進み、そこで、プロジェクト先行作業リストをクリアする。オペレーション５４５に進んで、コラボレーション先行作業ＩＤをプロジェクト先行作業リスト内にコピーする。
【００４３】
オペレーション５５０に進み、プロセスは同期の書き込みフェーズに進む（図６および関係する説明を参照されたい）。
【００４４】
次いで、このプロセスは、終了オペレーションに流れ、他のアクションの処理に戻る。
【００４５】
図６は、同期オペレーションの書き込みフェーズにおいて自己参照フィールドを同期するためのプロセス６００を例示している。
【００４６】
開始オペレーションの後、プロセスは決定オペレーション６１０に流れ、そこで、クライアント上のプロジェクトタスクが同期しているかどうかを確定する。
【００４７】
プロジェクトタスクがクライアント上で同期している場合、オペレーションは決定オペレーション６２０に進み、そこで、プロジェクト先行作業リストが空であるかどうかを確定する。 
【００４８】
プロジェクト先行作業リストが空である場合、プロセスは、オペレーション６２５に流れ、そこで、コラボレーション先行作業ＩＤがプロジェクト先行作業ＩＤにマッピングされる。次いで、プロセスは、オペレーション６３０に進み、そこで、プロジェクト先行作業ＩＤが書き込まれる。
【００４９】
先行作業リストが空でない場合、プロセスは、オペレーション６３０に進み、そこで、プロジェクト先行作業ＩＤが書き込まれる。
【００５０】
同様に、コラボレーションタスクがサーバー上で同期している場合、オペレーションは決定オペレーション６４０に進み、そこで、コラボレーション先行作業リストが空であるかどうかを確定する。
【００５１】
コラボレーション先行作業リストが空である場合、プロセスは、オペレーション６４５に流れ、そこで、プロジェクト先行作業ＩＤがコラボレーション先行作業ＩＤにマッピングされる。次いで、プロセスは、オペレーション６５０に進み、そこで、コラボレーション先行作業ＩＤが書き込まれる。
【００５２】
コラボレーション先行作業リストが空でない場合、プロセスは、オペレーション６５０に進み、そこで、コラボレーション先行作業ＩＤが書き込まれる。
【００５３】
次いで、このプロセスは、終了オペレーションに流れ、他のアクションの処理に戻る。
【００５４】
図７は、クライアントコンピュータおよびサーバーコンピュータ上で相互に関係するデータ間の競合を解決するためのプロセス７００を示している。
【００５５】
開始オペレーションの後、プロセスはオペレーション７１０に進み、そこでタスク情報がクライアントコンピュータ上に格納される。タスク情報は、クライアントコンピュータのアプリケーションプログラム、典型的にはプロジェクト管理アプリケーションプログラムを介して入力されるものとしてよく、１つまたは複数のタスクおよびそれぞれのタスクに関連付けられている１つまたは複数の属性を含む。属性は、タスクの名前、タスクの開始日および完了日、タスクの期間、タスクの優先度、などの情報を含む。それぞれのタスクは、それに、一意的なクライアントコンピュータタスク管理アプリケーション識別子を関連付けている。一意的なクライアントコンピュータタスク管理アプリケーション識別子は、オペレーション７２０においてクライアント上に格納される。
【００５６】
オペレーション７３０へ流れると、タスク情報は、典型的にはその情報を、サーバーコンピュータ上で実行中のドキュメント共有およびコラボレーションプログラムへ発行することによって、サーバーコンピュータに送られる。タスク情報が、サーバーコンピュータ上に格納されると、サーバーコンピュータは、一意的なサーバーコンピュータアプリケーション識別子をそれぞれのタスクに対して割り当てる。
【００５７】
オペレーション７４０に進み、それぞれのタスクについて一意的なサーバーコンピュータアプリケーション識別子を取得し、クライアントコンピュータ上に格納する。
【００５８】
タスクがサーバーコンピュータ上に格納されるときに、タイムスタンプも格納され、これは、サーバーコンピュータ上でタスクが最後に修正された日時を示す。オペレーション７５０で、そのタスクに対するタイムスタンプが、サーバーコンピュータから取得され、クライアントコンピュータ上に格納される。
【００５９】
オペレーション７６０へ流れ、それぞれのタスクに対する一意的なサーバーコンピュータアプリケーション識別子をそのタスクに対する一意的なクライアントコンピュータタスク管理アプリケーション識別子にマッピングし、それらのマッピングをクライアントコンピュータ上に格納する。
【００６０】
それぞれのタスクがクライアントコンピュータ上で作成されるときに、チェンジリストも作成される。チェンジリストは、サーバーと同期させるべきタスクに対する属性を識別するものである。チェンジリスト毎に、ビットマスクが作成され、ビットマスク内のそれぞれのビットは同期させる属性に対応している。オペレーション７７０で、それぞれのタスクに対するビットマスクをクライアントコンピュータ上に格納する。クライアントコンピュータのタスク管理アプリケーション介してタスクを編集すると、１つまたは複数の属性が変更される。オペレーション７８０で、変更される属性毎にそのタスクに対するビットマスク内のビットをセットする。
【００６１】
定期的に、特にクライアントコンピュータ上でタスクを編集したときに、クライアントコンピュータは、同期オペレーションを開始し、それらの変更をサーバーに同期させる。同期オペレーションは、オペレーション７９０で開始する。
【００６２】
図８は、競合解決を含む例示的な同期オペレーションの流れ図である。
【００６３】
開始オペレーションの後、プロセスはオペレーション８１０に流れ、そこでサーバーコンピュータからタスクおよび属性のリストが取得される。決定オペレーション８１５で、サーバーコンピュータから取得したタスクのそれぞれについて、そのタスクに対する一意的なサーバーコンピュータアプリケーション識別子（コラボレーションＩＤ）をそのタスクに対する一意的なクライアントコンピュータタスク管理アプリケーション識別子（プロジェクトＩＤ）にマッピングするかどうかを確定する。例えば、そのタスクに対するプロジェクトＩＤをそのタスクに対するコラボレーションＩＤにマッピングするかどうかを確定する。タスクのマッピングが行われない場合、オペレーション８５０で、クライアントコンピュータ上に新規タスクが作成され、そのタスクに対する一意的なサーバーコンピュータアプリケーション識別子にマッピングされる。
【００６４】
タスクのマッピングが行われる場合、オペレーション８２０で、タスクがクライアントコンピュータ上に存在するかどうかが確定される。タスクのマッピングが行われるが、クライアントコンピュータ上に存在していない場合、これはそのタスクがクライアントコンピュータから削除されたことを示すものである。したがって、オペレーション８５５で、サーバーコンピュータがクライアントコンピュータと整合するようにそのタスクはサーバーコンピュータから削除される。
【００６５】
タスクのマッピングが行われ、それと同時にクライアントコンピュータ上にも存在する場合、そのタスクに対するビットマスク内のピットがセットされているかどうかが決定オペレーション８２５において確定される。そのタスクに対するビットマスク内のビットのどれかがセットされている場合、これはそのタスクに対する少なくとも１つの属性が変更されていることを示しており、決定オペレーション８３０で、最後のクライアントコンピュータ同期の前にサーバーコンピュータが更新されたかどうかが確定される。この確定は、クライアントコンピュータが同期オペレーションを最後に開始した日時とサーバーコンピュータ上でそのタスクが最後に修正された日時とをチェックすることによって行われる。サーバーコンピュータ上でそのタスクが最後に修正された日時が、クライアントコンピュータ上でそのタスクが最後に修正された日時より前である場合、これはクライアントコンピュータ上でそのタスクが更新されているが、サーバーコンピュータではまだこの更新情報を受け取っていないことを示し、更新されたタスク情報は、オペレーション８６０でクライアントコンピュータに送られる。
【００６６】
そのタスクに対してビットマスクのビットがセットされ、サーバーコンピュータが最後のクライアント同期の後に更新されている場合、クライアントコンピュータは、ビットマスクのビットがセットされているすべてのフィールドに競合のフラグをたて、オペレーション８３５で、競合が生じていることを示すダイアログボックスをユーザーに表示する。オペレーション８４０で、ユーザーは、競合している属性のうちの１つを選択することによって競合解決を手動実行する。一実施形態によれば、これは、競合を表示するダイアログボックスを介して行われる。
【００６７】
そのタスクに対して競合解決が計算されるとき、または競合がない場合にオペレーション８５０、８５５、または８６０が完了しているときに、制御はオペレーション８４５に渡されて次のタスクをチェックし、前記のようにオペレーション８１５を再び実行する。推移的変更は、タスク管理アプリケーションによって自動的に更新され、このため、解決のためユーザーに提示される競合が最小限度に抑えられる。
【００６８】
上記の仕様、実例、およびデータは、本発明の構成物の製造および使用に関する完全な記述をなす。本発明の多くの実施形態は、本発明の精神と範囲を逸脱することなく実装できるため、本発明は付属の請求項によって画定される。
【図１】
2012527048.tif 000003
【図２】
2012527048.tif 000004
【図３】
2012527048.tif 000005
【図４】
2012527048.tif 000006
【図５】
2012527048.tif 000007
【図６】
2012527048.tif 000008
【図７】
2012527048.tif 000009
【図８】
2012527048.tif 000010
【国際調査報告】
2012527048.tif 000011
2012527048.tif 000012