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