Procedimiento para recuperar listas
Última modificación: viernes, 29 de abril de 2011
Hace referencia a: SharePoint Foundation 2010
En este artículo
Recuperación de todas las propiedades de todas las listas de un sitio web
Recuperación de propiedades específicas de listas
Almacenamiento de listas devueltas en una colección
Aplicación de filtros a la recuperación de listas
Recuperación de campos de lista de un sitio web
Disponible en SharePoint Online
Trabajar con objetos de lista es parecido a trabajar con objetos de elemento web. Comience por usar el constructor ClientContext() (JavaScript: ClientContext(serverRelativeUrl)) y pasar una dirección URL o URI para devolver un contexto de consulta específico. Luego puede usar la propiedad Lists (JavaScript: lists) de la clase Web (JavaScript: Web) para obtener la colección de listas del sitio web.
Recuperación de todas las propiedades de todas las listas de un sitio web
Para devolver todas las listas de un sitio web, cargue la colección de listas a través del método Load<T>(T, []) (JavaScript: load(clientObject)) y, a continuación, llame a ExecuteQuery() o ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). En el siguiente ejemplo se muestra la dirección URL del sitio web, y la fecha y hora, en que se creó la lista.
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());
}
Recuperación de propiedades específicas de listas
En el ejemplo anterior se devuelven todas las propiedades de todas las listas de un sitio web, pero para minimizar la transferencia de datos innecesarios entre cliente y servidor, puede usar expresiones de consultas LINQ para especificar qué propiedades devolver. En el siguiente ejemplo se usa el método Include<TSource>(IQueryable<TSource>, []) dentro de una expresión LINQ para devolver solo el título y el Id. de cada una de las listas de la colección.
Nota
Como se muestra en el siguiente ejemplo de ECMAScript (JavaScript, JScript), puede especificar Include como parte de la cadena de consulta que se pasa al método load(clientObject)) para especificar qué propiedades se devuelven.
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());
}
En el ejemplo anterior, solo el título y el Id. del objeto de lista están disponibles después de llamar a ExecuteQuery() (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). Si intenta mostrar, por ejemplo, oList.ParentWebUrl, recibirá una PropertyOrFieldNotInitializedException.
Almacenamiento de listas devueltas en una colección
Como se muestra en el ejemplo siguiente, puede usar el método LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp)), en lugar del método Load<T>(T, []) (JavaScript: load(clientObject)) para almacenar el valor devuelto en otra colección, en lugar de almacenarlo en la propiedad 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());
}
Aplicación de filtros a la recuperación de listas
Puede usar la sintaxis de expresión LINQ lambda o la sintaxis de expresión de consultas LINQ para crear filtros para limitar las listas que se van a recuperar en una consulta, lo cual requiere que establezca una referencia al espacio de nombres System.Linq.
En el siguiente ejemplo se modifica el ejemplo anterior mediante la expresión lambda como parámetro para el método LoadQuery() para devolver solo las listas que contienen elementos que no están ocultos.
Nota
Cuando usa LINQ para crear consultas en el modelo de objetos cliente, usa LINQ to Objects, en lugar del proveedor LINQ to SharePoint, que solo se puede usar cuando escribe código en el modelo de objetos de servidor.
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))
Para usar sintaxis estándar de consultas LINQ, los parámetros para el método LoadQuery() serían como se indica a continuación.
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)
En el siguiente ejemplo se muestra cómo usar sintaxis de LINQ para devolver solo las primeras dos listas de un sitio 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))
Nota
El método loadQuery(clientObjectCollection, exp) del modelo de objetos de JavaScript de Microsoft SharePoint Foundation 2010 no admite los métodos y operadores de LINQ (Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>), Take<TSource>(IQueryable<TSource>, Int32), <>) que usa el modelo de objetos administrado en los fragmentos anteriores.
Recuperación de campos de lista de un sitio web
Como se muestra en el siguiente ejemplo, puede anidar los métodos Include<TSource>(IQueryable<TSource>, []) o las instrucciones Include en una consulta de JavaScript, para devolver metadatos de listas y campos. En el ejemplo se devuelven todos los campos de todas las listas dentro de un sitio web, y se muestra el título y el nombre interno de todos los campos cuyo nombre interno contiene la cadena "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());
}
Para obtener más información y un ejemplo sobre cómo recuperar datos de listas dentro del contexto del modelo de objetos Silverlight de SharePoint Foundation 2010, vea Uso del modelo de objetos Silverlight.
Vea también
Conceptos
Introducción a la recuperación de datos
Instrucciones del modelo de objetos cliente
Procedimiento para crear, actualizar y eliminar listas
Tareas comunes de programación