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.