Класс SPRelatedField

Сведения о поле подстановки дочерний список, который получает информацию из родительского списка.

Иерархия наследования

System.Object
  Microsoft.SharePoint.SPRelatedField

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

Синтаксис

'Декларация
Public Class SPRelatedField
'Применение
Dim instance As SPRelatedField
public class SPRelatedField

Замечания

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

Метод GetRelatedFields возвращает коллекцию объектов SPRelatedField , со следующими свойствами:

  • LookupList. Получает объект SPList , представляющий родительского списка.

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

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

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

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

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

Примечание

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

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

Примеры

В следующем примере показано консольное приложение, которое передает сведения о полях в списке Customers (Клиенты), который предоставляет данные для полей подстановки в других списках. Для каждого связанного поля, представляющего основной столбец, приложение вызывает метод GetDependentLookupInternalNames, чтобы получить список полей, которые представляют дополнительные столбцы.

using System;
using System.Collections.Generic;
using Microsoft.SharePoint;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("https://localhost"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {
                    SPList targetList = site.Lists.TryGetList("Customers");
                    SPRelatedFieldCollection relatedFields = targetList.GetRelatedFields();

                    string strSeparator = new String('=', 70);
                    string strUnderline = new String('-', 20);
                    string strFormat = "Target Field: {0} | Related Field: {1}";

                    Console.WriteLine(strSeparator);
                    foreach (SPRelatedField fieldInfo in relatedFields)
                    {
                        using (SPWeb relatedSite = siteCollection.AllWebs[fieldInfo.WebId])
                        {
                            SPList relatedList = relatedSite.Lists.GetList(fieldInfo.ListId, false);
                            SPFieldLookup relatedField = relatedList.Fields[fieldInfo.FieldId] as SPFieldLookup;
                            SPField targetField = targetList.Fields.GetFieldByInternalName(relatedField.LookupField);

                            Console.WriteLine("\nTarget List: {0} ({1}) | Related List: {2} ({3})", 
                                targetList.Title, site.Title, relatedList.Title, relatedSite.Title);

                            Console.WriteLine("\nPrimary Column");
                            Console.WriteLine(strUnderline);
                            Console.WriteLine(strFormat, targetField.Title, relatedField.Title);
                            Console.WriteLine("Deletion behavior: {0}", relatedField.RelationshipDeleteBehavior);

                            Console.WriteLine("\nSecondary Columns");
                            Console.WriteLine(strUnderline);

                            List<string> dependents = relatedField.GetDependentLookupInternalNames();
                            for (int i = 0; i < dependents.Count; i++)
                            {
                                SPFieldLookup lookup = relatedList.Fields.GetFieldByInternalName(dependents[i]) as SPFieldLookup;
                                SPField field = targetList.Fields.GetFieldByInternalName(lookup.LookupField);

                                Console.WriteLine(strFormat, field.Title, lookup.Title);
                            }
                            Console.WriteLine();
                            Console.WriteLine(strSeparator);
                        }
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.SharePoint

Module ConsoleApp

    Sub Main()
        Using siteCollection As New SPSite("https://localhost")
            Using site As SPWeb = siteCollection.OpenWeb()
                Dim targetList As SPList = site.Lists.TryGetList("Customers")
                Dim relatedFields As SPRelatedFieldCollection = targetList.GetRelatedFields()

                Dim strSeparator As String = New [String]("="c, 70)
                Dim strUnderline As String = New [String]("-"c, 20)
                Dim strFormat As String = "Target Field: {0} | Related Field: {1}"

                Console.WriteLine(strSeparator)
                For Each fieldInfo As SPRelatedField In relatedFields
                    Using relatedSite As SPWeb = siteCollection.AllWebs(fieldInfo.WebId)
                        Dim relatedList As SPList = relatedSite.Lists.GetList(fieldInfo.ListId, False)
                        Dim relatedField As SPFieldLookup = TryCast(relatedList.Fields(fieldInfo.FieldId), SPFieldLookup)
                        Dim targetField As SPField = targetList.Fields.GetFieldByInternalName(relatedField.LookupField)

                        Console.WriteLine(vbLf & "Target List: {0} ({1}) | Related List: {2} ({3})", _
                                          targetList.Title, site.Title, relatedList.Title, relatedSite.Title)

                        Console.WriteLine(vbLf & "Primary Column")
                        Console.WriteLine(strUnderline)
                        Console.WriteLine(strFormat, targetField.Title, relatedField.Title)
                        Console.WriteLine("Deletion behavior: {0}", relatedField.RelationshipDeleteBehavior)

                        Console.WriteLine(vbLf & "Secondary Columns")
                        Console.WriteLine(strUnderline)

                        Dim dependents As List(Of String) = relatedField.GetDependentLookupInternalNames()
                        Dim i As Integer = 0
                        While i < dependents.Count
                            Dim lookup As SPFieldLookup = _
                                TryCast(relatedList.Fields.GetFieldByInternalName(dependents(i)), SPFieldLookup)
                            Dim field As SPField = targetList.Fields.GetFieldByInternalName(lookup.LookupField)

                            Console.WriteLine(strFormat, field.Title, lookup.Title)
                            i = i + 1
                        End While
                        Console.WriteLine()
                        Console.WriteLine(strSeparator)
                    End Using
                Next
            End Using
        End Using
        Console.Write(vbLf & "Press ENTER to continue...")
        Console.ReadLine()
    End Sub
End Module

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

======================================================================

Target List: Customers (Team Site) | Related List: Complete Orders (Team Site)

Primary Column
--------------------
Target Field: ID | Related Field: Customer ID
Deletion behavior: None

Secondary Columns
--------------------
Target Field: Last Name | Related Field: Customer

======================================================================

Target List: Customers (Team Site) | Related List: Addresses (Team Site)

Primary Column
--------------------
Target Field: ID | Related Field: Customer ID
Deletion behavior: Cascade

Secondary Columns
--------------------
Target Field: Last Name | Related Field: Last Name
Target Field: First Name | Related Field: First Name

======================================================================

Target List: Customers (Team Site) | Related List: Pending Orders (Team Site)

Primary Column
--------------------
Target Field: ID | Related Field: Customer ID
Deletion behavior: Restrict

Secondary Columns
--------------------
Target Field: First Name | Related Field: First Name
Target Field: Last Name | Related Field: Last Name
Target Field: Phone | Related Field: Phone

======================================================================

Press ENTER to continue...

Потокобезопасность

Любые общедоступные элементы static (Shared в Visual Basic) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.

См. также

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

Элементы SPRelatedField

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

GetRelatedFields()

GetDependentLookupInternalNames()

SPRelatedFieldCollection

SPFieldLookup

IsRelationship

IsDependentLookup

SPRelationshipDeleteBehavior