Share via


SPRelatedField class

Fornece informações sobre um campo de pesquisa em uma lista de filhos que obtém informações de uma lista pai.

Inheritance hierarchy

System.Object
  Microsoft.SharePoint.SPRelatedField

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

Syntax

'Declaração
Public Class SPRelatedField
'Uso
Dim instance As SPRelatedField
public class SPRelatedField

Comentários

No Microsoft SharePoint Foundation duas listas se tornam relacionadas quando um usuário cria um campo de pesquisa em uma lista que tem o valor de um campo em outra lista. Você pode pensar a lista que fornece dados como pai e a lista que pesquise dados como o filho. Para descobrir quais campos em listas filhas dependem de informações em uma lista pai, chame o método GetRelatedFields() em um objeto SPList que representa a lista pai.

O método GetRelatedFields retorna uma coleção de objetos SPRelatedField com as seguintes propriedades:

  • LookupList. Obtém o objeto SPList que representa a lista pai.

  • WebId. Obtém o ID do site onde se encontra a lista de filhos.

  • ListId. Obtém o ID da lista de filhos.

  • FieldId. Obtém o Id do campo de pesquisa na lista de filhos.

  • RelationshipDeleteBehavior. Obtém a restrição de integridade de dados definida para o relacionamento da lista.

A última propriedade, RelationshipDeleteBehavior, representa um aspecto importante de relações de lista. Um usuário que cria um campo de pesquisa, por meio da interface do usuário ou através do modelo de objeto, pode definir restrições sobre como eliminações a partir de uma lista afetam exclusões do outro. Por exemplo, o usuário pode especificar exclusões do pai listam em cascata ao filho; ou seja, quando um item é excluído da lista pai, todos os itens relacionados na lista de filhos também são excluídos. O usuário também pode especificar que as exclusões da lista pai são restritas; um item não pode ser excluído da lista pai se existirem itens relacionados na lista de filhos. Para obter mais informações, consulte a enumeração SPRelationshipDeleteBehavior .

Dica

Para impedir exclusões, o usuário deve ter SPBasePermissions.permissão de ManageLists da lista pai.

Em SharePoint Foundation um usuário também pode criar uma pesquisa de várias colunas. Nesse caso, a lista filho tem uma coluna principal que define a relação com a lista pai e ele tem uma ou mais colunas secundárias que ler valores de campos na lista pai, mas dependem da coluna principal para o relacionamento da lista. SPRelatedField objetos contêm informações sobre somente a coluna principal. Para obter informações sobre colunas secundárias, chame o método GetDependentLookupInternalNames do objeto SPFieldLookup que representa a coluna principal.

Examples

O exemplo a seguir é um aplicativo de console que relata informações sobre campos na lista de clientes que fornecem dados para os campos de pesquisa em outras listas. Para cada campo relacionado que representa uma coluna principal, o aplicativo chama o método GetDependentLookupInternalNames para obter uma lista dos campos que representam as colunas secundárias.

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

O aplicativo de console Imprime saída semelhante ao exemplo a seguir.

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

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...

Thread safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Ver também

Referência

SPRelatedField members

Microsoft.SharePoint namespace

GetRelatedFields()

GetDependentLookupInternalNames()

SPRelatedFieldCollection

SPFieldLookup

IsRelationship

IsDependentLookup

SPRelationshipDeleteBehavior