Поделиться через


Метод SPList.GetRelatedFields

Возвращает коллекцию объектов со сведениями о поля подстановки в другом списке, который указывает на поле в этом списке.

Пространство имен:  Microsoft.SharePoint
Сборка:  Microsoft.SharePoint (в Microsoft.SharePoint.dll)

Синтаксис

'Декларация
Public Function GetRelatedFields As SPRelatedFieldCollection
'Применение
Dim instance As SPList
Dim returnValue As SPRelatedFieldCollection

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

Возвращаемое значение

Тип: Microsoft.SharePoint.SPRelatedFieldCollection
Коллекция объектов SPRelatedField .

Замечания

В Microsoft SharePoint Foundation двух списков становятся связанных при создании пользователем поля подстановки на один список, который получает значение из поля на другом списке. Можно представить в список, который содержит данные в качестве родительского и список, который берет данные в качестве дочернего. Позволяет определить, какие поля в дочерних списков зависят от сведений в родительский список путем вызова метода GetRelatedFields на объект SPList , который представляет родительский список. Метод возвращает коллекцию объектов SPRelatedField со следующими свойствами:

  • FieldId. Получает Id поля подстановки в списке дочерних.

  • ListId. Получает ID дочернего списка.

  • WebId. Получает ID веб-сайта, где находится список дочерних.

  • RelationshipDeleteBehavior. Получает ограничений целостности данных, определенные для связи.

Последнее свойство RelationshipDeleteBehaviorпредставляет важный аспект отношения между списками. Пользователь, который создает поле подстановки, посредством пользовательского интерфейса или через объектную модель, можно задать ограничения для влияние удалений из одного списка на удаленные элементы из другой. Например пользователь может указать, что удалений из родительского списка cascade для дочерних; то есть когда элемент удаляется из родительского списка, все связанные элементы в списке дочерних также удаляются. Пользователя можно также указать, что удаленные элементы в списке родительский ограниченного доступа; элемент не может удалены из родительского списка, если связанные элементы существуют на список дочерних. Для получения дополнительных сведений см SPRelationshipDeleteBehavior .

Примечание

Чтобы ограничить удалений, пользователь должен иметь SPBasePermissions. разрешение ManageLists в родительском списке.

В SharePoint Foundation пользователя можно также создать несколько столбцов подстановки. В этом случае список дочерних имеет основной столбец, который определяет связь с родительский список, и имеет один или несколько дополнительных столбцов, считывать значения из полей на родительский список, но зависят от основного столбца для связи списка. объекты SPRelatedField содержат информацию о только основного столбца. Чтобы получить сведения о дополнительных столбцов, вызовите метод GetDependentLookupInternalNames объекта SPFieldLookup , представляющий основной столбец. Для получения дополнительных сведений см GetDependentLookupInternalNames() .

Примеры

Следующий пример является консольное приложение, которое получает элемент из списка клиентов и выполняет поиск связанных элементов в других списков в коллекции веб-сайтов. Сложных задач выполняется методом PrintRelatedItems приложения, который использует сведения из объекта SPRelatedField и элемент из списка подстановки для создания запроса к связанный список.

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

См. также

Справочные материалы

SPList класс

Элементы SPList

Перегрузка GetRelatedFields

Пространство имен Microsoft.SharePoint

SPRelatedField

SPFieldLookup

SPRelationshipDeleteBehavior