Compartilhar via


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.

Ver também

Referência

SPFieldLookup members

Microsoft.SharePoint namespace

GetRelatedFields()

SPRelatedField

SPRelationshipDeleteBehavior