Procedimiento para recuperar elementos de lista
Última modificación: viernes, 29 de abril de 2011
Hace referencia a: SharePoint Foundation 2010
En este artículo
Recuperación de elementos de una lista
Uso del método Include
Recuperación de campos específicos de una cantidad especificada de elementos
Recuperación de elementos de todas las listas de un sitio web
Recuperación de elementos mediante una posición de colección de elementos de lista
Disponible en SharePoint Online
Para devolver elementos de una lista, use el método GetItemById() (JavaScript: getItemById(id)) para devolver un solo elemento o el método GetItems(CamlQuery) (JavaScript: getItems(query)) para devolver varios elementos. Posteriormente, debe usar el método Load<T>(T, []) (JavaScript: load(clientObject)) para alcanzar los objetos de elemento de lista que representan los elementos.
Recuperación de elementos de una lista
El método GetItems(CamlQuery) (JavaScript: getItems(query)) permite definir una consulta Lenguaje de marcado de aplicaciones de colaboración (CAML) que especifique qué elementos se van a devolver. Puede pasar un objeto CamlQuery no definido (JavaScript: CamlQuery) para devolver todos los elementos de la lista, o bien usar la propiedad ViewXml (JavaScript: viewXml) para definir una consulta CAML y devolver los elementos que cumplan con criterios específicos.
En el siguiente ejemplo se muestran los valores de columna Identificador, Título y Cuerpo de los primeros 100 elementos de la lista Anuncios, comenzando por los elementos de lista cuyo identificador de colección es mayor que 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());
}
En el ejemplo anterior se carga la colección de elementos especificados por la consulta CAML y, posteriormente, se puede obtener acceso a todas las propiedades predeterminadas en cada objeto de elemento de lista que se devuelve. Use el método Include<TSource>(IQueryable<TSource>, []) para mejorar el rendimiento mediante la limitación de la cantidad de datos que se devuelven por medio de la consulta al especificar qué propiedades se encuentran disponibles. En ECMAScript (JavaScript, JScript), especifique la instrucción Include como parte de la cadena de consulta que se pasa al método load(clientObject)).
Uso del método Include
Existen cuatro propiedades de ListItem (JavaScript: ListItem) que no están disponibles de forma predeterminada al devolver elementos de lista: DisplayName (JavaScript: displayName), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) y RoleAssignments (JavaScript: roleAssignments). El ejemplo anterior devuelve PropertyOrFieldNotInitializedException si desea obtener acceso a una de estas propiedades. Para obtener acceso a ellas, use el método Include<TSource>(IQueryable<TSource>, []) en una expresión de consulta LINQ para devolverlas explícitamente. En ECMAScript (JavaScript, JScript), especifique Include como parte de la cadena de consulta. Para obtener más información acerca de las propiedades no predeterminadas, vea Introducción a la recuperación de datos.
Para modificar el ejemplo anterior para que devuelva el valor de DisplayName (JavaScript: displayName) y HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), puede reemplazar la llamada anterior al método Load<T>(T, []) (JavaScript: load(clientObject)) por una llamada que use una consulta LINQ, que en C# requiere una referencia al espacio de nombres System.Linq. En ECMAScript (JavaScript, JScript), especifique Include.
Nota
Al usar LINQ para crear consultas en el modelo de objetos de cliente, usa LINQ to Objects en lugar del proveedor LINQ to SharePoint, que sólo puede usarse al escribir código en el modelo de objetos de servidor.
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());
}
Dado que en este ejemplo se usa el método Include<TSource>(IQueryable<TSource>, []) (en ECMAScript (JavaScript, JScript), Include), sólo las propiedades especificadas estarán disponibles después de la ejecución de la consulta. Por lo tanto, recibirá PropertyOrFieldNotInitializedException si intenta obtener acceso a otras propiedades además de las que se especificaron. Además, recibirá este error si intenta usar propiedades como ContentType (JavaScript: contentType) o ParentList (JavaScript: parentList) para obtener acceso a las propiedades de los objetos que contienen.
Recuperación de campos específicos de una cantidad especificada de elementos
En el siguiente ejemplo se muestra cómo recuperar campos específicos únicamente de los primeros cinco elementos de una lista. Dado que solo se especificaron las columnas Título y Cuerpo, estas son las únicas propiedades 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
El ejemplo anterior pasa el objeto CamlQuery al método Load<T>(T, []) sin especificar una cadena de consulta CAML, que normalmente devolvería todos los elementos de lista, pero en este caso el método Take<TSource>(IQueryable<TSource>, Int32) limita la cantidad de elementos que se devuelven.
Nota
El método load(clientObject) del modelo de objetos de JavaScript en Microsoft SharePoint Foundation 2010 no admite el uso del método Take<TSource>(IQueryable<TSource>, Int32) que se usa en el ejemplo anterior.
Recuperación de elementos de todas las listas de un sitio web
En el siguiente ejemplo se muestra cómo recuperar los títulos de los primeros 10 elementos de todas las listas de un sitio 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
Nota
En SharePoint Foundation 2010, el método load(clientObject) de JavaScript no admite el uso del método Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>) que se usa en el ejemplo anterior.
Recuperación de elementos mediante una posición de colección de elementos de lista
Puede usar la clase ListItemCollectionPosition para implementar la recuperación de elementos de lista de pagicación de acuerdo con la posición de los elementos relativa a su colección. Use el elemento RowLimit para especificar la cantidad de elementos que se van a devolver por página. El siguiente ejemplo se repetirá en todos los elementos de una lista Anuncios, mediante la propiedad ListItemCollectionPosition de la clase CamlQuery y la propiedad ListItemCollectionPosition de la clase ListItemCollection, para ejecutar los comandos get o set alternativamente la posición de cada iteración en una colección, conforme a cinco elementos por página. Siempre y cuando sea true que se han devuelto cinco elementos para una página, el bucle continuará y usará la propiedad PagingInfo para mostrar la información de la paginación, junto con información acerca de cada uno de los cinco elementos devueltos. Cuando se devuelven menos de cinco elementos para una página, el bucle se detiene.
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
Para obtener información y ejemplos acerca de la recuperación de objetos de cliente dentro del contexto del modelo de objetos de SharePoint Foundation Silverlight, 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 elementos de lista
Tareas comunes de programación
Otros recursos
Fragmento de código: obtención de datos de elemento de una lista externa en el cliente