Класс 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 , представляющий родительского списка.
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) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.
См. также
Справочные материалы
Пространство имен Microsoft.SharePoint