Partager via


SPFieldLookup - Classe

Représente un champ liste de choix.

Hiérarchie d’héritage

System.Object
  Microsoft.SharePoint.SPField
    Microsoft.SharePoint.SPFieldLookup
      Microsoft.SharePoint.Applications.GroupBoard.SPFieldFacilities
      Microsoft.SharePoint.SPFieldUser

Espace de noms :  Microsoft.SharePoint
Assembly :  Microsoft.SharePoint (dans Microsoft.SharePoint.dll)

Syntaxe

'Déclaration
Public Class SPFieldLookup _
    Inherits SPField
'Utilisation
Dim instance As SPFieldLookup
public class SPFieldLookup : SPField

Remarques

Un champ liste de choix prend sa valeur d'un champ dans une autre liste. La liste qui fournit des données pour le champ de recherche est appelée liste de choix. Pour obtenir une référence à la liste de recherche, accédez à propriété LookupList l'objet SPFieldLookup . Pour déterminer quel champ de la liste de recherche fournit des informations, accédez à la propriété LookupField .

Notes

La classe SPFieldLookup correspond au type de données Lookup qui est spécifié dans le fichier XML déclarative par le biais de l'attribut Type de l'élément Field . L'attribut List de l'élément Field correspond à la propriété LookupList de la classe SPFieldLookup .

La classe SPFieldLookup n'a pas un constructeur, mais il est souvent plus commode d'appeler la méthode AddLookup de la classe SPFieldCollection . La méthode AddLookup a une surcharge qui vous permet de créer une liste de choix à une liste dans un site Web différent de celui dans lequel vous créez l'objet SPFieldLookup .

Microsoft SharePoint Foundation prend en charge les recherches à colonnes multiples. Dans ce cas, une colonne principale établit la relation avec la liste de choix en pointant vers un champ dans la liste des cibles, et une ou plusieurs colonnes secondaire point à d'autres champs dans la liste cible. Vous pouvez créer le champ de recherche pour une colonne secondaire en appelant la méthode AddDependentLookup de la classe SPFieldCollection . Pour une colonne secondaire, la propriété IsDependentLookup renvoie true. Pour une colonne primaire, IsDependentLookup renvoie false et la propriété IsRelationship renvoie true.

SharePoint Foundation prend en charge l'intégrité référentielle pour les éléments de liste en rendant possible pour les champs de recherche définir des contraintes de suppression sur la liste de recherche. Pour ce faire par le biais de la propriété RelationshipDeleteBehavior , qui prend l'une des valeurs d'énumération SPRelationshipDeleteBehavior suivantes :

  • Cascade. Suppression d'un élément de la liste de recherche entraîne tous les éléments associés à supprimer de la liste qui contient le champ de recherche.

  • Restrict. Empêche un élément dans la liste de choix d'être supprimé s'il existent des éléments associés dans la liste qui contient le champ de recherche.

  • None. Aucune contrainte (la valeur par défaut).

Pour spécifier Cascade ou Restrict, l'utilisateur doit disposer de SPBasePermissions.autorisation de ManageLists sur la liste de recherche. En outre, Cascade et Restrict requièrent que le champ de recherche indexées. Avant de définir la propriété RelationshipDeleteBehavior à une de ces valeurs, tout d'abord définir la propriété Indexed à true.

Notes

Vous ne pouvez pas définir une contrainte de suppression sur un champ liste de choix qui autorise plusieurs valeurs, et n'est pas possible si la liste de recherche se trouve dans un autre site Web.

Dans SharePoint Foundation, les champs liste de choix dans une liste liée peuvent être découverts à partir de la liste de choix (la cible de la recherche) par le biais de la méthode GetRelatedFields() de la classe SPList . La méthode GetRelatedFields a une surcharge qui permet de filtrer des champs liste de choix qui spécifient une contrainte de suppression particulière.

Lookup Field Values

Par défaut, un champ de recherche contient qu'une seule valeur. Dans ce cas, la valeur du champ est un objet de type String, et la chaîne a le format suivant :

Id;#Value

ID est l'identificateur de l'élément de liste vers le champ de recherche. Valeur est la valeur de ce champ vers le champ de recherche. Les deux parties de la chaîne sont délimitées par les caractères «;#». Si la valeur contient un point-virgule («; »), précédée d'un point-virgule («; »).

Par exemple, si le champ de recherche pointe sur le troisième élément de la liste et la valeur de ce champ vers le champ de recherche est « je perturber sur pneus anciens ; Il renforce mon MÂCHOIRE », la chaîne suivante est retournée :

3;#I gnaw on old tires;;it strengthens my jaw

Vous pouvez analyser cette chaîne vous-même, ou vous pouvez la passer en tant qu'argument au constructeur d'un objet SPFieldLookupValue . Vous pouvez obtenir l'identificateur de l'élément de liste à partir de la propriété LookupId d'un objet SPFieldLookupValue et la valeur du champ dans l'élément de liste à partir de la propriété LookupValue .

Un champ liste de choix peut avoir plusieurs valeurs si la propriété AllowMultipleValues renvoie true. Dans ce cas, la valeur du champ est un objet de type SPFieldLookupValueCollection qui est boxed en tant que Object. Vous pouvez obtenir toutes les valeurs par le casting tout d'abord la valeur du champ brut à SPFieldLookupValueCollection et l'énumération des objets dans la collection SPFieldLookupValue .

Remarques destinées aux héritiers

Dans SharePoint Foundation, les colonnes basées sur des types de champ personnalisés sont en lecture seule en mode feuille de données.

Exemples

L'exemple suivant est une application console qui crée une relation entre la liste des clients et la liste des commandes en attente. L'application appelle la méthode AddLookup pour ajouter un champ de recherche principal nommé code client à la liste des commandes en attente et pointe le champ dans le champ ID de la liste des clients. Le nouveau champ code client est indexé et restreint de suppressions à partir de la liste de recherche.

Après avoir créé le champ de recherche principal, l'application crée trois champs secondaires nommées prénom, nom et téléphone. L'application crée ces champs en appelant la méthode AddDependentLookup de l'objet qui représente la collection de champs de la liste des commandes en attente.

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

L'exemple suivant montre comment interpréter la valeur d'un champ liste de choix.

L'exemple de code recherche une liste de problèmes dans le site Web racine d'une collection de sites. Le type de liste de problèmes est choisi ici car elle comporte plusieurs champs de recherche. Vous pouvez modifier l'exemple en sélectionnant un autre type de liste. Avoir trouvé une liste, l'exemple sélectionne le premier champ de recherche qu'il trouve dans la collection de champs de la liste. Le code parcourt ensuite les éléments de liste, les informations d'impression sur la valeur de chaque élément champ de recherche.

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

Cohérence de thread

Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.

Voir aussi

Référence

SPFieldLookup - Membres

Microsoft.SharePoint - Espace de noms

GetRelatedFields()

SPRelatedField

SPRelationshipDeleteBehavior