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.
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
Espacio de nombres Microsoft.SharePoint