Utilisation des objets Liste et des collections
Dernière modification : vendredi 9 avril 2010
S’applique à : SharePoint Foundation 2010
Dans cet article
Objets
Collections
Indexeurs
Pour effectuer des actions sur les données de liste dans un site Web SharePoint, vous devez tout d’abord récupérer un objet SPWeb pour l’utiliser comme point d’entrée pour le modèle objet, ce qui vous permet d’accéder aux listes, aux éléments, aux documents, aux utilisateurs, aux alertes, etc. Pour des informations sur la manière de renvoyer les sites Web SharePoint, voir Obtention de références aux sites, applications Web et autres objets clés.
Objets
La plupart des classes des espaces de noms Microsoft.SharePoint et Microsoft.SharePoint.Administration commencent par SP. En règle générale, les classes de l’assembly Microsoft.SharePoint qui ne commencent pas par ce préfixe représentent des contrôles de formulaire Web.
En général, SharePoint Foundation n’enregistre pas les modifications des propriétés d’objet dans la base de données tant que vous n’avez pas appelé la méthode Update sur l’objet spécifié. L’exemple suivant montre comment modifier le titre et la description de la liste des tâches.
Dim oList As SPList = oWebsite.Lists("Tasks")
oList.Title = "New_Title"
oList.Description = "List_Description"
oList.Update()
SPList oList = oWebsite.Lists["Tasks"];
oList.Title="New_Title";
oList.Description="List_Description";
oList.Update();
Notes
Les métadonnées du document ne peuvent pas être modifiées à l’aide de la méthode Update() de l’objet SPListItem si le document est extrait d’une bibliothèque de documents.
Collections
À l'image des listes qui sont au cœur d'un site SharePoint, les collections sont au cœur de ses modèles objet. Vous pouvez utiliser chaque collection pour ajouter, supprimer, énumérer et mettre à jour un type d'objet. Les classes de collection partagent généralement les caractéristiques suivantes :
Leur nom se termine par « collection ».
Elles implémentent l’interface System.Collections.ICollection.
Elles contiennent une propriété Count de type Int32.
Elles contiennent un indexeur Int32 qui peut servir à obtenir le nth élément de la collection.
Elles contiennent un indexeur qui prend un identificateur d’éléments.
Elles possèdent les méthodes Add et Delete.
L’appel de la méthode Add pour une collection met généralement à jour la base de données sur le serveur principal avec les données appropriées, excepté lorsque des informations supplémentaires sont nécessaires pour pouvoir mettre à jour les données. Dans ce cas, la méthode Add renvoie un objet qui permet de rassembler les informations. Par exemple, pour ajouter un élément dans une liste, commencez par utiliser la méthode Add de la classe Microsoft.SharePoint.SPListItemCollection pour renvoyer un objet SPListItem, attribuez des valeurs aux propriétés appropriées de l’objet, puis appelez la méthode Update pour appliquer les modifications dans la base de données de contenu.
Indexeurs
Les indexeurs sont un moyen utile d’accéder à des éléments individuels dans les collections. Pour renvoyer un élément, utilisez les crochets [] en Microsoft C# ou les parenthèses () dans Microsoft Visual Basic pour stocker un index ou une chaîne identifiant l’élément au sein de la collection.
Par exemple, si oWebsite représente une instance de la classe SPWeb, SPList oList = oWebsite.Lists["Announcements"] renvoie la liste Annonces en C# alors que Dim oList As SPList = oWebsite.Lists("Announcements") renvoie la même liste dans Visual Basic.
Pour renvoyer les éléments de la liste, il est conseillé d’appeler l’une des méthodes GetItem* de l’objet liste et de spécifier les éléments à récupérer. L’utilisation de la propriété Items pour obtenir tous les éléments d’une liste peut diminuer les performances, car toutes les colonnes pour tous les éléments sont retournées. À la place, utilisez, par exemple, la méthode GetItems et transmettez un objet SPQuery pour spécifier le sous-ensemble : SPListItemCollection collItem = oList.GetItems(oQuery) (dans Visual Basic, Dim collItem As SPListItemCollection = oList.GetItems(oQuery)).
Après avoir renvoyé une collection d’éléments d’une liste à l’aide d’une méthode GetItem*, vous pouvez spécifier un nom de champ en tant qu’indexeur et parcourir la collection afin de renvoyer des valeurs à partir du champ. L’exemple suivant affiche les valeurs Due Date (Date d’échéance), Status (État) et Title (Titre) pour chaque élément d’une collection :
Dim oItem As SPListItem
For Each oItem In collItem
Response.Write(SPEncode.HtmlEncode(oItem("Due Date").ToString()) + "<BR>")
Response.Write(SPEncode.HtmlEncode(oItem("Status").ToString()) + "<BR>")
Response.Write(SPEncode.HtmlEncode(oItem("Title").ToString()) + "<BR>")
Next oItem
foreach(SPListItem oItem in collItem)
{
Response.Write(SPEncode.HtmlEncode(oItem["Due Date"].ToString()) + "<BR>");
Response.Write(SPEncode.HtmlEncode(oItem["Status"].ToString()) + "<BR>");
Response.Write(SPEncode.HtmlEncode(oItem["Title"].ToString()) + "<BR>");
}
Notes
En plus de nécessiter une directive using (Imports dans Visual Basic) pour l'espace de noms Microsoft.SharePoint, l'exemple précédent nécessite une directive pour l'espace de noms Microsoft.SharePoint.Utilities.
L'exemple suivant montre comment renvoyer toutes les valeurs Title (Titre) et Status (État) pour la liste des tâches sur un site Web SharePoint.
Dim oWebsite As SPWeb = SPContext.Current.Web
Dim oList As SPList = oWebsite.Lists("Tasks")
Dim collItem As SPListItemCollection = oList.GetItems("Title", "Status")
Dim oItem As SPListItem
For Each oItem In collItem
Response.Write(SPEncode.HtmlEncode(oItem("Title").ToString()) + " :: " _
& SPEncode.HtmlEncode(oItem("Status").ToString()) + "<BR>")
Next oItem
SPWeb oWebsite = SPContext.Current.Web;
SPList oList = oWebsite.Lists["Tasks"];
SPListItemCollection collItem = oList.GetItems("Title", "Status");
foreach(SPListItem oItem in collItem)
{
Response.Write(SPEncode.HtmlEncode(oItem["Title"].ToString()) + " :: " +
SPEncode.HtmlEncode(oItem["Status"].ToString()) + "<BR>");
}
Si la limitation de requêtes a été implémentée, cela peut se traduire par le blocage des requêtes inefficaces en raison de problèmes liés à un nombre trop élevé de recherches ou d’éléments. Vous pouvez améliorer l’efficacité d’une requête et réduire les problèmes liés au nombre de recherches en définissant un objet SPQuery qui spécifie un ensemble restreint de champs d’affichage (ViewFields), puis en transmettant cet objet requête à la méthode GetItems, comme illustré dans l’exemple suivant.
Dim oQuery As New SPQuery()
oQuery.Query = "<ViewFields><FieldRef Name = ""Title"" />" &
"<FieldRef Name = ""Status""/></ViewFields>"
Dim collItem As SPListItemCollection = oList.GetItems(oQuery)
SPQuery oQuery = new SPQuery();
oQuery.Query = "<ViewFields><FieldRef Name = \"Title\" />" +
"<FieldRef Name = \"Status\"/></ViewFields>";
SPListItemCollection collItem = oList.GetItems(oQuery);
Pour résoudre les problèmes de limitation liés au nombre d’éléments, vous pouvez être amené à paginer les résultats sur l’index d’élément en utilisant la classe SPListItemCollectionPosition.
Notes
En plus de nécessiter une directive using (Imports dans Visual Basic) pour l’espace de noms Microsoft.SharePoint, l’exemple précédent nécessite une directive pour l’espace de noms Microsoft.SharePoint.Utilities.
Vous pouvez également utiliser des indexeurs pour modifier des valeurs dans une liste. Dans l’exemple suivant, un nouvel élément de liste est ajouté à une collection et les valeurs d’une colonne d’URL sont attribuées à l’élément.
Dim oNewItem As SPListItem = oList.Items.Add()
oNewItem("URL_Field_Name") = "URL, _ Field_Description"
oNewItem.Update()
SPListItem oNewItem = oList.Items.Add();
oNewItem["URL_Field_Name"] = "URL, Field_Description";
oNewItem.Update();
Notes
Le type de champ URL est unique car il fait intervenir deux valeurs séparées par une virgule et un espace. Dans l'exemple ci-dessus, ces valeurs sont toutes deux attribuées au nouvel élément via un indexeur unique.
L’exemple suivant utilise la méthode GetItemById(Int32) pour renvoyer un élément, puis définit ses valeurs de colonne d’état et de titre.
Dim oItem As SPListItem = oList.GetItemById(1)
oItem("Status") = "Task_Status"
oItem("Title") = "Task_Title"
oItem.Update()
SPListItem oItem = oList.GetItemById(1);
oItem["Status"]="Task_Status";
oItem["Title"]="Task_Title";
oItem.Update();
Si vous pouvez spécifier la liste des champs à récupérer pour l’élément et qu’aucun des champs n’est de type Lookup ou d’un type de champ qui hérite de SPFieldLookup, vous pouvez améliorer les performances en appelant la méthode GetItemByIdSelectedFields(Int32, []), au lieu d’appeler GetItemById(Int32).
Notes
Un indexeur lève une exception ArgumentOutOfRange s'il ne trouve pas l'élément spécifié.
Pour plus d'informations sur les formats de données spécifiques utilisés pour des éléments de liste de SharePoint Foundation, voir la classe SPListItem.
Voir aussi
Référence
Microsoft.SharePoint.Administration
Concepts
Procédure : renvoyer des éléments à partir d'une liste
Procédure : créer ou supprimer des listes
Procédure : ajouter ou supprimer des éléments de liste
Procédure : lire la valeur d’un champ d’un élément de liste
Espaces de noms du modèle objet SharePoint Foundation
Utilisation de Visual Studio pour le développement SharePoint
Obtention de références aux sites, applications Web et autres objets clés