Partager via


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

Bibliothèque de classes Client

Bibliothèque de classes ECMAScript