Freigeben über


SPFieldLookup-Klasse

Stellt ein Nachschlagefeld.

Vererbungshierarchie

System.Object
  Microsoft.SharePoint.SPField
    Microsoft.SharePoint.SPFieldLookup
      Microsoft.SharePoint.Applications.GroupBoard.SPFieldFacilities
      Microsoft.SharePoint.SPFieldUser

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

'Declaration
Public Class SPFieldLookup _
    Inherits SPField
'Usage
Dim instance As SPFieldLookup
public class SPFieldLookup : SPField

Hinweise

Ein Nachschlagefeld übernimmt seinen Wert aus einem Feld in einer anderen Liste. Die Liste, die Daten für das Nachschlagefeld bereitstellt, wird die Nachschlagelistebezeichnet. Zum Abrufen eines Verweises auf die Nachschlageliste greifen auf die LookupList -Eigenschaft des SPFieldLookup -Objekts. Um zu bestimmen, welches Feld in der Nachschlageliste Informationen bereitstellt, Zugriff auf die LookupField -Eigenschaft.

Hinweis

Die SPFieldLookup -Klasse entspricht der Lookup -Datentyp, der in deklarativen XML-Datei über das Type -Attribut des Field -Elements angegeben wird. Das List -Attribut des Field -Elements entspricht der LookupList -Eigenschaft der SPFieldLookup -Klasse.

Obwohl die SPFieldLookup -Klasse einen Konstruktor verfügt, ist es oft einfacher, die Methode AddLookup der Klasse SPFieldCollection . Die AddLookup -Methode besitzt eine Überladung, mit denen Sie eine Suche in eine Liste in eine andere Website erstellen, von der Sie das SPFieldLookup -Objekt erstellen.

Microsoft SharePoint Foundation unterstützt mehrspaltige Suchvorgänge. In diesem Fall eine Primärschlüsselspalte wird die Beziehung mit der Suchliste durch zeigen auf ein Feld in der Zielliste und eine oder mehrere sekundäre Spalten verweisen auf andere Felder in der Zielliste. Sie können die Auswahlliste für eine zweite Spalte durch Aufrufen der AddDependentLookup -Methode der SPFieldCollection -Klasse erstellen. Für eine zweite Spalte gibt die IsDependentLookup -Eigenschaft true. Für eine Primärschlüsselspalte IsDependentLookup gibt die false und die IsRelationship -Eigenschaft gibt truezurück.

SharePoint Foundation unterstützt die referenzielle Integrität für Listenelemente dadurch, dass für Nachschlagefelder Löschen von Einschränkungen für die Nachschlageliste festgelegt. Dies erfolgt über die RelationshipDeleteBehavior -Eigenschaft, die einen der folgenden Enumerationswerte SPRelationshipDeleteBehavior annimmt:

  • Cascade. Löschen eines Elements aus der Auswahlliste bewirkt, dass alle zugehörigen Elemente aus der Liste gelöscht werden, die das Nachschlagefeld enthält.

  • Restrict. Verhindert, dass ein Element in der Auswahlliste gelöscht werden, wenn Sie verwandte Elemente in der Liste vorhanden sind, die das Nachschlagefeld enthält.

  • None. Keine Einschränkung (Standard).

Um Cascade oder Restrictangeben, muss der Benutzer über SPBasePermissionsverfügen.ManageLists -Berechtigung für die Nachschlageliste. Cascade und Restrict erfordern außerdem, dass das Nachschlagefeld indiziert werden. Legen Sie bevor Sie die RelationshipDeleteBehavior -Eigenschaft auf einen dieser Werte festlegen zunächst die Eigenschaft Indexed auf true.

Hinweis

Eine Einschränkung löschen für ein Nachschlagefeld, das mehrere Werte zulässt kann nicht festgelegt werden, noch kann es bei der Suchliste in einer anderen Website ist.

In SharePoint Foundationkönnen Nachschlagefelder in einer verknüpften Liste aus der Auswahlliste (das Ziel der Suche) über die GetRelatedFields() -Methode der Klasse SPList ermittelt werden. Die GetRelatedFields -Methode verfügt über eine Überladung, die Ihnen erlaubt, Filtern bei Nachschlage-Feldern, die eine bestimmten löschen-Einschränkung angeben.

Lookup Field Values

Ein Nachschlagefeld enthält standardmäßig nur einen Wert. In diesem Fall der Wert des Felds ist ein Objekt vom Typ String, und die Zeichenfolge hat Folgendes Format:

Id;#Value

ID ist der Bezeichner für das Listenelement, dem auf das Nachschlagefeld verweist. Wert ist der Wert des Felds, das an das Nachschlagefeld zeigt. Die beiden Teile der Zeichenfolge werden durch die Zeichen ";#" begrenzt. Enthält der Wert ein Semikolon (";"), es ist geschützt durch ein Semikolon (";").

Wenn das Nachschlagefeld auf das dritte Element der Liste und den Wert des Felds, das verweist an das Nachschlagefeld zeigt beispielsweise ist "ich auf alte Reifen; nagen Sie stärkt Meine Kiefer"und dann die folgende Zeichenfolge zurückgegeben:

3;#I gnaw on old tires;;it strengthens my jaw

Sie können diese Zeichenfolge analysieren, sich selbst oder an den Konstruktor für ein SPFieldLookupValue -Objekt als Argument übergeben. Sie erhalten die Liste Element-ID aus der LookupId -Eigenschaft eines SPFieldLookupValue -Objekts und der Wert des Felds im Listenelement aus der LookupValue -Eigenschaft.

Ein Nachschlagefeld kann mehrere Werte aufweisen, wenn die AllowMultipleValues -Eigenschaft gibt truezurück. In diesem Fall wird der Feldwert ein Objekt des Typs SPFieldLookupValueCollection als Objectmittels Boxing konvertiert wird. Sie erhalten alle Werte zuerst im raw Feldwert, SPFieldLookupValueCollection umwandeln und dann die SPFieldLookupValue -Objekte in der Auflistung auflisten.

Hinweise für Vererber

Spalten, die auf der Grundlage von benutzerdefinierten Feldtypen sind in SharePoint Foundationin der Datenblattansicht schreibgeschützt.

Beispiele

Im folgende Beispiel ist eine Konsolenanwendung, die eine Beziehung zwischen der Kunden und der Liste der ausstehenden Bestellungen erstellt. Die Anwendung ruft die AddLookup -Methode, um ein primäres Nachschlagefeld mit dem Namen Kunden-ID in die Liste der ausstehenden Bestellungen hinzufügen und zeigt das Feld unter dem Feld ID in der Liste Debitoren. Das neue Feld Kundennummer ist indiziert und Gäste löschen aus der Suchliste.

Nachdem das primäre Nachschlagefeld erstellt haben, erstellt die Anwendung drei sekundären Felder Vorname, Nachname und Telefon. Die Anwendung erstellt diese Felder durch Aufrufen der AddDependentLookup -Methode des Objekts, das der Liste der ausstehenden Bestellungen die Fields-Auflistung darstellt.

using System;
using Microsoft.SharePoint;

namespace RelatedLists
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("https://localhost"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {
                    SPList lookupList = site.Lists.TryGetList("Customers");
                    SPList relatedList = site.Lists.TryGetList("Pending Orders");

                    if (lookupList != null && relatedList != null)
                    {
                        // Create the primary column.
                        string strPrimaryCol = relatedList.Fields.AddLookup("Customer ID", lookupList.ID, true);
                        SPFieldLookup primaryCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strPrimaryCol);

                        primaryCol.LookupField = lookupList.Fields["ID"].InternalName;
                        primaryCol.Indexed = true;
                        primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.Restrict;
                        primaryCol.Update();


                        // Create the secondary columns.

                        string strFirstNameCol = relatedList.Fields.AddDependentLookup("First Name", primaryCol.Id);
                        SPFieldLookup firstNameCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strFirstNameCol);
                        firstNameCol.LookupField = lookupList.Fields["First Name"].InternalName;
                        firstNameCol.Update();

                        string strLastNameCol = relatedList.Fields.AddDependentLookup("Last Name", primaryCol.Id);
                        SPFieldLookup lastNameCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strLastNameCol);
                        lastNameCol.LookupField = lookupList.Fields["Last Name"].InternalName;
                        lastNameCol.Update();

                        string strPhoneCol = relatedList.Fields.AddDependentLookup("Phone", primaryCol.Id);
                        SPFieldLookup phoneCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strPhoneCol);
                        phoneCol.LookupField = lookupList.Fields["Phone"].InternalName;
                        phoneCol.Update();
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}
Imports System
Imports Microsoft.SharePoint

Module ConsoleApp

    Sub Main()
        Using siteCollection As New SPSite("https://localhost")
            Using site As SPWeb = siteCollection.OpenWeb()
                Dim lookupList As SPList = site.Lists.TryGetList("Customers")
                Dim relatedList As SPList = site.Lists.TryGetList("Pending Orders")

                If lookupList IsNot Nothing AndAlso relatedList IsNot Nothing Then
                    ' Create the primary column.
                    Dim strPrimaryCol As String = relatedList.Fields.AddLookup("Customer ID", lookupList.ID, True)
                    Dim primaryCol As SPFieldLookup = _
                        DirectCast(relatedList.Fields.GetFieldByInternalName(strPrimaryCol), SPFieldLookup)

                    primaryCol.LookupField = lookupList.Fields("ID").InternalName
                    primaryCol.Indexed = True
                    primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.Restrict
                    primaryCol.Update()


                    ' Create the secondary columns.

                    Dim strFirstNameCol As String = relatedList.Fields.AddDependentLookup("First Name", primaryCol.Id)
                    Dim firstNameCol As SPFieldLookup = _
                        DirectCast(relatedList.Fields.GetFieldByInternalName(strFirstNameCol), SPFieldLookup)
                    firstNameCol.LookupField = lookupList.Fields("First Name").InternalName
                    firstNameCol.Update()

                    Dim strLastNameCol As String = relatedList.Fields.AddDependentLookup("Last Name", primaryCol.Id)
                    Dim lastNameCol As SPFieldLookup = _
                        DirectCast(relatedList.Fields.GetFieldByInternalName(strLastNameCol), SPFieldLookup)
                    lastNameCol.LookupField = lookupList.Fields("Last Name").InternalName
                    lastNameCol.Update()

                    Dim strPhoneCol As String = relatedList.Fields.AddDependentLookup("Phone", primaryCol.Id)
                    Dim phoneCol As SPFieldLookup = _
                        DirectCast(relatedList.Fields.GetFieldByInternalName(strPhoneCol), SPFieldLookup)
                    phoneCol.LookupField = lookupList.Fields("Phone").InternalName
                    phoneCol.Update()
                End If
            End Using
        End Using
        Console.Write(vbLf & "Press ENTER to continue...")
        Console.ReadLine()
    End Sub
End Module

Im nächsten Beispiel wird veranschaulicht, wie den Wert eines Nachschlagefelds interpretiert.

Der Beispielcode sucht nach einer Problemliste in der Stammwebsite einer Websitesammlung. Der Listentyp Probleme wird hier gewählt, weil es mehrere Nachschlagefelder hat. Sie können das Beispiel durch Auswählen einer anderen Listentyp ändern. Im Beispiel wird eine Liste gefunden, markiert das erste Nachschlagefeld, das in der Liste Fields-Auflistung gefunden. Dann durchläuft der Code Listenelemente, Drucken von Informationen über den Wert des Nachschlagefelds des Elements.

using System;
using Microsoft.SharePoint;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            {
                using (SPWeb web = site.RootWeb)
                {
                    SPList list = null;
                    foreach (SPList webList in web.Lists)
                    {
                        if (webList.BaseType == SPBaseType.Issue)
                        {
                            list = webList;
                            break;
                        }
                    }
                    if (list != null)
                    {
                        Guid fieldId = Guid.Empty;
                        foreach (SPField field in list.Fields)
                        {
                            if (field is SPFieldLookup)
                            {
                                fieldId = field.Id;
                                break;
                            }
                        }

                        if (fieldId != Guid.Empty)
                        {
                            SPFieldLookup lookupField = list.Fields[fieldId] as SPFieldLookup;
                            Console.WriteLine("Lookup field: {0}", lookupField.Title);

                            foreach (SPListItem item in list.Items)
                            {
                                object rawValue = item[fieldId];
                                if (rawValue != null)
                                {
                                    Console.WriteLine("\nItem: {0}. {1}", item.ID, item.Title);
                                    Console.WriteLine("Raw value: {0}", rawValue);

                                    if (lookupField.AllowMultipleValues)
                                    {
                                        SPFieldLookupValueCollection values = item[fieldId] as SPFieldLookupValueCollection;
                                        foreach (SPFieldLookupValue value in values)
                                        {
                                            PrintValue(value);
                                        }
                                    }
                                    else
                                    {
                                        SPFieldLookupValue value = new SPFieldLookupValue(rawValue.ToString());
                                        PrintValue(value);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }

        public static void PrintValue(SPFieldLookupValue value)
        {
            Console.WriteLine("Lookup item ID: {0}", value.LookupId);
            Console.WriteLine("Lookup item value: {0}", value.LookupValue);
        }
    }
}
Imports System
Imports Microsoft.SharePoint

Module ConsoleApp

    Sub Main(ByVal args As String())
        Using site As New SPSite("https://localhost")
            Using web As SPWeb = site.RootWeb
                Dim list As SPList = Nothing
                For Each webList As SPList In web.Lists
                    If webList.BaseType = SPBaseType.Issue Then
                        list = webList
                        Exit For
                    End If
                Next
                If list <> Nothing Then
                    Dim fieldId As Guid = Guid.Empty
                    For Each field As SPField In list.Fields
                        If TypeOf field Is SPFieldLookup Then
                            fieldId = field.Id
                            Exit For
                        End If
                    Next

                    If fieldId <> Guid.Empty Then
                        Dim lookupField As SPFieldLookup = TryCast(list.Fields(fieldId), SPFieldLookup)
                        Console.WriteLine("Lookup field: {0}", lookupField.Title)

                        For Each item As SPListItem In list.Items
                            Dim rawValue As Object = item(fieldId)
                            If rawValue <> Nothing Then
                                Console.WriteLine(vbLf & "Item: {0}. {1}", item.ID, item.Title)
                                Console.WriteLine("Raw value: {0}", rawValue)

                                If lookupField.AllowMultipleValues Then
                                    Dim values As SPFieldLookupValueCollection = TryCast(item(fieldId), _
                                        SPFieldLookupValueCollection)
                                    For Each value As SPFieldLookupValue In values
                                        PrintValue(value)
                                    Next
                                Else
                                    Dim value As New SPFieldLookupValue(rawValue.ToString())
                                    PrintValue(value)
                                End If
                            End If
                        Next
                    End If
                End If
            End Using
        End Using
        Console.Write(vbLf & "Press ENTER to continue...")
        Console.ReadLine()
    End Sub

    Sub PrintValue(ByVal value As SPFieldLookupValue)
        Console.WriteLine("Lookup item ID: {0}", value.LookupId)
        Console.WriteLine("Lookup item value: {0}", value.LookupValue)
    End Sub

End Module

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs sind threadsicher. Die Threadsicherheit von Instanzmembern ist nicht gewährleistet.

Siehe auch

Referenz

SPFieldLookup-Member

Microsoft.SharePoint-Namespace

GetRelatedFields()

SPRelatedField

SPRelationshipDeleteBehavior