Share via


Clase SPRelatedField

Proporciona información acerca de un campo de búsqueda en una lista secundaria que obtiene información de una lista primaria.

Jerarquía de la herencia

System.Object
  Microsoft.SharePoint.SPRelatedField

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

Sintaxis

'Declaración
Public Class SPRelatedField
'Uso
Dim instance As SPRelatedField
public class 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. Para descubrir qué campos de listas secundarias dependen de la información de una lista primaria, llame al método de GetRelatedFields() en un objeto SPList que representa la lista principal.

El método GetRelatedFields devuelve una colección de objetos de SPRelatedField con las siguientes propiedades:

  • LookupList. Obtiene el objeto SPList que representa la lista principal.

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

  • ListId. Obtiene el ID de la lista secundaria.

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

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

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.

Ejemplos

El ejemplo siguiente es una aplicación de consola que muestra información acerca de los campos en la lista Customers que proporcionan datos a los campos de búsqueda de otras listas. Para cada campo relacionado que representa una columna principal, la aplicación llama al método GetDependentLookupInternalNames para obtener una lista de campos que representan las columnas secundarias.

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

La aplicación de consola imprime resultados similares a los del ejemplo siguiente.

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

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

Seguridad para subprocesos

Los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para los subprocesos.

Vea también

Referencia

Miembros SPRelatedField

Espacio de nombres Microsoft.SharePoint

GetRelatedFields()

GetDependentLookupInternalNames()

SPRelatedFieldCollection

SPFieldLookup

IsRelationship

IsDependentLookup

SPRelationshipDeleteBehavior