Procédure : récupérer des éléments de liste
Dernière modification : vendredi 29 avril 2011
S’applique à : SharePoint Foundation 2010
Dans cet article
Récupération des éléments d’une liste
Utilisation de la méthode Include
Récupération de champs spécifiques d’un nombre spécifié d’éléments
Récupération d’éléments auprès de toutes les listes d’un site Web
Récupération d’éléments à l’aide de la position dans la collection des éléments de liste
Disponible dans SharePoint Online
Pour retourner les éléments d’une liste, utilisez la méthode GetItemById() (JavaScript: getItemById(id)) pour retourner un seul élément, ou bien la méthode GetItems(CamlQuery) (JavaScript: getItems(query)) pour retourner plusieurs éléments. Vous utilisez ensuite la méthode Load<T>(T, []) (JavaScript: load(clientObject)) pour accéder aux objets Élément de liste qui représentent les éléments.
Récupération des éléments d’une liste
La méthode GetItems(CamlQuery) (JavaScript: getItems(query)) vous permet de définir une requête CAML (Collaborative Application Markup Language) qui spécifie les éléments à retourner. Vous pouvez passer un objet CamlQuery non défini (JavaScript: CamlQuery) pour retourner tous les éléments de la liste, ou bien utiliser la propriété ViewXml (JavaScript: viewXml) pour définir une requête CAML et retourner les éléments qui correspondent à des critères spécifiques.
L’exemple suivant affiche l’ID ainsi que les valeurs des colonnes Title et Body des 100 premiers éléments de la liste Announcements, en commençant par les éléments de liste dont l’ID dans la collection est supérieur à 10.
using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveListItems
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Geq><FieldRef Name='ID'/>" +
"<Value Type='Number'>10</Value></Geq></Where></Query><RowLimit>100</RowLimit></View>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem);
clientContext.ExecuteQuery();
foreach (ListItem oListItem in collListItem)
{
Console.WriteLine("ID: {0} \nTitle: {1} \nBody: {2}", oListItem.Id, oListItem["Title"], oListItem["Body"]);
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveListItems
Shared Sub Main ()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")
Dim camlQuery As New CamlQuery()
camlQuery.ViewXml = "<View><Query><Where><Geq><FieldRef Name='ID'/>" + _
"<Value Type='Number'>10</Value></Geq></Where></Query><RowLimit>100</RowLimit></View>"
Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)
clientContext.Load(collListItem)
clientContext.ExecuteQuery()
Dim oListItem As ListItem
For Each oListItem In collListItem
Console.WriteLine("ID: {0} " + ControlChars.Lf + "Title: {1} " + _
ControlChars.Lf + "Body: {2}", oListItem.Id, _
oListItem("Title"), oListItem("Body"))
Next oListItem
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveListItems() {
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
'<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>10</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
listItemInfo += '\nID: ' + oListItem.get_id() +
'\nTitle: ' + oListItem.get_item('Title') +
'\nBody: ' + oListItem.get_item('Body');
}
alert(listItemInfo.toString());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
L’exemple ci-dessus charge la collection d’éléments spécifiés par la requête CAML, et il est ensuite possible d’accéder à toutes les propriétés par défaut sur chaque objet Élément de liste qui est retourné. Utilisez la méthode Include<TSource>(IQueryable<TSource>, []) pour améliorer les performances en limitant la quantité de données retournées via la requête en spécifiant les propriétés disponibles. Dans ECMAScript (JavaScript, JScript), spécifiez l’instruction Include dans la chaîne de requête qui est passée à la méthode load(clientObject)).
Utilisation de la méthode Include
Quatre propriétés de ListItem (JavaScript: ListItem) ne sont pas disponibles par défaut lorsque vous retournez des éléments de liste : DisplayName (JavaScript: displayName), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) et RoleAssignments (JavaScript: roleAssignments). L’exemple précédent retourne une exception PropertyOrFieldNotInitializedException si vous essayez d’accéder à l’une de ces propriétés. Pour accéder à ces propriétés, utilisez la méthode Include<TSource>(IQueryable<TSource>, []) dans une expression de requête LINQ pour les retourner explicitement. Dans ECMAScript (JavaScript, JScript), spécifiez Include dans la chaîne de requête. Pour plus d’informations sur les propriétés non accessibles par défaut, voir Vue d'ensemble de la récupération des données.
Pour modifier l’exemple précédent de façon à ce qu’il retourne la valeur de DisplayName (JavaScript: displayName) et de HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), vous pouvez remplacer l’appel précédent à la méthode Load<T>(T, []) (JavaScript: load(clientObject)) par un appel qui utilise une requête LINQ qui, en C#, requiert une référence à l’espace de noms System.Linq. En ECMAScript (JavaScript, JScript), spécifiez Include.
Notes
Lorsque vous utilisez LINQ pour créer des requêtes sur le modèle objet client, vous utilisez LINQ to Objects, et non pas le fournisseur LINQ to SharePoint, qui peut être utilisé seulement lorsque vous écrivez du code pour le modèle objet client.
using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveListItemsInclude
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><RowLimit>100</RowLimit></View>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem,
items => items.Include(
item => item.Id,
item => item.DisplayName,
item => item.HasUniqueRoleAssignments));
clientContext.ExecuteQuery();
foreach (ListItem oListItem in collListItem)
{
Console.WriteLine("ID: {0} \nDisplay name: {1} \nUnique role assignments: {2}",
oListItem.Id, oListItem.DisplayName, oListItem.HasUniqueRoleAssignments);
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveListItemsInclude
Shared Sub Main ()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oList As List = clientContext.Web.Lists.GetByTitle("Announcements")
Dim camlQuery As New CamlQuery()
camlQuery.ViewXml = "<View><RowLimit>100</RowLimit></View>"
Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)
clientContext.Load(collListItem, _
Function(items) items.Include( _
Function(item) item.Id, _
Function(item) item.DisplayName, _
Function(item) item.HasUniqueRoleAssignments))
clientContext.ExecuteQuery()
Dim oListItem As ListItem
For Each oListItem In collListItem
Console.WriteLine("ID: {0} " + ControlChars.Lf + _
"Display name: {1} " + ControlChars.Lf + _
"Unique role assignments: {2}", oListItem.Id, _
oListItem.DisplayName, oListItem.HasUniqueRoleAssignments)
Next oListItem
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveListItemsInclude() {
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem, 'Include(Id, DisplayName, HasUniqueRoleAssignments)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
listItemInfo += '\nID: ' + oListItem.get_id() +
'\nDisplay name: ' + oListItem.get_displayName() +
'\nUnique role assignments: ' + oListItem.get_hasUniqueRoleAssignments();
}
alert(listItemInfo.toString());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Comme cet exemple utilise la méthode Include<TSource>(IQueryable<TSource>, []) (dans ECMAScript (JavaScript, JScript), Include), seules les propriétés spécifiées sont disponibles après l’exécution de la requête. Par conséquent, vous recevez une exception PropertyOrFieldNotInitializedException si vous essayez d’accéder à d’autres propriétés que celles qui ont été spécifiées. En outre, vous recevez cette erreur si vous essayez d’utiliser des propriétés telles que ContentType (JavaScript: contentType) ou ParentList (JavaScript: parentList) pour accéder aux propriétés des objets contenants.
Récupération de champs spécifiques d’un nombre spécifié d’éléments
L’exemple suivant montre comment récupérer des champs spécifiques seulement auprès des cinq premiers éléments d’une liste. Comme seules les colonnes Title et Body sont spécifiées, ce sont les seules propriétés disponibles.
using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveSpecificItemsFields
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
CamlQuery camlQuery = new CamlQuery();
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(
collListItem,
items => items.Take(5).Include(
item => item["Title"],
item => item["Body"]));
clientContext.ExecuteQuery();
foreach (ListItem oListItem in collListItem)
{
Console.WriteLine("Title: {0} \nBody: {1}\n", oListItem["Title"], oListItem["Body"]);
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveSpecificItemsFields
Shared Sub Main ()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")
Dim camlQuery As New CamlQuery()
Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)
clientContext.Load(collListItem, _
Function(items) items.Take(5).Include( _
Function(item) item("Title"), _
Function(item) item("Body")))
clientContext.ExecuteQuery()
Dim oListItem As ListItem
For Each oListItem In collListItem
Console.WriteLine("Title: {0} " + ControlChars.Lf + "Body: {1}" + _
ControlChars.Lf, oListItem("Title"), oListItem("Body"))
Next oListItem
End Sub
End Class
End Namespace
L’exemple précédent passe l’objet CamlQuery à la méthode Load<T>(T, []) sans spécifier une chaîne de requête CAML, qui retournerait normalement tous les éléments de la liste ; dans ce cas cependant, la méthode Take<TSource>(IQueryable<TSource>, Int32) limite le nombre d’éléments qui sont retournés.
Notes
La méthode load(clientObject) du modèle objet JavaScript de Microsoft SharePoint Foundation 2010 ne prend pas en charge l’utilisation de la méthode Take<TSource>(IQueryable<TSource>, Int32) qui est utilisée dans l’exemple précédent.
Récupération d’éléments auprès de toutes les listes d’un site Web
L’exemple suivant montre comment récupérer les titres des dix premiers éléments dans toutes les listes d’un site Web.
using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveFirstTenItemsAllLists
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
ListCollection collList = clientContext.Web.Lists;
clientContext.Load(
collList,
lists => lists.Where(
list => list.Hidden == false).Include(
list => list.Title,
list => list.Items.Take(10)));
clientContext.ExecuteQuery();
foreach (SP.List oList in clientContext.Web.Lists)
{
string listTitle = oList.Title;
int itemCount = oList.Items.Count;
Console.WriteLine("List {0} returned with {1} items", listTitle, itemCount);
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveFirstTenItemsAllLists
Shared Sub Main ()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim collList As ListCollection = clientContext.Web.Lists
clientContext.Load(collList, _
Function(lists) lists.Where( _
Function(list) list.Hidden = False).Include( _
Function(list) list.Title, _
Function(list) list.Items.Take(10)))
clientContext.ExecuteQuery()
Dim oList As SP.List
For Each oList In clientContext.Web.Lists
Dim listTitle As String = oList.Title
Dim itemCount As Integer = oList.Items.Count
Console.WriteLine("List {0} returned with {1} items", listTitle, itemCount)
Next oList
End Sub
End Class
End Namespace
Notes
Dans SharePoint Foundation 2010, la méthode load(clientObject) de JavaScript ne prend pas en charge l’utilisation de la méthode Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>) qui est utilisée dans l’exemple précédent.
Récupération d’éléments à l’aide de la position dans la collection des éléments de liste
Vous pouvez utiliser la classe ListItemCollectionPosition pour implémenter une récupération d’éléments de liste par pagination selon la position des éléments dans leur collection. Utilisez l’élément RowLimit pour spécifier le nombre d’éléments à retourner par page. L’exemple suivant boucle à travers tous les éléments de la liste Announcements, en utilisant la propriété ListItemCollectionPosition de la classe CamlQuery et la propriété ListItemCollectionPosition de la classe ListItemCollection, pour alternativement obtenir (get) ou définir (set) la position de chaque itération à travers une collection, en se conformant à cinq éléments par page. Tant qu’il est vrai (true) que cinq éléments ont été retournés pour une page, la boucle continue et utilise la propriété PagingInfo pour afficher les informations de pagination, ainsi que les informations sur chacun des cinq éléments qui sont retournés. Lorsque moins de cinq éléments sont retournés pour une page, la boucle s’arrête.
using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class UsingItemCollectionPosition
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
ListItemCollectionPosition itemPosition = null;
while (true)
{
CamlQuery camlQuery = new CamlQuery();
camlQuery.ListItemCollectionPosition = itemPosition;
camlQuery.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" +
"<FieldRef Name='Title'/><FieldRef Name='Body'/>" +
"</ViewFields><RowLimit>5</RowLimit></View>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem);
clientContext.ExecuteQuery();
itemPosition = collListItem.ListItemCollectionPosition;
foreach (ListItem oListItem in collListItem)
{
Console.WriteLine("Title: {0}: \nBody: {1}", oListItem["Title"], oListItem["Body"]);
}
if (itemPosition == null)
{
break;
}
Console.WriteLine("\n" + itemPosition.PagingInfo + "\n");
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class UsingItemCollectionPosition
Shared Sub Main ()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")
Dim itemPosition As ListItemCollectionPosition = Nothing
While True
Dim camlQuery As New CamlQuery()
camlQuery.ListItemCollectionPosition = itemPosition
camlQuery.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" + _
"<FieldRef Name='Title'/><FieldRef Name='Body'/>" + _
"</ViewFields><RowLimit>5</RowLimit></View>"
Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)
clientContext.Load(collListItem)
clientContext.ExecuteQuery()
itemPosition = collListItem.ListItemCollectionPosition
Dim oListItem As ListItem
For Each oListItem In collListItem
Console.WriteLine("Title: {0}: " + ControlChars.Lf + _
"Body: {1}", oListItem("Title"), oListItem("Body"))
Next oListItem
If itemPosition Is Nothing Then
Exit While
End If
Console.WriteLine((ControlChars.Lf + itemPosition.PagingInfo + ControlChars.Lf))
End While
End Sub
End Class
End Namespace
Pour des informations et des exemples sur la récupération d’objets clients dans le contexte du modèle objet SharePoint Foundation Silverlight, voir Utilisation du modèle objet Silverlight.
Voir aussi
Concepts
Vue d'ensemble de la récupération des données
Directive du modèle objet client
Procédure : créer, mettre à jour et supprimer des éléments de liste
Tâches courantes de programmation
Autres ressources
Extrait de code : obtenir les données d’éléments d’une liste externe sur le client