次の方法で共有


SharePoint ドキュメント ライブラリの同期

最終更新日: 2009年12月21日

適用対象: SharePoint Foundation 2010

この記事の内容
リスト アイテムの変更を列挙する
変更されたドキュメント ストリームを取得する
サーバー上のドキュメントを更新する

Microsoft Sync Framework を使用して、SharePoint Foundation ドキュメント ライブラリ内のアイテムを同期できます。同期プロセスは、SharePoint リストの同期 で説明したプロセスと似ていますが、ドキュメント ライブラリの同期では、ドキュメント ストリーム自体が渡されます。ドキュメント ライブラリの変更の列挙を取得するには、2 つの手順を実行します。まず、ドキュメント ライブラリのリスト アイテムの変更を列挙します。次に、変更されたドキュメントのドキュメント ストリームをダウンロードします。2 つの手順で構成されるプロセスを実行するときに同期の競合が発生する可能性があるため、Etag プロパティを使用して、リスト アイテムとそのドキュメント ストリームの同期を維持します。

リスト アイテムの変更を列挙する

リスト アイテムの変更を列挙するには、Etag を使用する必要があります。これは、WebDAV get/put 要求のパラメーターとして渡されます。サーバーでドキュメント ストリームが更新されるたびに、ドキュメントの Etag が更新されて変更が反映されます。その後、値は、読み取りおよび書き込み操作時にリスト アイテム プロパティとして渡されます。サーバーは、更新時にリスト アイテム内の Etag の値とドキュメント上の Etag の値を比較します。また、クライアントは読み取り操作時に比較を実行します。これにより、リスト アイテムとドキュメント ストリームが同じ読み書き操作に属することが保証されます。

ドキュメント ライブラリのリスト アイテムの変更の列挙は、通常のリストで使用するものと同じ GetListItemChangesWithKnowledge(String, String, XmlNode, XmlNode, String, XmlNode, String, XmlNode, XmlNode) メソッドを使用して取得します。このメソッドを呼び出すと、クライアント アプリケーションに 2 つの情報が提供されます。ドキュメント ライブラリ内の変更されたリスト アイテムのリストと、現在のサーバーのナレッジです。その後、次の手順で、ファイル パスと Etag を表すパラメーターを使用してファイル ストリームにアクセスします。このとき、WebDAV API を使用するか、HTTP の SOAP 経由でのファイル同期 (FSSHTTP あるいは "Cobalt") をサポートする API を使用します。

変更されたドキュメント ストリームを取得する

リスト アイテムの変更を列挙したら、次の手順は、変更されたドキュメントのドキュメント ストリームの取得です。

WebDAV get メソッドを使用して、ドキュメント ストリームと共にドキュメントの Etag プロパティの値を取得します。アイテムのストリームの取得方法の詳細については、「Getting an Item's Stream (WebDAV) (英語)」を参照してください。取得した Etag プロパティの値がリスト アイテム プロパティ バッグ内の Etag プロパティの値と異なる場合、リスト アイテムを取得した以降に、そのドキュメントは変更されています。そのアイテムをスキップして結果セット内の他のアイテムを取得するかどうか、またはその代わりにアプリケーションの再同期を直ちに実行するかどうかをクライアント アプリケーション内のロジックによって決定します。

リスト アイテムは、変更ログに含まれている順序で返されます。したがって、リスト アイテムのドキュメント ストリームをダウンロードした後に、クライアントは、認識している最後のサーバー バージョンを、処理されたアイテムのバージョンに設定することで、ナレッジを更新できます。万一、同期が中断しても、これにより、クライアントは最後に同期されたドキュメントから同期を続行できます。

サーバー上のドキュメントを更新する

SharePoint Foundation は、ドキュメント メタデータの昇格と降格をサポートします。指定したドキュメント タイプのパーサーがサーバーにインストールされている場合、ドキュメント ストリームからプロパティを抽出するために各ドキュメントをアップロードするたびにパーサーが呼び出されます。その後、プロパティは MetaInfo 列に昇格します。ドキュメント タイプのパーサーがない場合、プロパティの昇格/降格は実行されません。

ドキュメントは 2 つの段階を経て更新されます。

  1. プロトコル クライアントは WebDAV を使用して、ドキュメント ストリームを、クライアントが認識しているドキュメントの Etag と共にサーバーに送信します。クライアントとサーバーの Etag が同じ場合、サーバー コピーは、クライアントが変更を最後に取得したときから変更されていません。またこの場合、新しいドキュメント バージョンがサーバーによって受け入れられます。ドキュメント ストリームの書き込みが終了すると、サーバーは、ドキュメントのプロパティをリスト アイテム列に昇格します。次に、サーバーは、関連付けられたリスト アイテムのバージョンとドキュメントの Etag を更新し、新しい Etag を応答メッセージに含めてクライアントに送信します。

  2. クライアントは、新しいドキュメントの Etag を受信した後に、更新されたドキュメントのリスト アイテムを要求します。これは、更新された ows_hiddenversion フィールドおよび新しい Etag と共に返されます。クライアントは、リスト アイテム内の Etag がドキュメント上の Etag と一致するかどうかをチェックします。異なる場合、ドキュメントは、上記の手順 1. が完了した後に更新されています。この場合、変更の列挙から同期を開始する必要があります。Etags が同じ場合、クライアントは、リスト アイテムのクライアント バージョンを ows_hiddenversion フィールドの新しい値で更新します。

ドキュメントの更新により、たとえば、ウイルス スキャナーからワークフローにいたるまで、サーバー側のロジックのさまざまな呼び出しを起動できます。このサーバー側のロジックにより、クライアントにとって興味深い場合のあるドキュメント コンテンツの更新を起動することもできます。クライアントは、変更の列挙手順に従って、更新されたドキュメントをダウンロードする必要があるかどうかを決定します。クライアントは、ドキュメントのコンテンツ バージョンを更新した、ドキュメントの変更をダウンロードする必要があります。ただし、クライアントはサーバー バージョンのみを変更した変更を同期できません。

関連項目

概念

SharePoint リストの同期