競合の検出
最終更新日: 2008年11月12日
適用対象: SharePoint Foundation 2010
この記事の内容
取得 - 送信 - 更新
owshiddenversion フィールド
vti_versionhistory プロパティ
ETag DAV ヘッダー
添付ファイル
パフォーマンスに関する考慮事項に加えて、競合の検出は同期についての最も重要なトピックの 1 つです。
取得 - 送信 - 更新
競合はクライアントで検出して解決することをお勧めします。クライアントは、変更が実際に競合しているかどうかを検出し、競合を手動で修正するようにユーザーに促す通知を発行することができます。また、ローカル ユーザーが加えた変更のコピーをユーザーのストレージに保存することもできます。
このため、同期操作には 3 つの段階、つまり変更された可能性があるデータをサーバーから取得する、すでにクライアント コピーにアップロードされている変更とそのデータが競合しているかどうかをクライアントで確認する、競合がある場合は新しいクライアント データをアップロードするという段階を含めることをお勧めします。
SharePoint オブジェクトでは、更新時に、一部のビジネス ロジックが適用されることがあります。このため、UpdateListItems(String, XmlNode) メソッドは、更新されたアイテムの全フィールドおよびプロパティの更新値を返します。
owshiddenversion フィールド
Windows SharePoint Services 3.0 では、Microsoft.SharePoint.SPBuiltInFieldId Class にある owshiddenversion Field を使用して競合が検出されます。更新プロセス中にこのフィールド値が提供されない場合は、サーバーによってすべての変更が上書きされます。データの損失を防ぐため、クライアントは更新プロセス中にこのフィールド値を提供する必要があります。フィールド値は、サーバーによって最後に返された数値です。
サーバーでは、owshiddenversion Field値によって、ユーザーが古いアイテムのコピーを更新しようとしているかどうかを確認することができます。たとえば、クライアントがアイテムを同期し、この属性の値として 2 を取得したとします。その間に、他のユーザーがサーバー上でそのアイテムのタイトルを変更したため、値が 3 に変更されたとします。クライアントが最後に要求した後でそのアイテムが変更された場合、クライアントが値 2 を使用して変更を送信すると、サーバーによって TP_E_VERSIONCONFLICT (0x81020015) エラーとアイテムの現在のコンテンツのリストが返されます。
vti_versionhistory プロパティ
すべてのクライアントがセントラル サーバーに同期している場合、単純な競合検出には owshiddenversion フィールドで十分対応することができます。ただし、ピア ツー ピアの同期では、他の点にも考慮する必要があります。変更がピア クライアントによって同期される際に、不要な競合が発生するのを回避する必要があります。
また、競合はピア ツー ピア以外のシナリオでも発生する可能性があります。クライアントがサーバーに変更を正常にアップロードしたにもかかわらず、確認 (UpdateListItems(String, XmlNode) からの応答) を受け取らなかった場合、クライアントは、次の同期時に、最新の変更がアップロードされていることを確認する必要があります。
ETag DAV ヘッダー
ドキュメントと添付ファイルの取得と更新は、HTTP/DAV プロトコル (WebDAV または DAV とも呼ばれる) を使用して実行されます。このプロトコルでは、競合検出時に異なるメカニズムが使用されます。get アクセサを使用してファイル (リスト内のドキュメント、添付ファイル、またはリスト外のページが含まれることもある) を取得する場合、ETag が返されます。ETag には、GUID とバージョン番号を格納する別のバイナリ ラージ オブジェクト (BLOB) が含まれています。put アクセサを使用してドキュメントをアップロードする場合、クライアントは、ETag と提供された ETag が一致するように要求する必要があります。
注意
このプロトコルでは、バージョン履歴はサポートされていません。
添付ファイル
HTTP/DAV プロトコルを使用して添付ファイルを更新できる一方で、添付ファイルを追加するには Lists Web サービスの AddAttachment メソッドを使用する必要があります。このメソッドはバイナリ配列を受け入れ、添付ファイルの URL を返します。
詳細については、「AddAttachment(String, String, String, [])」を参照してください。