Метод 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 со следующими свойствами:
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