Freigeben über


Erzwingen der Eindeutigkeit in Spaltenwerten

Letzte Änderung: Dienstag, 16. März 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Definition von "Eindeutigkeit"
Unterstützen eindeutiger Spalteneinschränkungen
Indizieren einer Spalte mit eindeutigen Einschränkungen
Programmgesteuertes Festlegen eindeutiger Einschränkungen
Inhaltsmigration und eindeutige Spalteneinschränkungen
CopyTo- und MoveTo-Vorgänge mit Spalteneinschränkungen

Sie können die Eindeutigkeit für Werte in einer Listen- oder Bibliotheksspalte durch Erstellen eines Primärschlüssels erzwingen. Während zuvor die Identitätsspalte (ID) die einzige Methode darstellte, um die Eindeutigkeit in einer Liste oder Bibliothek zu ermöglichen, gibt es nun in Microsoft SharePoint Foundation 2010 ein neues Feature mit der Bezeichnung eindeutige Spalteneinschränkungen, womit Sie die Eindeutigkeit erzwingen können.

Definition von "Eindeutigkeit"

Eine Definition der Eindeutigkeit ist gar nicht so einfach. Deshalb muss unbedingt genau festgelegt werden, was mit "Eindeutigkeit" gemeint ist. SharePoint Foundation wertet Spaltenwerte aus und bestimmt die Eindeutigkeit basierend auf der Auswertung der in der Spalte vorhandenen Werte. Für die Auswertung wird von SharePoint Foundation die Sortierreihenfolge der Website (SPWeb) für Eindeutigkeitsvergleiche herangezogen. Beachten Sie, dass bei diesem Vergleich die Groß-/Kleinschreibung nicht beachtet wird, weshalb die Werte "hallo welt" und "Hallo Welt" als gleichwertig ausgewertet werden.

Unterstützen eindeutiger Spalteneinschränkungen

Die Tatsache, ob eine Spalte indiziert werden kann, ist der wichtigste Faktor bei der Bestimmung, ob von einer Spalte Eindeutigkeitseinschränkungen unterstützt werden. Wenn darüber hinaus die Eindeutigkeit für eine Nachschlagespalte erzwungen wird, kann für das Listenelement in der Zielliste nur ein Listenelement aus der untergeordneten Liste vorhanden sein, das in dieser nachschlägt (die Liste, in der die Nachschlagespalte vorhanden ist). Das heißt, die Eindeutigkeit wird nicht für die projizierte Spalte der Zielliste erzwungen, sondern für die ID-Spalte. Im Folgenden werden Spaltentypen, die indiziert werden können, und Spaltentypen, die nicht indiziert werden können, aufgelistet.

Unterstützte Spaltentypen

Es folgt eine Liste von Spaltentypen, die indiziert werden können und für die eindeutige Spalteneinschränkungen unterstützt werden:

  • Eine Textzeile

  • Auswahlfeld (aber nicht Mehrfachauswahl)

  • Zahl

  • Währung

  • Datum/Uhrzeit

  • Nachschlagen (aber nicht mehrwertig)

  • Person oder Gruppe (aber nicht mehrwertig)

  • Titel (aber nicht in einer Dokumentbibliothek)

Nicht unterstützte Spaltentypen

Es folgt eine Liste von Spaltentypen, die nicht indiziert werden können und für die eindeutige Spalteneinschränkungen nicht unterstützt werden:

  • Mehrere Textzeilen

  • Hyperlink/Bild

  • Benutzerdefinierte Feldtypen

  • Berechnetes Feld

  • Boolesch (ja/nein)

  • Geändert von

  • Änderungszeitpunkt

  • Benutzeroberflächenversion

  • Erstellungszeitpunkt

  • Ausgecheckt an

  • Inhaltstyp-ID

Indizieren einer Spalte mit eindeutigen Einschränkungen

Eine Spalte, die eine Eindeutigkeitseinschränkung erzwingt, muss wie bereits erwähnt indiziert werden. Wenn der Benutzer Eindeutige Werte erzwingen auswählt und auf OK klickt, wird ein Warnungsdialogfeld angezeigt, falls die Spalte noch nicht indiziert ist. Der Benutzer erhält dann die Möglichkeit, die Spalte automatisch indizieren zu lassen. Nachdem für eine Spalte die Erzwingung der Eindeutigkeit festgelegt wurde, kann die Indizierung für diese Spalte nicht deaktiviert werden. Sie können jedoch die Indizierung für diese Spalte deaktivieren, wenn Sie zuerst die Erzwingung von Eindeutigkeitseinschränkungen deaktivieren.

Programmgesteuertes Festlegen eindeutiger Einschränkungen

Mithilfe der EnforceUniqueValues-Eigenschaft im SPField-Objekt legen Sie für eine Spalte fest, dass eindeutige Werte erforderlich sind. Mit dieser Eigenschaft wird ein boolescher Wert abgerufen und festgelegt, um anzugeben, ob doppelte Werte zulässig sind. Standardmäßig sind doppelte Werte zulässig, weshalb Sie eine Spaltenfeldeigenschaft explizit auf true festlegen müssen.

Das folgende Codebeispiel veranschaulicht, wie Sie ein Feld ändern, sodass eindeutige Werte erforderlich sind. Beachten Sie, dass das Feld nach dem Ändern des Eigenschaftswerts explizit aktualisiert werden muss.

SPSite site = new SPSite("https://localhost");
SPWeb web = site.OpenWeb();

SPList custList = web.Lists["Customers"];
SPField custPhone = custList.Fields["Phone Number"];

custPhone.Indexed = true;
custPhone.EnforceUniqueValues = true;

/// You must call the Update() method 
/// when you change the EnforceUniqueValues property
custPhone.Update();

Fehlersituationen – Ausnahmen

Im Zusammenhang mit der Verwendung der EnforceUniqueValues-Eigenschaft zum Erzwingen der Eindeutigkeit gibt es zwei Fehlersituationen:

  • EnforceUniqueValues = true ist für ein nicht indiziertes Feld festgelegt.
    Ein Ausnahmeobjekt (SPException) mit der Meldung Dieses Feld muss indiziert sein, damit eindeutige Werte erzwungen werden können wird ausgegeben.

  • EnforceUniqueValues = true ist für eine Liste festgelegt, in der doppelte Werte vorhanden sind.
    Ein Ausnahmeobjekt (SPException) mit der Meldung Dieses Feld enthält doppelte Werte. Entfernen Sie alle doppelten Werte, und versuchen Sie den Vorgang erneut. wird ausgegeben.

Inhaltsmigration und eindeutige Spalteneinschränkungen

Die Inhaltsmigration mithilfe von Anwendungsprogrammierschnittstellen (Application Programming Interfaces, APIs) im Microsoft.SharePoint.Deployment-Namespace unterstützt sowohl die teilweise (selektive) als auch die vollständige Migration von Websitesammlungen mithilfe von Export-/Importfunktionen. Wenn Sie die Bereitstellungs-APIs in vollständigen Migrationsszenarien verwenden, müssen Sie sicherstellen, dass bei Festlegung der Eigenschaft für die Eindeutigkeit im Listenfeld der Exportquelle (d. h., wenn die EnforceUniqueValues-Eigenschaft auf true festgelegt ist) die Einstellung für das Importziel übernommen werden muss.

Wenn Sie dagegen eine teilweise (oder "selektive") Migration ausführen, bei der Sie Dateien aus der Quellwebsitesammlung mit Dateien im Ziel zusammenführen, werden dabei wie im Folgenden beschrieben automatisch Eindeutigkeitsstatus berücksichtigt.

Eindeutige Spalten in Quelle, nicht eindeutig im Ziel

  1. Elemente werden im Ziel importiert.

  2. Anschließend wird die EnforceUniqueValues-Eigenschaft für das Ziel auf true festgelegt.

Beachten Sie, dass bei diesem Vorgang ein Fehler auftreten könnte, falls in der Liste im Ziel doppelte Elemente vorhanden sind und damit gegen die Eindeutigkeitseinschränkung verstoßen wird. In diesem Fall wird der Wert der Eindeutigkeitseigenschaft nicht festgelegt und es wird ein nicht schwerwiegender Fehler zurückgegeben.

Eindeutige Spalten in Quelle, eindeutig in Ziel

Führen Sie den Export/Import für die Listenelemente wie üblich aus.

Bei diesem Vorgang tritt ein Fehler auf, wenn ein Element im Importpaket gegen die Eindeutigkeitseinschränkung verstößt. In diesem Fall wird das Element nicht importiert und es wird ein nicht schwerwiegender Fehler zurückgegeben.

Nicht eindeutige Spalten in Quelle, eindeutig in Ziel

  1. Deaktivieren Sie zunächst die Eindeutigkeit für das Feld in der Zielliste, indem Sie die EnforceUniqueValues-Eigenschaft im Ziel auf false festlegen.

  2. Importieren Sie Listenelemente wie üblich im Ziel.

HinweisHinweis

Die oben beschriebenen drei Szenarien gelten auch für Fälle, in denen die RetainObjectIdentity-Eigenschaft beim Import verwendet wird. In diesem Fall wird nicht ein Duplikat des Elements im Ziel importiert, sondern im Ziel werden stattdessen bereits vorhandene Elemente aktualisiert, sodass sie mit dem aus der Quelle exportierten Element übereinstimmen.

CopyTo- und MoveTo-Vorgänge mit Spalteneinschränkungen

Besondere Überlegungen gelten, wenn Sie Elemente in eine Dokumentbibliothek kopieren oder verschieben, von der eindeutige Spalteneinschränkungen erzwungen werden, und wenn sie die Methoden CopyTo(String) und MoveTo(String) in der SPFile-Klasse zum Ausführen dieser Vorgänge verwenden. Sie müssen dies für Szenarien beachten, bei denen Sie eine Datei in eine solche Bibliothek verschieben oder kopieren.

Bei Szenarien mit MoveTo() kann es potenziell zu Datenverlust kommen und bei Szenarien mit CopyTo() ist dieses Potenzial stark reduziert ist (da die Datei in der Quelle nicht entfernt wird). Deshalb gilt die allgemeine Regel, eindeutige Spalteneinschränkungen für MoveTo()-Vorgänge zu blockieren, aber für CopyTo()-Vorgänge zu erlauben. In der folgenden Tabelle finden Sie weitere Details:

Copy To operation

Move To operation

Innerhalb derselben Dokumentbibliothek

Sucht auf der Dokumentebene nach Eindeutigkeitsverstößen. Keine Prüfung bei Bibliotheksordnern.

Verschiebt ohne Prüfung.

Zwischen Dokumentbibliotheken

Konvertiert Werte in null.

Blockiert das Verschieben, wenn für die Zielliste eindeutige Werte erzwungen werden.

Aus Dokumentbibliothek

Keine Auswirkung.

Keine Auswirkung.

In Dokumentbibliothek

Konvertiert Werte in null.

Konvertiert Werte in null.

Siehe auch

Referenz

EnforceUniqueValues

RetainObjectIdentity

SPFile.CopyTo(String)

SPFile.MoveTo(String)