Compartilhar via


SPList.GetRelatedFields method

Retorna uma coleção de objetos com informações sobre um campo de pesquisa em outra lista que aponta para um campo nessa lista.

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

Syntax

'Declaração
Public Function GetRelatedFields As SPRelatedFieldCollection
'Uso
Dim instance As SPList
Dim returnValue As SPRelatedFieldCollection

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

Valor retornado

Type: Microsoft.SharePoint.SPRelatedFieldCollection
Uma coleção de objetos SPRelatedField .

Comentários

Em Microsoft SharePoint Foundation duas listas se tornam relacionadas quando um usuário cria um campo de pesquisa em uma lista que leva seu valor de um campo em outra lista. Você pode considerar a lista que fornece dados pai e a lista que pesquise dados como filho. Você pode descobrir quais campos em listas filho dependem de informações em uma lista pai chamando o método GetRelatedFields em um objeto SPList que representa a lista pai. O método retorna uma coleção de objetos SPRelatedField com as seguintes propriedades:

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

  • ListId. Obtém o ID da lista filho.

  • WebId. Obtém o ID do site da Web onde se encontra a lista filho.

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

A propriedade última, 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 por meio do modelo de objeto, pode definir restrições sobre como exclusões de uma lista afetam as exclusões do outro. Por exemplo, o usuário pode especificar que as exclusões do pai listam cascade 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 restritos; um item não pode ser excluído da lista pai se itens relacionados existirem na lista de filhos. Para obter mais informações, consulte a enumeração SPRelationshipDeleteBehavior .

Dica

Para restringir as exclusões, o usuário deve ter SPBasePermissions. permissão de ManageLists na 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 o relacionamento com a lista pai, e ele tem uma ou mais colunas secundárias ler valores de campos na lista pai, mas dependem da coluna principal para o relacionamento de lista. objetos SPRelatedField contêm informações sobre somente a coluna principal. Para obter informações sobre colunas secundárias, chame o método de GetDependentLookupInternalNames do objeto SPFieldLookup que representa a coluna principal. Para obter mais informações, consulte o método GetDependentLookupInternalNames() .

Examples

O exemplo a seguir é um aplicativo de console que obtém um item de lista de clientes e localiza itens relacionados em outras listas no conjunto de sites. O trabalho pesado é feito pelo método PrintRelatedItems do aplicativo, que usa um item da lista de pesquisa e as informações de um objeto SPRelatedField para construir uma consulta em relação à lista relacionada.

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

Ver também

Referência

SPList class

SPList members

GetRelatedFields overload

Microsoft.SharePoint namespace

SPRelatedField

SPFieldLookup

SPRelationshipDeleteBehavior