Partager via


Procédure : récupérer des listes

Dernière modification : vendredi 29 avril 2011

S’applique à : SharePoint Foundation 2010

Dans cet article
Récupération de toutes les propriétés de toutes les listes d’un site Web
Récupération uniquement des propriétés spécifiées des listes
Stockage des listes récupérées dans une collection
Application de filtres à la récupération de liste
Récupération des champs de liste d’un site Web

Disponible dans SharePoint Online

Le travail avec des objets liste est similaire à celui avec des objets site Web. Commencez par utiliser le constructeur ClientContext() (JavaScript: ClientContext(serverRelativeUrl)) et passez une URL ou un URI pour retourner un contexte de demande spécifique. Vous pouvez ensuite utiliser la propriété Lists (JavaScript: lists) de la classe Web (JavaScript: Web) pour obtenir la collection de listes du site Web.

Récupération de toutes les propriétés de toutes les listes d’un site Web

Pour retourner toutes les listes d’un site Web, chargez la collection de listes via la méthode Load<T>(T, []) (JavaScript: load(clientObject)), puis appelez ExecuteQuery() ou ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). L’exemple suivant affiche l’URL du site Web et la date et l’heure de création de la liste.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveAllListProperties
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            clientContext.Load(collList);

            clientContext.ExecuteQuery();

            foreach (SP.List oList in collList)
            {
                Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString());
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveAllListProperties

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            clientContext.Load(collList)

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In collList
                Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString())
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveAllListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();
 
    clientContext.load(collList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Récupération uniquement des propriétés spécifiées des listes

L’exemple précédent retourne toutes les propriétés des listes d’un site Web, mais pour réduire le transfert de données inutiles entre le client et le serveur, vous pouvez utiliser des expressions de requête LINQ pour spécifier quelles propriétés retourner. L’exemple suivant utilise la méthode Include<TSource>(IQueryable<TSource>, []) dans une expression LINQ pour retourner uniquement le titre et l’ID de chaque liste de la collection.

Notes

Comme illustré dans l’exemple ECMAScript (JavaScript, JScript) suivant, vous pouvez spécifier Include dans la chaîne de requête passée à la méthode load(clientObject) afin de spécifier quelles propriétés retourner.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListProperties
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            clientContext.Load(
                collList,
                lists => lists.Include(
                    list => list.Title, 
                    list => list.Id));

            clientContext.ExecuteQuery();

            foreach (SP.List oList in collList)
            {
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
            }
        }
   }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListProperties

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            clientContext.Load(collList, Function(lists) lists. _
                                             Include(Function(list) list.Title, _
                                                     Function(list) list.Id))
            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In collList
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();

    clientContext.load(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Dans l’exemple précédent, seuls le titre et l’ID de chaque objet liste deviennent disponibles après l’appel à ExecuteQuery() (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). Si vous essayez d’afficher, par exemple, oList.ParentWebUrl, vous obtenez une exception PropertyOrFieldNotInitializedException.

Stockage des listes récupérées dans une collection

Comme indiqué dans l’exemple suivant, vous pouvez utiliser la méthode LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp)) au lieu de la méthode Load<T>(T, []) (JavaScript: load(clientObject)) pour stocker la valeur retournée dans une autre collection, au lieu de la stocker dans la propriété Lists (JavaScript: lists).

using System;
using System.Collections.Generic;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListPropertiesToCollection
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
                collList.Include(
                    list=>list.Title,
                    list=>list.Id));

            clientContext.ExecuteQuery();

            foreach (SP.List oList in resultCollection)
            {
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListPropertiesToCollection

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            Dim queryResult As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
                collList.Include(Function(list) list.Title, _
                                 Function(list) list.Id))

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In queryResult
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListPropertiesToCollection() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var collList = oWebsite.get_lists();

    this.listInfoCollection = clientContext.loadQuery(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoCollection.length; i++) {
        var oList = this.listInfoCollection[i];
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
    }
    alert(listInfo.toString());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Application de filtres à la récupération de liste

Vous pouvez utiliser la syntaxe d’expression lambda LINQ ou de requête LINQ pour créer des filtres de limitation des listes récupérés par une requête, ce qui requiert la définition d’une référence à l’espace de noms System.Linq.

L’exemple suivant modifie l’exemple précédent en utilisant une expression lambda en tant que paramètre de la méthode LoadQuery() pour retourner uniquement les listes qui contiennent des éléments et qui ne sont pas masquées.

Notes

Lorsque vous utilisez LINQ pour créer des interrogations basées sur le modèle objet client, vous utilisez LINQ to Objects, pas le fournisseur LINQ to SharePoint utilisable uniquement pour du code basé sur le modèle objet serveur.

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
             collList.Include(
                 list => list.Title,
                 list => list.Id).Where(
                     list => list.ItemCount != 0
                         && list.Hidden != true));
    Dim resultCollection As IEnumerable(Of SP.List) = _
             clientContext.LoadQuery(collList.Include( _
                                     Function(list) list.Title, _
                                     Function(list) list.Id).Where( _
                                     Function(list) list.ItemCount <> 0 _
                                         AndAlso list.Hidden <> True))

Dans la syntaxe de requête LINQ standard, le paramètre de la méthode LoadQuery() doit être comme suit.

    var queryExpression = from list
                          in collList.Include(
                              list => list.Title,
                              list => list.Id)
                          where list.ItemCount != 0
                              && list.Hidden != true
                          select list;

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(queryExpression);
    Dim queryExpression = From list In collList.Include( _
                              Function(list) list.Title, Function(list) list.Id) _
                          Where list.ItemCount <> 0 _
                              AndAlso list.Hidden <> True _
                          Select list

    Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(queryExpression)

L’exemple ci-dessous montre comment utiliser la syntaxe LINQ pour récupérer uniquement les deux premières listes d’un site Web.

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
             collList.Take(2).Include(
                 list => list.Title,
                 list => list.Id));
    Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(collList.Take(2) _
             .Include(Function(list) list.Title, _
             Function(list) list.Id))

Notes

La méthode loadQuery(clientObjectCollection, exp) du modèle objet JavaScript dans Microsoft SharePoint Foundation 2010 ne prend pas en charge les méthodes et les opérateurs LINQ--Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>), Take<TSource>(IQueryable<TSource>, Int32), <>--qui sont utilisés par le modèle d’objet managé dans les fragments de code précédents.

Récupération des champs de liste d’un site Web

Comme indiqué dans l’exemple suivant, vous pouvez imbriquer des méthodes Include<TSource>(IQueryable<TSource>, []) ou des instructions Include dans une requête JavaScript, pour retourner les métadonnées d’une liste et de ses champs. L’exemple retourne tous les champs de toutes les listes d’un site Web et affiche le titre et le nom interne des champs dont le nom interne contient la chaîne « name ».

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListPropertiesToCollection
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            IEnumerable<SP.List> listInfo = clientContext.LoadQuery(
                collList.Include(
                    list => list.Title,
                    list => list.Fields.Include(
                        field => field.Title,
                        field => field.InternalName)));
 
             clientContext.ExecuteQuery();

            foreach (SP.List oList in listInfo)
            {
                FieldCollection collField = oList.Fields;

                foreach (SP.Field oField in collField)
                {
                    Regex regEx = new Regex("name", RegexOptions.IgnoreCase);
                    
                    if (regEx.IsMatch(oField.InternalName))
                    {
                        Console.WriteLine("List: {0} \n\t Field Title: {1} \n\t Field Internal Name: {2}", 
                            oList.Title, oField.Title, oField.InternalName);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.Text.RegularExpressions
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListPropertiesToCollection

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            Dim listInfo As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
                collList.Include( _
                    Function(list) list.Title, _
                    Function(list) list.Fields.Include( _
                        Function(field) field.Title, _
                        Function(field) field.InternalName)))

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In listInfo
                Dim collField As FieldCollection = oList.Fields

                Dim oField As SP.Field
                For Each oField In collField

                    Dim regEx As New Regex("name", RegexOptions.IgnoreCase)

                    If regEx.IsMatch(oField.InternalName) Then
                        Console.WriteLine("List: {0} " + _
                            ControlChars.Lf + ControlChars.Tab + " Field Title: {1} " + _
                            ControlChars.Lf + ControlChars.Tab + " Field Internal Name: {2}", _
                            oList.Title, oField.Title, oField.InternalName)
                    End If
                Next oField
            Next oList
        End Sub 
    End Module
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveAllListsAllFields() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var rootWebsite = clientContext.get_site().get_rootWeb();
    var collList = oWebsite.get_lists();

    this.listInfoArray = clientContext.loadQuery(collList, 
        'Include(Title,Fields.Include(Title,InternalName))');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), 
        Function.createDelegate(this, this._onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoArray.length; i++) {
            
        var oList = this.listInfoArray[i];
        var collField = oList.get_fields();
            
        var fieldEnumerator = collField.getEnumerator();
            
        while (fieldEnumerator.moveNext()) {
            var oField = fieldEnumerator.get_current();
            var regEx = new RegExp('name', 'ig');
            
            if (regEx.test(oField.get_internalName())) {
                listInfo += '\nList: ' + oList.get_title() + 
                    '\n\tField Title: ' + oField.get_title() + 
                    '\n\tField Name: ' + oField.get_internalName();
            }
        }
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Pour obtenir des informations et un exemple sur la façon de récupérer des données de liste dans le contexte du modèle objet Silverlight de SharePoint Foundation 2010, 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 listes

Tâches courantes de programmation

Autres ressources

Bibliothèque de classes Client

Bibliothèque de classes ECMAScript