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