SPFieldLookup class
Representa um campo de pesquisa.
Inheritance hierarchy
System.Object
Microsoft.SharePoint.SPField
Microsoft.SharePoint.SPFieldLookup
Microsoft.SharePoint.Applications.GroupBoard.SPFieldFacilities
Microsoft.SharePoint.SPFieldUser
Namespace: Microsoft.SharePoint
Assembly: Microsoft.SharePoint (in Microsoft.SharePoint.dll)
Syntax
'Declaração
Public Class SPFieldLookup _
Inherits SPField
'Uso
Dim instance As SPFieldLookup
public class SPFieldLookup : SPField
Comentários
Um campo de pesquisa leva seu valor de um campo em outra lista. A lista que fornece dados para o campo de pesquisa é chamada de lista de pesquisa. Para obter uma referência para a lista de pesquisa, acesse a propriedade de LookupList do objeto SPFieldLookup . Para determinar qual campo na lista de pesquisa está fornecendo informações, acesse a propriedade LookupField .
Dica
A classe SPFieldLookup corresponde ao tipo de dados Lookup que é especificado no XML declarativa através do atributo Type do elemento de campo . O atributo List do elemento Field corresponde à propriedade LookupList da classe SPFieldLookup .
Embora a classe SPFieldLookup tem um construtor, geralmente é mais conveniente para chamar o método AddLookup da classe SPFieldCollection . O método AddLookup possui uma sobrecarga que você pode usar para criar uma pesquisa a uma lista em um site diferente em que você está criando o objeto SPFieldLookup .
Microsoft SharePoint Foundation oferece suporte a pesquisas de várias colunas. Nesse caso, uma coluna principal estabelece a relação com a lista de pesquisa apontando para um campo da lista de destino, e uma ou mais colunas secundário aponte para outros campos da lista de destino. Você pode criar o campo de pesquisa para uma coluna secundária, chamando o método AddDependentLookup da classe SPFieldCollection . Para uma coluna secundária, a propriedade IsDependentLookup retorna true. Para uma coluna principal, IsDependentLookup retorna false e a propriedade IsRelationship retorna true.
SharePoint Foundation oferece suporte a integridade referencial para itens de lista, tornando possível para campos de pesquisa para definir restrições de exclusão na lista de pesquisa. Isso pode ser feito através da propriedade RelationshipDeleteBehavior , que usa um dos seguintes valores da enumeração SPRelationshipDeleteBehavior :
Cascade. Excluir um item da lista de pesquisa faz com que todos os itens relacionados a ser excluído da lista que contém o campo pesquisa.
Restrict. Impede que um item na lista de pesquisa sejam excluídos se existirem itens relacionados na lista que contém o campo pesquisa.
None. Nenhuma restrição (o padrão).
Para especificar o Cascade ou Restrict, o usuário deve ter SPBasePermissions.permissão de ManageLists na lista de pesquisa. Além disso, Cascade e Restrict requerem que o campo pesquisa ser indexado. Antes de definir a propriedade RelationshipDeleteBehavior para qualquer um desses valores, defina a propriedade Indexed para true.
Dica
Você não pode definir uma restrição de exclusão em um campo de pesquisa que permite vários valores, nem é possível se a lista de pesquisa de outro site da Web.
Em SharePoint Foundation, campos de pesquisa em uma lista relacionado são localizáveis da lista de pesquisa (o destino da pesquisa) por meio do método GetRelatedFields() da classe SPList . O método GetRelatedFields possui uma sobrecarga que permite filtrar campos de pesquisa que especificar uma restrição de exclusão específica.
Lookup Field Values
Por padrão, um campo de pesquisa contém apenas um valor. Nesse caso, o valor do campo é um objeto do tipo String, e a seqüência de caracteres tem o seguinte formato:
Id;#Value
ID é o identificador do item de lista que aponta o campo de pesquisa. Valor é o valor do campo ao qual o campo de pesquisa aponta para. As duas partes da seqüência de caracteres são delimitadas por caracteres de ";#". Se o valor contiver um ponto e vírgula (";"), ele sofre escape com um ponto e vírgula (";").
Por exemplo, se o campo de pesquisa aponta para o terceiro item da lista e o valor do campo ao qual o campo de pesquisa aponta para é "que acabam em pneus antigos; fortalece a minha jaw", então a seguinte seqüência será retornada:
3;#I gnaw on old tires;;it strengthens my jaw
Você pode analisar essa cadeia de caracteres, ou você pode passá-lo como um argumento para o construtor de um objeto SPFieldLookupValue . Você pode obter o identificador do item de lista a propriedade LookupId de um objeto de SPFieldLookupValue e o valor do campo no item da lista da propriedade LookupValue .
Um campo de pesquisa pode ter vários valores, se a propriedade AllowMultipleValues retorna true. Nesse caso, o valor do campo é um objeto do tipo SPFieldLookupValueCollection in a box como Object. Você pode obter todos os valores primeiro converter o valor do campo brutos para SPFieldLookupValueCollection e, em seguida, enumerar os objetos SPFieldLookupValue na coleção.
Notes to inheritors
No SharePoint Foundation, colunas com base em tipos de campo personalizados são somente leitura no modo folha de dados.
Examples
O exemplo a seguir é um aplicativo de console que cria uma relação entre a lista de clientes e a lista de pedidos pendentes. O aplicativo chama o método AddLookup para adicionar um campo de pesquisa primário chamado ID de cliente à lista de pedidos pendentes e aponta o campo no campo ID da lista de clientes. O novo campo de identificação do cliente é indexado e definido para restringir as exclusões da lista de pesquisa.
Depois de criar o campo de pesquisa primário, o aplicativo cria três campos secundários chamados primeiro nome, sobrenome e telefone. O aplicativo cria esses campos, chamando o método AddDependentLookup do objeto que representa a coleção de campos da lista de pedidos pendentes.
using System;
using Microsoft.SharePoint;
namespace RelatedLists
{
class Program
{
static void Main(string[] args)
{
using (SPSite siteCollection = new SPSite("https://localhost"))
{
using (SPWeb site = siteCollection.OpenWeb())
{
SPList lookupList = site.Lists.TryGetList("Customers");
SPList relatedList = site.Lists.TryGetList("Pending Orders");
if (lookupList != null && relatedList != null)
{
// Create the primary column.
string strPrimaryCol = relatedList.Fields.AddLookup("Customer ID", lookupList.ID, true);
SPFieldLookup primaryCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strPrimaryCol);
primaryCol.LookupField = lookupList.Fields["ID"].InternalName;
primaryCol.Indexed = true;
primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.Restrict;
primaryCol.Update();
// Create the secondary columns.
string strFirstNameCol = relatedList.Fields.AddDependentLookup("First Name", primaryCol.Id);
SPFieldLookup firstNameCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strFirstNameCol);
firstNameCol.LookupField = lookupList.Fields["First Name"].InternalName;
firstNameCol.Update();
string strLastNameCol = relatedList.Fields.AddDependentLookup("Last Name", primaryCol.Id);
SPFieldLookup lastNameCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strLastNameCol);
lastNameCol.LookupField = lookupList.Fields["Last Name"].InternalName;
lastNameCol.Update();
string strPhoneCol = relatedList.Fields.AddDependentLookup("Phone", primaryCol.Id);
SPFieldLookup phoneCol = (SPFieldLookup)relatedList.Fields.GetFieldByInternalName(strPhoneCol);
phoneCol.LookupField = lookupList.Fields["Phone"].InternalName;
phoneCol.Update();
}
}
}
Console.Write("\nPress ENTER to continue...");
Console.ReadLine();
}
}
}
Imports System
Imports Microsoft.SharePoint
Module ConsoleApp
Sub Main()
Using siteCollection As New SPSite("https://localhost")
Using site As SPWeb = siteCollection.OpenWeb()
Dim lookupList As SPList = site.Lists.TryGetList("Customers")
Dim relatedList As SPList = site.Lists.TryGetList("Pending Orders")
If lookupList IsNot Nothing AndAlso relatedList IsNot Nothing Then
' Create the primary column.
Dim strPrimaryCol As String = relatedList.Fields.AddLookup("Customer ID", lookupList.ID, True)
Dim primaryCol As SPFieldLookup = _
DirectCast(relatedList.Fields.GetFieldByInternalName(strPrimaryCol), SPFieldLookup)
primaryCol.LookupField = lookupList.Fields("ID").InternalName
primaryCol.Indexed = True
primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.Restrict
primaryCol.Update()
' Create the secondary columns.
Dim strFirstNameCol As String = relatedList.Fields.AddDependentLookup("First Name", primaryCol.Id)
Dim firstNameCol As SPFieldLookup = _
DirectCast(relatedList.Fields.GetFieldByInternalName(strFirstNameCol), SPFieldLookup)
firstNameCol.LookupField = lookupList.Fields("First Name").InternalName
firstNameCol.Update()
Dim strLastNameCol As String = relatedList.Fields.AddDependentLookup("Last Name", primaryCol.Id)
Dim lastNameCol As SPFieldLookup = _
DirectCast(relatedList.Fields.GetFieldByInternalName(strLastNameCol), SPFieldLookup)
lastNameCol.LookupField = lookupList.Fields("Last Name").InternalName
lastNameCol.Update()
Dim strPhoneCol As String = relatedList.Fields.AddDependentLookup("Phone", primaryCol.Id)
Dim phoneCol As SPFieldLookup = _
DirectCast(relatedList.Fields.GetFieldByInternalName(strPhoneCol), SPFieldLookup)
phoneCol.LookupField = lookupList.Fields("Phone").InternalName
phoneCol.Update()
End If
End Using
End Using
Console.Write(vbLf & "Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
O exemplo a seguir demonstra como interpretar o valor de um campo de pesquisa.
O código de exemplo é para uma lista de questões no site da Web raiz de um conjunto de sites. O tipo de lista de problemas é escolhido aqui porque ela possui vários campos de pesquisa. Você pode modificar o exemplo selecionando outro tipo de lista. O exemplo de ter encontrado uma lista, seleciona o primeiro campo de pesquisa que localiza no conjunto de campos da lista. Em seguida, o código itera através de itens da lista, as informações de impressão sobre o valor do campo de pesquisa de cada item.
using System;
using Microsoft.SharePoint;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.RootWeb)
{
SPList list = null;
foreach (SPList webList in web.Lists)
{
if (webList.BaseType == SPBaseType.Issue)
{
list = webList;
break;
}
}
if (list != null)
{
Guid fieldId = Guid.Empty;
foreach (SPField field in list.Fields)
{
if (field is SPFieldLookup)
{
fieldId = field.Id;
break;
}
}
if (fieldId != Guid.Empty)
{
SPFieldLookup lookupField = list.Fields[fieldId] as SPFieldLookup;
Console.WriteLine("Lookup field: {0}", lookupField.Title);
foreach (SPListItem item in list.Items)
{
object rawValue = item[fieldId];
if (rawValue != null)
{
Console.WriteLine("\nItem: {0}. {1}", item.ID, item.Title);
Console.WriteLine("Raw value: {0}", rawValue);
if (lookupField.AllowMultipleValues)
{
SPFieldLookupValueCollection values = item[fieldId] as SPFieldLookupValueCollection;
foreach (SPFieldLookupValue value in values)
{
PrintValue(value);
}
}
else
{
SPFieldLookupValue value = new SPFieldLookupValue(rawValue.ToString());
PrintValue(value);
}
}
}
}
}
}
}
Console.Write("\nPress ENTER to continue...");
Console.ReadLine();
}
public static void PrintValue(SPFieldLookupValue value)
{
Console.WriteLine("Lookup item ID: {0}", value.LookupId);
Console.WriteLine("Lookup item value: {0}", value.LookupValue);
}
}
}
Imports System
Imports Microsoft.SharePoint
Module ConsoleApp
Sub Main(ByVal args As String())
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.RootWeb
Dim list As SPList = Nothing
For Each webList As SPList In web.Lists
If webList.BaseType = SPBaseType.Issue Then
list = webList
Exit For
End If
Next
If list <> Nothing Then
Dim fieldId As Guid = Guid.Empty
For Each field As SPField In list.Fields
If TypeOf field Is SPFieldLookup Then
fieldId = field.Id
Exit For
End If
Next
If fieldId <> Guid.Empty Then
Dim lookupField As SPFieldLookup = TryCast(list.Fields(fieldId), SPFieldLookup)
Console.WriteLine("Lookup field: {0}", lookupField.Title)
For Each item As SPListItem In list.Items
Dim rawValue As Object = item(fieldId)
If rawValue <> Nothing Then
Console.WriteLine(vbLf & "Item: {0}. {1}", item.ID, item.Title)
Console.WriteLine("Raw value: {0}", rawValue)
If lookupField.AllowMultipleValues Then
Dim values As SPFieldLookupValueCollection = TryCast(item(fieldId), _
SPFieldLookupValueCollection)
For Each value As SPFieldLookupValue In values
PrintValue(value)
Next
Else
Dim value As New SPFieldLookupValue(rawValue.ToString())
PrintValue(value)
End If
End If
Next
End If
End If
End Using
End Using
Console.Write(vbLf & "Press ENTER to continue...")
Console.ReadLine()
End Sub
Sub PrintValue(ByVal value As SPFieldLookupValue)
Console.WriteLine("Lookup item ID: {0}", value.LookupId)
Console.WriteLine("Lookup item value: {0}", value.LookupValue)
End Sub
End Module
Thread safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.