Compartir a través de


del método SPList.GetRelatedFields

Devuelve una colección de objetos con información acerca de un campo de búsqueda en otra lista que apunta a un campo en esta lista.

Espacio de nombres:  Microsoft.SharePoint
Ensamblado:  Microsoft.SharePoint (en Microsoft.SharePoint.dll)

Sintaxis

'Declaración
Public Function GetRelatedFields As SPRelatedFieldCollection
'Uso
Dim instance As SPList
Dim returnValue As SPRelatedFieldCollection

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

Valor devuelto

Tipo: Microsoft.SharePoint.SPRelatedFieldCollection
Una colección de objetos de SPRelatedField .

Comentarios

En Microsoft SharePoint Foundation dos listas se convierten en relacionados cuando un usuario crea un campo de búsqueda en una lista que toma su valor de un campo en otra lista. Puede pensar en la lista que proporciona los datos como el primario y la lista que busca los datos como secundarios. Puede detectar qué campos de listas secundarias dependen de la información de una lista primaria llamando al método GetRelatedFields en un objeto SPList que representa la lista principal. El método devuelve una colección de objetos de SPRelatedField con las siguientes propiedades:

  • FieldId. Obtiene el Id del campo de búsqueda en la lista de elementos secundarios.

  • ListId. Obtiene el ID de la lista secundaria.

  • WebId. Obtiene el ID del sitio Web donde se encuentra la lista secundaria.

  • RelationshipDeleteBehavior. Obtiene la restricción de integridad de datos definida para la relación.

La última propiedad, RelationshipDeleteBehavior, representa un aspecto importante de las relaciones de lista. Un usuario que crea un campo de búsqueda, a través de la interfaz de usuario o el modelo de objetos, puede establecer restricciones sobre cómo afectan los elementos eliminados de una lista a eliminaciones de la otra. Por ejemplo, el usuario puede especificar que eliminaciones desde el elemento principal de lista en cascada para el elemento secundario; es decir, cuando se elimina un elemento de la lista principal, también se eliminan todos los elementos relacionados en la lista de elementos secundarios. El usuario también puede especificar que las eliminaciones de la lista principal están restringidos; no se puede eliminar un elemento de la lista principal si existen elementos relacionados en la lista de elementos secundarios. Para obtener más información, vea la enumeración SPRelationshipDeleteBehavior .

Nota

Para restringir las eliminaciones, el usuario debe tener SPBasePermissions. permiso de ManageLists en la lista primaria.

En SharePoint Foundation un usuario también puede crear una búsqueda de varias columnas. En este caso, la lista secundaria tiene una columna principal que define la relación con la lista primaria, y tiene una o más columnas secundarias que lea los valores de campos en la lista primaria pero dependen de la columna principal para la relación de lista. objetos de SPRelatedField contienen información sobre sólo la columna principal. Para obtener información acerca de las columnas secundarias, llame al método GetDependentLookupInternalNames del objeto SPFieldLookup que representa la columna principal. Para obtener más información, vea el método GetDependentLookupInternalNames() .

Ejemplos

En el siguiente ejemplo es una aplicación de consola que obtiene un elemento de la lista de clientes y busca los elementos relacionados en otras listas en la colección de sitios. Las tareas pesadas se realiza mediante el método PrintRelatedItems de la aplicación, que utiliza un elemento de la lista de búsqueda y la información de un objeto SPRelatedField para crear una consulta en la 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

Vea también

Referencia

clase SPList

Miembros SPList

Sobrecarga GetRelatedFields

Espacio de nombres Microsoft.SharePoint

SPRelatedField

SPFieldLookup

SPRelationshipDeleteBehavior