SPList.GetRelatedFields-Methode

Gibt eine Auflistung von Objekten mit Informationen zu einem Nachschlagefeld in einer anderen Liste, die auf ein Feld in der Liste verweist.

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

Syntax

'Declaration
Public Function GetRelatedFields As SPRelatedFieldCollection
'Usage
Dim instance As SPList
Dim returnValue As SPRelatedFieldCollection

returnValue = instance.GetRelatedFields()
public SPRelatedFieldCollection GetRelatedFields()

Rückgabewert

Typ: Microsoft.SharePoint.SPRelatedFieldCollection
Eine Auflistung von SPRelatedField -Objekten.

Hinweise

Microsoft SharePoint Foundation werden zwei Listen miteinander verknüpft, wenn ein Benutzer ein Nachschlagefeld für eine Liste erstellt, die ihren Wert aus einem Feld in einer anderen Liste akzeptiert. Sie können die Liste, die Daten als übergeordnete bereitstellt und die Liste, die Daten als untergeordnetesucht, vorstellen. Sie können ermitteln, welche Felder in den untergeordneten Listen hängt von Informationen in einer Liste übergeordnete durch Aufrufen der GetRelatedFields -Methode für ein SPList -Objekt, das die übergeordnete Liste darstellt. Die Methode gibt eine Auflistung von SPRelatedField -Objekten mit den folgenden Eigenschaften:

  • FieldId. Ruft die Id des Nachschlagefelds in der Child-Liste ab.

  • ListId. Ruft die ID der untergeordneten Liste.

  • WebId. Ruft die ID der Website, in dem die Child-Liste befindet.

  • RelationshipDeleteBehavior. Ruft die Beschränkung der Datenintegrität für die Beziehung definiert.

Die letzte Eigenschaft, RelationshipDeleteBehavior, stellt einen wichtigen Aspekt Listenbeziehungen dar. Ein Nachschlagefeld, entweder über die Benutzeroberfläche oder über das Objektmodell erstellt ein Benutzer lassen sich über die Auswirkungen von Löschungen aus einer Liste auf Löschungen von anderen Einschränkungen. Der Benutzer kann z. B. angeben, dass Löschungen vom übergeordneten Überlappend an die untergeordneten Listen; Das heißt, werden ein Element aus der übergeordneten Liste gelöscht wird, auch alle verwandten Elemente in der Child-Liste gelöscht. Der Benutzer kann auch angeben, dass Löschungen von der übergeordneten Liste beschränkt; ein Element kann nicht von der übergeordneten Liste gelöscht werden, wenn in der Child-Liste verwandter Elemente vorhanden sind. Weitere Informationen finden Sie unter der SPRelationshipDeleteBehavior -Enumeration.

Hinweis

Um Löschungen zu beschränken, muss der Benutzer über SPBasePermissionsverfügen.ManageLists -Berechtigung für die übergeordnete Liste.

In SharePoint Foundation kann Benutzer auch eine Suche mehrere Spalten erstellen. In diesem Fall die Child-Liste hat eine Primärschlüsselspalte, die die Beziehung mit der übergeordneten Liste definiert , und es verfügt über eine oder mehrere sekundäre Spalten, die Lesen von Werten aus Feldern in der übergeordneten Liste, aber die primäre Spalte für die Liste Beziehung abhängen. SPRelatedField -Objekte enthalten Informationen über nur die primäre Spalte. Um Informationen zu sekundären Spalten abzurufen, rufen Sie die Methode GetDependentLookupInternalNames des SPFieldLookup -Objekts, das die primäre Spalte darstellt. Weitere Informationen finden Sie unter der GetDependentLookupInternalNames() -Methode.

Beispiele

Im folgende Beispiel ist eine Konsolenanwendung, die Ruft ein Element aus der Liste der Kunden ab und sucht nach verknüpften Elementen in anderen Listen in der Websitesammlung. Die Schwerarbeit erfolgt durch die Anwendung PrintRelatedItems -Methode, die Informationen von einem SPRelatedField -Objekt und ein Element aus der Suchliste verwendet, um eine Abfrage mit der verknüpften Liste.

using System;
using Microsoft.SharePoint;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("https://localhost"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {
                    int customerID = 1;

                    SPList list = site.Lists.TryGetList("Customers");
                    if (list != null)
                    {
                        // Get a customer record.
                        SPListItem customerRecord = null;
                        try
                        {
                            customerRecord = list.GetItemById(customerID);
                        }
                        catch (ArgumentException ex)
                        {
                            Console.WriteLine(ex.Message);
                        }

                        // Print related items.
                        if (customerRecord != null)
                        {
                            Console.WriteLine("Customer: {0} {1}", 
                            customerRecord[SPBuiltInFieldId.FirstName], customerRecord[SPBuiltInFieldId.Title]);

                            // Get related list items.
                            SPRelatedFieldCollection relatedFields = list.GetRelatedFields();
                            foreach (SPRelatedField fieldInfo in relatedFields)
                            {
                                using (SPWeb relatedSite = siteCollection.AllWebs[fieldInfo.WebId])
                                {
                                    PrintRelatedItems(customerRecord, relatedSite, fieldInfo);
                                }
                            }
                        }
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }

        static void PrintRelatedItems(SPListItem match, SPWeb site, SPRelatedField fieldInfo)
        {
            SPList targetList = fieldInfo.LookupList;
            SPList relatedList = site.Lists[fieldInfo.ListId];

            SPFieldLookup relatedField = relatedList.Fields[fieldInfo.FieldId] as SPFieldLookup;
            SPField targetField = targetList.Fields.GetFieldByInternalName(relatedField.LookupField);

            object value = match[targetField.Id];

            SPQuery q = new SPQuery();
            q.Query = string.Format(@"<Where>
                                            <Eq>
                                                <FieldRef Name=""{0}""/>
                                                <Value Type=""{1}"">{2}</Value>
                                            </Eq>
                                        </Where>", relatedField.InternalName, value.GetType(), value);

            SPListItemCollection items = relatedList.GetItems(q);

            if (items.Count > 0)
            {
                Console.WriteLine("\n{0} has {1} related items:", relatedList.Title, items.Count);
                foreach (SPListItem item in items)
                    Console.WriteLine(item.DisplayName);
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint

Module ConsoleApp

    Sub Main()
        Using siteCollection As New SPSite("https://localhost")
            Using site As SPWeb = siteCollection.OpenWeb()
                Dim customerID As Integer = 1

                Dim list As SPList = site.Lists.TryGetList("Customers")
                If list IsNot Nothing Then
                    ' Get a customer record.
                    Dim customerRecord As SPListItem = Nothing
                    Try
                        customerRecord = list.GetItemById(customerID)
                    Catch ex As ArgumentException
                        Console.WriteLine(ex.Message)
                    End Try

                    ' Print related items.
                    If customerRecord IsNot Nothing Then
                        Console.WriteLine("Customer: {0} {1}", _
                        customerRecord(SPBuiltInFieldId.FirstName), customerRecord(SPBuiltInFieldId.Title))

                        ' Get related list items.
                        Dim relatedFields As SPRelatedFieldCollection = list.GetRelatedFields()
                        For Each fieldInfo As SPRelatedField In relatedFields
                            Using relatedSite As SPWeb = siteCollection.AllWebs(fieldInfo.WebId)
                                PrintRelatedItems(customerRecord, relatedSite, fieldInfo)
                            End Using
                        Next
                    End If
                End If
            End Using
        End Using
        Console.Write(vbLf & "Press ENTER to continue...")
        Console.ReadLine()
    End Sub

    Sub PrintRelatedItems(ByVal match As SPListItem, ByVal site As SPWeb, ByVal fieldInfo As SPRelatedField)
        Dim targetList As SPList = fieldInfo.LookupList
        Dim relatedList As SPList = site.Lists(fieldInfo.ListId)

        Dim relatedField As SPFieldLookup = TryCast(relatedList.Fields(fieldInfo.FieldId), SPFieldLookup)
        Dim targetField As SPField = targetList.Fields.GetFieldByInternalName(relatedField.LookupField)

        Dim value As Object = match(targetField.Id)

        Dim q As New SPQuery()
        q.Query = String.Format( _
        "<Where><Eq><FieldRef Name=""{0}""/><Value Type=""{1}"">{2}</Value></Eq></Where>", _
        relatedField.InternalName, value.GetType(), value)

        Dim items As SPListItemCollection = relatedList.GetItems(q)

        If items.Count > 0 Then
            Console.WriteLine(vbLf & "{0} has {1} related items:", relatedList.Title, items.Count)
            For Each item As SPListItem In items
                Console.WriteLine(item.DisplayName)
            Next
        End If
    End Sub

End Module

Siehe auch

Referenz

SPList Klasse

SPList-Member

GetRelatedFields-Überladung

Microsoft.SharePoint-Namespace

SPRelatedField

SPFieldLookup

SPRelationshipDeleteBehavior