SharePoint-Listensynchronisierung
Letzte Änderung: Dienstag, 16. März 2010
Gilt für: SharePoint Foundation 2010
Durch Implementierungen von Microsoft Sync Framework in SharePoint Foundation werden zwei wichtige Funktionen bereitgestellt: Synchronisierung von Listen und Synchronisierung von Dokumentbibliotheken. In den folgenden Abschnitten werden die Listensynchronisierung und die wichtigen Features zur Unterstützung dieser Synchronisierung erläutert.
Listensynchronisierung
Zur Unterstützung der Synchronisierung von Listen müssen alle Listenelemente eindeutige Bezeichner für die Nachverfolgung von Versionsupdates haben. In SharePoint Foundation wird diese Anforderung durch die UniqueId-Eigenschaft unterstützt.
Versionsverwaltung für Listenelemente
Listenelemente, die von wissensbasierten Funktionen akzeptiert oder zurückgegeben werden, sind zwei Sync Framework-Versionsänderungseinheiten zugeordnet: einer Änderungseinheit für die Server-Version des Listenelements und einer weiteren für die Inhalt-Version. Die Serveränderungseinheit wird aktualisiert, wenn Änderungen an schreibgeschützten Serverfeldern vorgenommen werden; die Version der Inhaltsänderungseinheit dagegen wird aktualisiert, wenn ein anderer Teil des Listenelements geändert wird.
Die jeweiligen Versionen der Server- und Inhaltsänderungseinheit werden bei Updates immer paarweise bewertet, auch wenn die Updates nur für schreibgeschützte Serverfelder gelten und keine Updates auf dem Client erforderlich sind. In der nachstehenden Liste werden die schreibgeschützten Serverfelder aufgeführt, die Änderungen an der Serveränderungseinheit zugeordnet sind.
Schreibgeschützte Serverfelder
1 |
ID |
2 |
ows_hiddenversion |
3 |
ContentTypeId |
4 |
ContentType |
5 |
Modified |
6 |
Created |
7 |
Author |
8 |
Editor |
9 |
FileRef |
10 |
FileDirRef |
11 |
LastModified |
12 |
CreatedDate |
13 |
FileSize |
14 |
FSObjType |
15 |
PermMask |
16 |
CheckoutUser |
17 |
VirusStatus |
18 |
InstanceID |
19 |
_CheckinComment |
20 |
_Level |
21 |
_IsCurrentVersion |
22 |
_HasCopyDestination |
23 |
_CopySource |
24 |
_ModerationStatus |
25 |
_ModerationStatus |
26 |
WorkflowVersion |
Updates auf dem Server
Listelementupdates werden bei Uploadvorgängen auf dem Server erfasst. Dadurch werden Updatekollisionen zwischen Browserclients verhindert, von denen möglicherweise versucht wird, gleichzeitig das gleiche Element zu aktualisieren. Das Aktualisieren beim Hochladen auf den Server ist notwendig, da von Sync Framework ein SharePoint-Kernversionsfeld (ows_hiddenversion) verwendet wird, um Synchronisierungskonflikte zu erkennen. Außerdem werden manche Elementupdates durch serverseitige Aktionen ausgelöst - beispielsweise Updates des Author-Felds, die auf der ID des Benutzers basieren, der das Element hochlädt.
Nach Abschluss dieser Serveraktionen müssen die Updates mit den Clients synchronisiert werden. Wenn diese Änderungen auf schreibgeschützte Serverfelder begrenzt sind, wird nur die Serverversion aktualisiert, und die Inhaltsversion bleibt unberührt. Wenn jedoch Änderungen an anderen als an schreibgeschützten Serverfeldern vorhanden sind oder wenn Elementinhalte geändert wurden, wird sowohl die Serverversion als auch die Inhaltsversion aktualisiert. Dieser Vorgang wird als vom Benutzer ausgeführtes Browserupdate behandelt.
Beachten Sie, dass Aktionen, die von den folgenden serverseitigen Vorgängen ausgeführt werden, zu Änderungen an der Elementinhaltsversion führen, sodass Updates auf dem Client erforderlich werden:
Antivirenprüfung
IRM-Aktion
Analysevorgänge wie beispielsweise Linkwiederherstellungen oder Herabstufung von Eigenschaften
Schemaänderungen am Listen- oder Inhaltstyp
Updates des Dokumentereignishandlers
Änderungsenumeration
Da Updatemetadaten beim Hochladen auf den Server erfasst werden, werden nur die auf dem Server aufgezeichneten Änderungen im Änderungsprotokoll gespeichert und in der Änderungsenumeration bereitgestellt. Mit anderen Worten, eine Änderungsenumeration gibt den aktuellen Status des auf dem Server vorhandenen vom Client bereitgestellten Wissens wieder; dieser Wissensstatus wird zum Abfragen des Änderungsprotokolls und zum Abrufen der möglicherweise für den Client relevanten Änderungen verwendet. Dann werden die Elemente im Abfrageergebnissatz von Sync Framework mit dem Clientwissen verglichen. Anschließend wird bestimmt, ob ein angegebenes Element an den Client gesendet werden soll.
Beachten Sie, dass im Clientwissen ein Satz von Abfrageausnahmen (Elementbereiche oder bestimmte Elemente) verwaltet werden kann, mit dem unerwünschte Elemente aus dem Ergebnissatz herausgefiltert werden.
Batchverarbeitung von Änderungen an Listenelementen
Anstatt in einem kontinuierlichen Strom werden Parallelitätsupdates in Elementbatches bereitgestellt, die in Paketen übertragen werden. Die Batchgröße wird vom Client angegeben, und die einzelnen Elemente werden in der Reihenfolge der Anzeige im Änderungsprotokoll zurückgegeben.
Batches werden dem Client zusammen mit einer Kopie des Serverwissens übergeben. Nach der Verarbeitung der Änderungen wird das neue Serverwissen dem Wissensspeicher der Clients hinzugefügt. Schließlich wird vom Client die zuletzt erworbene Serverversion auf das Server-Versionsfeld des letzten empfangenen Elements festgelegt.
Ein Client kann für Elemente in einem angegebenen Batch eine oder mehrere Ausnahmen für das eigene Wissen angeben. Mithilfe von Ausnahmen wird sichergestellt, dass ein Client keine falschen Konflikte erhält, wenn ein Synchronisierungsvorgang unterbrochen wird. Es gibt positive und negative Ausnahmen. Positive Ausnahmen enthalten vollständiges Serverwissen für Elemente in empfangenen Batches, während negative Ausnahmen das anfängliche Clientwissen für im Batch übersprungene Elemente enthalten. Da Verarbeitungsausnahmen auf dem Server die Serverleistung beeinträchtigen, sollte auf Clients die Verwendung von Ausnahmen für die Batchverarbeitung von Änderungen vermieden werden. Stattdessen sollten die Batches basierend auf dem Serverwissen organisiert werden.
Ausnahmen
In den folgenden Fällen werden vom Server Ausnahmeinformationen erkannt und verwendet:
Änderungsenumeration
Elemente werden vom Server durch eine contains()-Funktion übergeben, mit der angegebene Elemente aus dem Ergebnissatz herausgefiltert werden.
Vom Server werden Ausnahmeinformationen im MadeWithKnowledge-Element der GetListItemChangesWithKnowledge(String, String, XmlNode, XmlNode, String, XmlNode, String, XmlNode, XmlNode)-Methode zurückgegeben.
Konflikterkennung
- Wenn auf der Serverseite ein Konflikt erkannt wird, wird vom Server für das entsprechende Element eine Ausnahme erstellt.
Elementupdates
- Änderungseinheitsausnahmen in Synchronisierungswissen werden vom Server ignoriert. Änderungseinheitsausnahmen werden nicht im Serverwissen gespeichert, wenn der Server diese Informationen vom Client empfängt.
Erkennen und Lösen von Konflikten
Konflikte auf dem Server treten auf, wenn das ows_hiddenversion- Feld des Serverelements vom Wert des vom Client empfangenen ows_hiddenversion-Felds abweicht. Wenn ein solcher Konflikt auftritt, wird vom Server nicht versucht, den Konflikt zu lösen. Stattdessen wird die Elementausnahme dem Wissen des Servers hinzugefügt und der Fehler an den Client zurückgegeben.
Auf dem Client treten Konflikte auf, wenn die Version des Serverwissens nicht mit dem Clientwissen übereinstimmt. In diesem Fall muss der Konflikt auf dem Client mithilfe der Inhalt-Version des Elements gelöst werden. In diesem Szenario wird die Serverversion ignoriert, um den Konflikt zu lösen.
Die schwerwiegendsten Konflikte treten auf, wenn die Inhaltsversion des Serverelements nicht mit dem Clientwissen übereinstimmt und die Inhaltsversion des Clientelements nicht mit dem Serverwissen übereinstimmt. Dies wird als "echter" Konflikt bezeichnet. Ein solcher Konflikt kann von Sync Framework nicht gelöst werden, und der Benutzer muss den Konflikt über die Benutzeroberfläche lösen.
Falsche Konflikte treten auf, wenn die Serverversion des Elements nicht mit dem Clientwissen übereinstimmt, während die Inhaltsversion mit dem Serverwissen oder mit dem Clientwissen übereinstimmt. Dieser Konflikttyp wird automatisch ohne Eingriff des Benutzers vom Client gelöst. Wenn die Clientinhaltsversion mit dem Serverwissen übereinstimmt, hat das Serverelement Vorrang.
Wenn ein true oder ein false Konflikt zugunsten der Clientversion gelöst wird, wird auf dem Client eine Vereinigungsmenge erstellt, in der das Wissen des Clients mit dem des Servers kombiniert wird. Das ows_hiddenversion-Feld des Clientelements wird auf den im Serverelement vorhandenen Wert festgelegt. Anschließend wird die Clientversion des Elements mit dem Serverstatus synchronisiert.
Siehe auch
Konzepte
Synchronisierung der SharePoint-Dokumentbibliothek