(57)【特許請求の範囲】
【請求項１】
スプレッドシート・ファイルの少なくともひとつのセルに対する更新を第１のスプレッドシート・クライアントから受け取るステップと、
前記スプレッドシート・ファイルの少なくともひとつのセルに対する更新を第２のスプレッドシート・クライアントから受け取るステップと、
前記各更新を前記スプレッドシート・ファイルに統合し、及び適用できるように、モジュールが、前記各更新をマージできるかどうかを判定するステップと、
前記モジュールが、前記各更新をマージできる場合は、前記各更新を結合し、前記各更新を前記スプレッドシート・ファイルに適用し、前記第１のスプレッドシート・クライアントと前記第２のスプレッドシート・クライアントとに送信し戻すための逆方向の更新を計算するステップと、
前記モジュールが、前記各更新をマージできない場合は、変換不能な変更に対するポリシに従って更新を処理するステップであって、前記ポリシは、
すべてのスプレッドシート・クライアントが、すべての以前の変更を受け取ったかを確認するメッセージを送信し、各スプレッドシート・クライアントが新しい更新を行うことを防止することと、
前記交換不能な変更を前記スプレッドシート・ファイルに適用すること
を含むポリシである、ステップと
を含むプロセスを実施するためのコンピュータ実行可能命令を記憶させたコンピュータ可読記録媒体。
【請求項２】
前記プロセスはリアルタイムな共同作業環境で実施されることを特徴とする請求項１に記載のコンピュータ可読記録媒体。
【請求項３】
前記各更新は、同時に受け取られることを特徴とする請求項１に記載のコンピュータ可読記録媒体。
【請求項４】
前記プロセスは、
前記スプレッドシート・ファイルに対する更新の要求をスプレッドシート・クライアントから受け取るステップと、
前記スプレッドシート・クライアントによって前記スプレッドシート・ファイルに対して以前に受け取られていない更新を全て含むリビジョン・レコードを送信するステップと
をさらに含むことを特徴とする請求項１に記載のコンピュータ可読記録媒体。
【請求項５】
スプレッドシート・ファイルの少なくともひとつのセルに対する変更を、第１のスプレッドシート・クライアントから受け取るステップと、
前記スプレッドシート・ファイルの少なくともひとつのセルに対する変更を、第２のスプレッドシート・クライアントから受け取るステップと、
前記各変更を前記スプレッドシート・ファイルに統合しかつ適用できるように、１又はそれより多くのコンピュータプロセッサにより、モジュールが前記各変更をマージできるかどうかを判定するステップと、
前記モジュールが、前記各変更をマージできる場合は、前記１又はそれより多くのプロセッサにより、前記各変更を結合して、前記各変更を前記スプレッドシート・ファイルに適用し、前記第１のスプレッドシート・クライアントと前記第２のスプレッドシート・クライアントとに送信し戻すための逆方向の更新を計算するステップと、
前記モジュールが、前記各変更をマージできない場合は、前記１又はそれより多くのプロセッサにより、変換不能な変更に対するポリシに従って変更を処理するステップであって、前記ポリシは、
すべてのスプレッドシート・クライアントが、すべての以前の変更を受け取ったかを確認するメッセージを送信し、各スプレッドシート・クライアントが新しい更新を行うことを防止することと、
前記交換不能な変更を前記スプレッドシート・ファイルに適用すること
を含むポリシである、ステップと
を含むことを特徴とするスプレッドシート共同作業のための方法。
【請求項６】
前記第１のスプレッドシート・クライアントと前記第２のスプレッドシート・クライアントとは共にリッチ・クライアントであることを特徴とする請求項５に記載の方法。
【請求項７】
前記第１のスプレッドシート・クライアントはリッチ・クライアントであり、前記第２のスプレッドシート・クライアントはブラウザ・クライアントであることを特徴とする請求項５に記載の方法。
【請求項８】
前記方法はリアルタイムな共同作業環境で実施されることを特徴とする請求項５に記載の方法。
【請求項９】
前記各変更は、同時に受け取られることを特徴とする請求項５に記載の方法。
【請求項１０】
前記スプレッドシート・ファイルに対する更新の要求をスプレッドシート・クライアントから受け取るステップと、
前記スプレッドシート・クライアントによって前記スプレッドシート・ファイルに対して以前に受け取られていない更新を全て含むリビジョン・レコードを送信するステップと、
をさらに含むことを特徴とする請求項５に記載の方法。
【請求項１１】
コンピュータ実行可能命令を実行するように動作するプロセッサと、
スプレッドシート・ファイルの少なくともひとつのセルに対する第１の変更を第１のスプレッドシート・クライアントから受け取るステップと、
前記スプレッドシート・ファイルの少なくともひとつのセルに対する第２の変更を第２のスプレッドシート・クライアントから受け取るステップと、
前記各変更を前記スプレッドシート・ファイルに統合しかつ適用できるように、モジュールが前記各変更をマージできるかどうかを判定するステップと、
前記モジュールが、前記各更新をマージできる場合は、前記各変更を結合し、前記各変更を前記スプレッドシート・ファイルに適用するステップと、
前記モジュールが、前記各更新をマージできない場合は、変換不能な変更に対するポリシに従って変更を処理するステップであって、前記ポリシは、
すべてのスプレッドシート・クライアントが、すべての以前の変更を受け取ったかを確認するメッセージを送信し、各スプレッドシート・クライアントが新しい更新を行うことを防止することと、
前記交換不能な変更を前記スプレッドシート・ファイルに適用すること
を含むポリシである、ステップと
を含むプロセスを実施するためのコンピュータ実行可能命令を記憶させたメモリと
を備えることを特徴とするスプレッドシート共同作業のためのシステム。
【請求項１２】
前記プロセスはリビジョン・マネージャによって実施されることを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記第１のクライアントはリッチ・クライアントであり、前記第２のクライアントはブラウザ・クライアントであることを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記プロセスはリアルタイムな共同作業環境で実施されることを特徴とする請求項１１に記載のシステム。
【請求項１５】
前記各更新は、同時に受け取られることを特徴とする請求項１１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
スプレッドシート・アプリケーションは、データを入力し、編成し、管理し、参照し、記憶し、検索するための、便利で、単純且つ直感的な方法を提供する、一般的に使用されているプログラムである。従来型のスプレッドシート・アプリケーションの１つの欠点は、一般に複数のユーザが単一のスプレッドシート・ファイル上で同時に共同作業できないことである。それどころか、従来型のスプレッドシートでは、或るユーザがファイルを開くとそのファイルは「ロック」され、そのファイルを開こうとする他のどのユーザも読取専用でしか開けない。読取専用は、どんな編集結果も元のファイルに保存されないことを意味する。
【０００２】
ユーザがファイルを同時に編集する必要がある理由は数多くある。スプレッドシートは、しばしばデータ入力アプリケーションとして使用される。例えば、企業の全ての異なる部署から得た決算結果の全てを収集するためにスプレッドシート・ファイルを作成する者がいるかもしれない。ファイルにはしばしば複数の作成者があり、これらの作者は、他の作成者がロックを解放するのを待つ必要なしに自由にスプレッドシートを編集したいはずである。
【０００３】
複数のユーザが１つのスプレッドシート・ファイル上で共同作業できるようにしたいということに加えて、複数の異なる種類のクライアントが共同作業できるようにしたいということもある。このクライアントには、「リッチ」クライアントと「ブラウザ」クライアントの両方が含まれる。リッチ・クライアント（シック・クライアントまたはファット・クライアントと呼ばれることもある）は、一般により多くの機能選択肢を提供し、一般にそれ自体でさらなるデータ処理動作を実施でき、必ずしもサーバに依存する必要のないクライアントである。しかし、リッチ・クライアントが、サーバが様々な動作を実施できるようにすることを選択する幾つかの状況がある。ブラウザクライアント（シン・クライアント）は、一般により少ない機能選択肢を提供し、一般にホスト・コンピュータまたはサーバ・コンピュータのリソースに依存するクライアントである。リッチ・クライアントとシン・クライアントとの間の機能の相違やその他の違いにより、しばしばこの異なるクライアントでユーザが共同作業することが困難になる。
【発明の概要】
【課題を解決するための手段】
【０００４】
スプレッドシート・ファイル上でクライアント・コンピュータによりリアルタイムで共同作業するための技法が本明細書では開示されている。具体的には、更新をクライアント・コンピュータから受け取り、この更新を処理し、次いでその更新をスプレッドシート・ファイルに適用するリビジョン・マネージャ・モジュールがホスト・マシンに好適に提供されている。その後、リビジョン・マネージャをポーリングすることによって、最新のバージョンのスプレッドシート・ファイルが全てのクライアントに利用可能となる。リビジョン・マネージャはこれらの更新を、それらの更新を以前に受け取っていない各クライアントに送信し、全てのクライアントが共同作業中にスプレッドシート・ファイルを最新のステータスで表示できるようにする。
【０００５】
さらに、クライアントによって同時またはほぼ同時にリビジョン・マネージャへ送信された更新を扱うための技法が説明されている。このケースでは、リビジョン・マネージャは、スプレッド・シ−ト・ファイルに対する更新が変換可能またはマージ可能かどうかを判定する。可能である場合、更新をスプレッドシート・ファイルに結合して適用する。更新が変換可能でない場合は、リビジョン・マネージャは全てのクライアントが、変換不能な更新をスプレッドシート・ファイルに適用する前に以前の更新を全て受け取ったことを確かめる。これにより、後のリリースにおいてより多くの機能を共同作業環境に含めるための能力がもたらされる。なぜならば、全ての機能を変換可能とするのは非常に時間のかかるプロセスであろうからである。
【０００６】
本要約は、選択した概念を簡潔な形で導入するために与えるものであり、その概念は、発明を実施するための形態で後でさらに説明する。本要約はクレーム主題の主要な特徴または本質的な特徴を特定しようとするものではなく、クレーム主題の範囲を決定する支援として使用しようとするものでもない。
【０００７】
例示的な実施形態は、添付の図面を参照して後の発明を実施するための形態を読むと、より良く理解されよう。
【図面の簡単な説明】
【０００８】
【図１】例示的なコンピューティング装置のブロック図である。
【図２】スプレッドシート・ファイルに対する同時更新を管理するためのリビジョン・マネージャ・モジュールをホスト・マシンが備える、スプレッドシート・ファイル上で共同作業する複数のクライアント・コンピュータを示すシステム図である。
【図３】リビジョン・マネージャ・モジュールを有する図２に示すクライアント・コンピュータのうち２つからのスプレッドシート・ファイルの部分図の対を示す線図である。
【図４】同時更新が行われた、クライアント・コンピュータに対するスプレッドシート・ファイルと図３に示すリビジョン・マネージャ・モジュールの部分図の対を示す線図である。
【図５】リビジョン・マネージャ・モジュールがスプレッドシート・ファイルにおいて図４の同時更新をマージした、クライアント・コンピュータに対するスプレッドシート・ファイルと図３および図４に示すリビジョン・マネージャ・モジュールの部分図の対を示す線図である。
【図６】複数のクライアント・コンピュータによってリアルタイムで共同作業中にスプレッドシート・ファイルに対して行った同時更新をマージするためのプロセスの流れ図である。
【発明を実施するための形態】
【０００９】
法定要件を満たすために、本発明の主題を具体的に説明する。しかし、その説明自体は本特許の範囲を限定しようとするものではない。そうではなく、本明細書で説明したものと同様な様々なステップまたはステップの組合せを含めるために、他の現行の技術または将来の技術と関連して、クレーム主題を他の方法で具現化してもよいことが考慮されている。
【００１０】
図１は、上述の主題の実装に適したコンピューティング・システム環境１００の例を示す。コンピューティング・システム環境１００は適切なコンピューティング環境の一例にすぎず、上述の主題の使用範囲または機能範囲に関する限定を示唆しようとするものではない。また、コンピューティング環境１００が、例示的な動作環境１００に示す構成要素のどのような１つまたはどのような組合せに関してどのような依存性または要件を有するとも解釈すべきでない。
【００１１】
図１を参照すると、コンピューティング・システム環境１００は、汎用目的のコンピューティング装置をコンピュータ１１０の形で備える。コンピュータ１１０の構成要素は、演算装置１２０、システム・メモリ１３０、およびシステム・バス１２１を含む。システム・バス１２１は、システム・メモリを含む様々なシステムの構成要素を演算装置１２０に結合させる。システム・バス１２１は、メモリ・バスまたはメモリ・コントローラ、周辺バス、および様々なバス・アーキテクチャの何れかを用いたローカル・バスを含む、数種のバス構造のうちの何れかであることができる。限定ではなく例として、このアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカル・バス、および（メザニン（Ｍｅｚｚａｎｉｎｅ）・バスとしても知られる）ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、等が含まれる。
【００１２】
コンピュータ１１０は、一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０がアクセスできる任意の利用可能な媒体であることができ、揮発性および不揮発性媒体、取外し可能および取外し不能媒体の両方を含む。限定ではなく例として、コンピュータ可読媒体はコンピュータ記憶媒体と通信媒体を備えることができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラム・モジュールまたは他のデータのような情報を記憶するための任意の方法または技術で実装した揮発性および不揮発性媒体、取外し可能および取外し不能媒体の両方が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリまたは他のメモリ技術、ＣＤＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ：デジタル多用途ディスク）もしくは他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶もしくは他の磁気記憶装置、または所望の情報の記憶に使用できコンピュータ１１０がアクセスできる他の任意の媒体が含まれるがこれらに限らない。通信媒体は、一般に、コンピュータ可読命令、データ構造、プログラム・モジュールまたは他のデータを搬送波または他の伝送機構のような変調データ信号で具現化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、１つまたは複数のその特性集合を有するか信号内の情報をエンコードするように変化した信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークまたは直接配線接続のような有線媒体、ならびに音響、ＲＦ、赤外線および他の無線媒体のような無線媒体が含まれる。上の何れかの組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【００１３】
システム・メモリ１３０は、コンピュータ記憶媒体をＲＯＭ１３１およびＲＡＭ１３２のような揮発性メモリおよび／または不揮発性メモリの形で備える。ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１３３は、例えば起動中に、コンピュータ１１０内部の要素間での情報伝送を支援する基本ルーチンを含み、一般にはＲＯＭ１３１に記憶される。ＲＡＭ１３２は、一般に、演算装置１２０が即座にアクセス可能であるおよび／または現在演算装置１２０上で動作しているデータおよび／またはプログラム・モジュールを含む。限定ではなく例として、図１はオペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６およびプログラム・データ１３７を示す。
【００１４】
コンピュータ１１０はまた、他の取外し可能または取外し不能のコンピュータ記憶媒体、揮発性または不揮発性のコンピュータ記憶媒体を含むことができる。例としてのみ、図１は取外し不能で不揮発性の磁気媒体を読み書きするハード・ディスク・ドライブ１４１、取外し可能で不揮発性の磁気ディスク１５２を読み書きする磁気ディスク・ドライブ１５１、およびＣＤ−ＲＷ、ＤＶＤ−ＲＷまたは他の光媒体のような取外し可能で不揮発性の光ディスク１５６を読み書きする光ディスク・ドライブ１５５を示す。例示的な動作環境で使用できる他の取外し可能または取外し不能のコンピュータ記憶媒体、揮発性または不揮発性のコンピュータ記憶媒体には、磁気テープ・カセット、フラッシュ・メモリ・カード、ＤＶＤ（デジタル多用途ディスク）、デジタル・ビデオ・テープ、固体ＲＡＭ、固体ＲＯＭ、等が含まれるがこれらに限らない。ハード・ディスク・ドライブ１４１は、一般に、インタフェース１４０のような取外し不能なメモリ・インタフェースを介してシステム・バス１２１に接続され、磁気ディスク・ドライブ１５１および光ディスク・ドライブ１５５は、一般に、インタフェース１５０のような取外し可能メモリ・インタフェースによってシステム・バス１２１に接続される。
【００１５】
上で論じ、図１で示したドライブおよびその関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラム・モジュール、および他のデータをコンピュータ１１０のために記憶する。図１では、例えば、ハード・ディスク・ドライブ１４１がオペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７を記憶するとして示してある。これらの構成要素はオペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、およびプログラム・データ１３７と同一であるかまたは異なることができることに留意されたい。オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７には本明細書では異なる番号を与え、最低限それらが異なるコピーであることを示す。ユーザは、キーボード１６２およびマウス、トラックボールまたはタッチ・パッドといったポインティング・デバイス１６１のような入力装置を介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力装置（図示せず）にはマイクロフォン、ジョイスティック、ゲーム・パッド、パラボラ・アンテナ、スキャナ、等を含めることができる。これらおよび他の入力装置はしばしば、システム・バス１２１に結合されたユーザ入力インタフェース１６０を介して演算装置１２０に接続されるが、パラレル・ポート、ゲーム・ポートまたはＵＳＢのような他のインタフェースおよびバス構造によって接続してもよい。グラフィック・インタフェース１８２もまたシステム・バス１２１に接続することができる。１つまたは複数のＧＰＵ（ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔｓ）１８４がグラフィック・インタフェース１８２と通信することができる。モニタ１９１または他種の表示装置も、ビデオ・インタフェース１９０のようなインタフェースを介してシステム・バス１２１に接続され、ビデオ・インタフェース１９０は次にビデオ・メモリ１８６と通信することができる。モニタ１９１に加えて、コンピュータは、スピーカ１９７およびプリンタ１９６のような他の周辺出力装置も含むことができ、これらは出力周辺インタフェース１９５を介して接続することができる。
【００１６】
コンピュータ１１０は、リモート・コンピュータ１８０のような１つまたは複数のリモート・コンピュータへの論理接続を用いてネットワーク環境または分散環境で動作することができる。リモート・コンピュータ１８０はパーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイスまたは他の共通ネットワーク・ノードであることができ、一般に、コンピュータ１１０に関して上述した要素の多くまたは全てを含むが、図１ではメモリ記憶装置１８１のみを示した。図１に図示した論理接続にはＬＡＮ１７１およびＷＡＮ（広域エリアネットワーク）１７３が含まれるが、他のネットワークまたはバスを含んでもよい。このようなネットワーキング環境は、家庭、職場、企業規模のコンピュータ・ネットワーク、イントラネットおよびインターネットで一般的である。
【００１７】
ＬＡＮネットワーキング環境で使用する場合は、コンピュータ１１０はネットワーク・インタフェースまたはアダプタ１７０を通してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用する場合は、コンピュータ１１０は、一般に、モデム１７２、またはインターネットのようなＷＡＮ１７３上で通信を確立するための他の手段を備える。モデム１７２は、内部または外部にあることができ、ユーザ入力インタフェース１６０または他の適切な機構を介してシステム・バス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関して図示したプログラム・モジュールまたはその一部を、リモート・メモリ記憶装置に記憶することができる。限定ではなく例として、図１はリモート・アプリケーション・プログラム１８５がメモリ装置１８１に常駐するとして示してある。示したネットワーク接続は例であって、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことは理解されよう。
【００１８】
上述の複数のコンピューティング・システム２００、２１０、２２０等は、クライアント、クライアント・コンピュータまたはユーザとも呼ぶが、スプレッドシート・ファイル２３０のような共通ファイル上でリアルタイムで共同作業しようとしていることが図２から理解されよう。このようなクライアントには、例えば、「シック」クライアント・スプレッドシート・アプリケーションまたはシン・クライアント・スプレッドシート・アプリケーションが含まれる。コンピューティング・システム２００、２１０、および２２０上のスプレッドシート・アプリケーションは「共同作業」モードの編集を使用することができる。この場合、各ユーザまたは各クライアントは、ファイル２３０をその時点で編集している他の任意のユーザまたはクライアントによって行われた変更を見ることができる。示したように、これをサーバのような、保存されるスプレッドシート・ファイル２３０のバージョンを含む別のホスト・マシン２４０を介して実現することができる。しかし、クライアント・コンピュータの何れも、それが共同作業の機能を有し他のクライアント・コンピュータがそれと正しくネットワーク接続される限り、共同作業用のホスト・マシンとして利用してもよいことは理解されよう。従って、この共同作業モードは、クライアントがスプレッドシート・ファイルを排他アクセスで開き、全ての変更がファイルに直接反映され、これが行われている間にファイルを編集するクライアントがそれ以外にない、通常のスプレッドシートの動作とは異なる。
【００１９】
典型的な共同作業の構成では、各クライアント・コンピュータは、（矢印２５０で示すように）コンピュータ実行可能命令を介してメッセージまたはデータ更新をホスト・マシン２４０に渡す。クライアントが行った各編集または各変更は、その変更が何であったか、どこで変更が行われたか、誰が変更を行ったか、等を示す詳細とともに、クライアントによりリビジョン・レコードとしてパッケージ化されることは理解されよう。ホスト・マシン２４０は、更新をクライアントから受け取って、この変更または入ってくるデータを処理するモジュール３１０を含むことが好ましい。モジュール３１０を本明細書ではリビジョン・マネージャと呼ぶ。クライアントからのリビジョン・レコードがリビジョン・マネージャ・モジュール３１０に送信され、リビジョン・マネージャ・モジュール３１０でリビジョン・レコードが受け取られて処理される。スプレッドシート・ファイル２３０のこの処理および更新が完了すると、個々のクライアント・コンピュータによるホスト・マシン２４０の要求または問合せ（矢印２６５により表す）によって、リビジョン・マネージャ・モジュール３１０はコンピュータ実行可能命令を介して（矢印２７０によって示すように）、更新をクライアント・コンピュータに送信する。このように、要求を行うクライアント・コンピュータに対するスプレッドシート・ファイル２３０の状態が、共同作業中に受け取られた全てのクライアント・コンピュータからの更新を含む最新のバージョンのスプレッドシート・ファイル２３０で更新される。ホスト・マシン２４０によってスプレッドシート・ファイル２３０に加えられた変更は、数ミリ秒以内にクライアント・コンピュータに利用可能となることが好ましいことは理解されよう。ホスト・マシン２４０が更新を自動的にクライアント・コンピュータに配信することも可能である。リビジョン・マネージャ・モジュール３１０は、どのクライアントが共同作業中に更新要求を行ったかを認識し、クライアントが見た最後の更新を記録し、その時点からの全ての更新に関するリビジョン・レコードを送信する。次いでクライアントは、リビジョン・レコードを適用し、この時点で、全てのクライアントが行った全ての更新で最新となっている。
【００２０】
一般に、リビジョン・レコードを、受け取った順にリビジョン・マネージャ・モジュール３１０によって処理することができる。しかし、２つのクライアントがスプレッドシート・ファイル内の同じセルもしくは同じオブジェクトを含むリビジョン・レコードを同時もしくはほぼ同時に送信した場合または処理中にレコードが重複した場合は、その変更の間で相反が発生する可能性がある。リビジョン・レコードはまた、レコード作成中に第２のクライアントが最新でなかった場合、またはリビジョン・マネージャ・モジュール３１０が第２のクライアントのレコードを受け取る前に他の任意の更新を受け取った場合は、古くなっているはずである。リビジョン・マネージャ・モジュール３１０は、第２のクライアントがレコードを送信するための時間（これは必ずしも即時ではない）、送信時間、および送受信のオーバヘッドを考慮しなければならない。解決しマージすることができるリビジョン（本明細書では「変換可能な」変更と呼ぶ）がある一方で、マージできないリビジョン（本明細書では「変換不能な」変更と呼ぶ）もあることは理解されよう。
【００２１】
２つの相反する変更をどのようにマージできるかの例が図３から図５に示されている。図３に見られるように、第１のクライアントに対するスプレッドシート３００の部分図と、第２のクライアントに対するスプレッドシート３０５の部分図とが、リビジョン・マネージャ・モジュール３１０とともに提供されている。スプレッドシート３００および３０５の図は共同作業のこの時点では同一であり、５および６の値が夫々セルＡ１およびＡ２に配置されていることに留意されたい。図４では、第１のクライアントがスプレッドシート３００において、セルＡ２内の値に関する式（即ち、Ａ２＋２）をセルＢ２に追加したことが分かる。同時またはほぼ同時に、第２のクライアントがスプレッドシート３０５において、セルＡ２の上に行を挿入した。これらの変更の各々は、矢印３１５および３２０によって示すように、リビジョン・マネージャ・モジュール３１０に送信され、リビジョン・マネージャ・モジュール３１０が相反を調整しなければならない。調整を行うために、リビジョン・マネージャ・モジュール３１０は図５に示す両方の更新を処理し、適切な変換を行う。従って、リビジョン・マネージャ・モジュール３１０は、第１のクライアント（ユーザＡ）がスプレッドシート３００において行１と行２の間に行を挿入する必要がある旨のメッセージ３２５を第１のクライアントに送信し、第１のクライアントはセルＢ１内の式の更新（即ち、Ａ３＋２）を処理する。それと並行として、リビジョン・マネージャ・モジュール３１０は、第２のクライアント（ユーザＢ）がスプレッドシート３０５において新しい式をセルＢ１に追加する必要がある旨のメッセージ３３０を第２のクライアントに送信する。この場合、追加された式は挿入された行を考慮するように調整されている。このように、更新３１５および３２０に対応する適切な変換を行うことによって、スプレッドシート３００および３０５は、各クライアントが意図した変更を反映し、同一となる。
【００２２】
リビジョン・マネージャ・モジュール３１０は、クライアント・コンピュータによってリビジョン・マネージャ・モジュール３１０に送信された全ての相反する更新をマージできるわけではないことは理解されよう。このことにより、少なくとも部分的に、或るクライアントによって提供された更新が別のクライアントによって提供された別の更新に重なるという指数関数的な分岐が生ずる。さらに、スプレッドシートの或る機能の変化またはスプレッドシートにおける操作の変化を別の機能の変化または別の動作の変化とどのようにマージするかに関する、細かい知識が多く必要である。この知識は実行時には利用可能でないことがある。
【００２３】
従って、１つのアプローチは、変換可能なリビジョンと変換不能なリビジョンを区別し、次いでスプレッドシート・アプリケーションに関する全ての可能な編集をこれらの２つのタイプとして分類することである。本明細書で述べたように、変換可能なレコードは、リビジョン・マネージャ・モジュール３１０がマージの仕方を知っているリビジョン・レコードである。他の全てのリビジョン・レコードは変換不能であると考えられ、リビジョン・マネージャ・モジュール３１０はそれらには、適用を待っている他のレコードとこのリビジョン・レコードをマージする可能な方法がないとみなす。この事例では、リビジョン・マネージャ・モジュール３１０は、最初に全てのクライアントが他の全ての以前の更新を受け取り、全てのクライアントが現在同じ状態にあることを確かめる。各クライアントが普通に行うように、更新に関してリビジョン・マネージャにポーリングし、リビジョン・マネージャが変換不能な操作を実施し、ユーザにそれ以上編集させないようにしようとしていることを示すメッセージをクライアントが受け取ることによって、これを行うことができる。換言すれば、全てのクライアントが他の全ての以前の更新を受け取ったことを保証するために、各クライアントが新しい更新を行うことを防止して、リビジョン・マネージャが変換不能な操作の適用を進めることができるようにしてもよい。共同作業の全てのクライアントが同期された後に、リビジョン・マネージャ・モジュール３１０は変換不能なレコードを適用し、それに従ってその全てのクライアントを更新する。
【００２４】
行われるプロセスをより良く理解するために、図６の流れ図において実施するステップを提示する。図から分かるように、リビジョン・マネージャ・モジュール３１０は、原則としてスプレッドシート・ファイル２３０上のロックを制御し、従ってクライアントとホスト・マシン２４０の間との接続を確立するように動作する（ボックス６００によって表す）。スプレッドシート・ファイル２３０に対する変更または更新を任意数のクライアントによってホスト・マシン２４０に送信することができる。第１のクライアントと第２のクライアントとが、更新をリビジョン・マネージャ３１０に送信したことが反映されていることが分かるであろう（夫々、ボックス６０５と６１０）。リビジョン・マネージャ・モジュール３１０が更新を第１のクライアントおよび第２のクライアントから受け取ると、リビジョン・マネージャ・モジュール３１０は、スプレッドシート・ファイル２３０に対する両方の更新が変換可能であるかどうかを判定する（決定ボックス６１５）。
【００２５】
両方の更新が変換可能であると考えられる場合（即ち、そのリビジョン・レコードがマージ可能とみなされる場合）は、リビジョン・マネージャ・モジュール３１０はそれらの更新をスプレッドシート・ファイルに結合する（ボックス６２０）。次いで、この更新をスプレッドシート・ファイル２３０に適用する（ボックス６２５）。両方の更新が変換可能であると考えられない場合は、リビジョン・マネージャ・モジュール３１０は、最初に、全てのクライアントがスプレッドシート・ファイル２３０に対する以前の更新を全て受け取ったことを確認する（ボックス６３０）。次いで、変換不能な更新をスプレッドシート・ファイル２３０に適用する（ボックス６３５）。
【００２６】
何れのケースでも、各クライアントがスプレッドシート・ファイル２３０に対する更新に関してリビジョン・マネージャ・モジュール３１０にポーリングしなければならないこと（ボックス６４０）が好ましいことは理解されよう。この際、リビジョン・マネージャ・モジュール３１０は、ポーリングしているクライアント・コンピュータが以前受け取っていない更新を全てスプレッドシート・ファイル２３０に提供する（ボックス６４５）。次いで、クライアントは、スプレッドシート・ファイル２３０の最新のバージョンが表示されるように、リビジョン・マネージャ・モジュール３１０によって提供されたリビジョン・レコードを適用する（ボックス６５０）。
【００２７】
理解されるだろうが、クライアントは、リビジョン・マネージャまたはリビジョン・サーバから受け取ったレコードを適用するための、追加のクライアント側のマージ・ロジックを含むことができる。この追加のクライアント側のマージ・ロジックがなければ、ポーリングおよび更新プロセス全体の間にリッチ・クライアントをブロックして、最新の更新が適用されるまでユーザがどのような変更も開始しないようにする必要があるかもしれない。リッチ・クライアントは、反応を良くするために、或るバージョンのリビジョン・マネージャ・マージ・エンジンを含んでもよい。リアルタイム同期が完全に変換可能なソリューションに対する要件でなくてもよいことも理解されよう。絶え間なく同期すればより良いユーザ・エクスペリエンスがもたらされるかもしれないが、完全に変換可能なソリューションの価値の一部は、より良いリモート・ユーザビリティを提供しネットワークの問題に対する堅牢性を提供するために、そのソリューションを一時的にオフラインにすることができる。さらに、相反が発生した場合は、リビジョン・マネージャは、クライアントが未だ見ていないリビジョン・レコードに加えて、これらの同じリビジョン・レコードの間の相反を考慮するために変換されたリビジョン・レコードと、クライアントが現在送信している新しいリビジョン・レコードとを、クライアントに送信し戻すことができることは理解されよう。
【００２８】
主題を構造的特徴および／または方法論的動作に固有な言葉で説明したが、添付の特許請求の範囲で定義した主題は必ずしも上述の特定の特徴または動作に限定されないことは理解されよう。そうではなく、上述の特定の特徴および動作は諸請求項を実装する形態の例として開示されている。
【図１】
0005426561.tif 000002
【図２】
0005426561.tif 000003
【図３】
0005426561.tif 000004
【図４】
0005426561.tif 000005
【図５】
0005426561.tif 000006
【図６】
0005426561.tif 000007