Получение элементов списка
Дата последнего изменения: 29 апреля 2011 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Получение элементов из списка
Использование метода Include
Получение определенных полей из указанного количества элементов
Получение элементов из всех списков веб-сайта
Получение элементов с использованием положения коллекции элементов списка
Доступно на сайте SharePoint Online
Для получения элементов из списка используйте метод GetItemById() (JavaScript: getItemById(id)) для возврата одного элемента или метод GetItems(CamlQuery) (JavaScript: getItems(query)) для извлечения нескольких элементов. Затем используется метод Load<T>(T, []) (JavaScript: load(clientObject)) для получения объектов, представляющих элементы списка.
Получение элементов из списка
Метод GetItems(CamlQuery) (JavaScript: getItems(запрос)) позволяет определить запрос языка CAML, который указывает, какие элементы следует извлечь. Можно передать неопределенный объект CamlQuery (JavaScript: CamlQuery), чтобы извлечь все элементы списка, или используйте свойство ViewXml (JavaScript: viewXml) для определения запроса CAML и получения элементов в соответствии с определенным критерием.
В следующем примере показаны значения столбцов идентификатора, заголовка и тела первых 100 элементов в списке объявлений, начиная с элементов, идентификатор которых больше 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());
}
В предыдущем примере загружается коллекция элементов, определенная запросом CAML, а доступ к свойствам по умолчанию можно получить для каждого возвращаемого объекта элемента списка. Используйте метод Include<TSource>(IQueryable<TSource>, []) для улучшения производительности, ограничив количество данных, которые возвращаются с помощью запроса, определяющего доступные свойства. В ECMAScript (JavaScript, JScript) укажите оператор Include как часть строки запроса, которая передается методу load(clientObject)).
Использование метода Include
Четыре свойства ListItem (JavaScript: ListItem) по умолчанию недоступны при извлечении элементов списка: DisplayName (JavaScript: displayName), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) и RoleAssignments (JavaScript: roleAssignments). В предыдущем примере, если попытаться получить доступ к одному из этих свойств, возвращается исключение PropertyOrFieldNotInitializedException. Для доступа к ним используйте метод Include<TSource>(IQueryable<TSource>, []) в запросе LINQ, чтобы извлечь их явно. В ECMAScript (JavaScript, JScript) укажите Include как часть строки запроса. Дополнительные сведения о свойствах, недоступных по умолчанию, см. в разделе Обзор извлечения данных.
Чтобы изменить предыдущий пример так, чтобы возвращалось значение свойств DisplayName (JavaScript: displayName) и HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), можно заменить вызов метода Load<T>(T, []) (JavaScript: load(clientObject)) на вызов с использованием запроса LINQ, для которого в C# требуется ссылка на пространство имен System.Linq. В ECMAScript (JavaScript, JScript) укажите Include.
![]() |
---|
При использовании LINQ для создания запросов для клиентской объектной модели применяется поставщик LINQ to Objects, а не LINQ to SharePoint, который можно использовать только при написании кода для объектной модели сервера. |
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());
}
Так как в этом примере используется метод Include<TSource>(IQueryable<TSource>, []) (в ECMAScript (JavaScript, JScript), Include), после выполнения запроса доступны только указанные свойства. Поэтому возвращается исключение PropertyOrFieldNotInitializedException при попытке доступа к другим свойствам, таким как ContentType (JavaScript: contentType) или ParentList (JavaScript: parentList), с целью доступа к объектам, которые они содержат.
Получение определенных полей из указанного количества элементов
В следующем примере показано, как получить определенные поля из первых пяти элементов списка. Так как указаны только столбцы "Title" и "Body", доступны только эти свойства.
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
В предыдущем примере объект CamlQuery передается методу Load<T>(T, []) без указания строки запроса CAML, что обычно возвращает все элементы списка, но в данном случае метод Take<TSource>(IQueryable<TSource>, Int32) ограничивает число возвращаемых элементов.
![]() |
---|
Метод load(clientObject) объектной модели JavaScript в Microsoft SharePoint Foundation 2010 не поддерживает использование метода Take<TSource>(IQueryable<TSource>, Int32), который применялся в предыдущем примере. |
Получение элементов из всех списков веб-сайта
В следующем примере показано, как получить заголовки первых 10 элементов всех списков веб-сайта.
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
![]() |
---|
В SharePoint Foundation 2010 метод load(clientObject)JavaScript не поддерживает использование метода Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>), который применялся в предыдущем примере. |
Получение элементов с использованием положения коллекции элементов списка
Можно использовать класс ListItemCollectionPosition для реализации получения элемента списка страниц в соответствии с положением элементов в коллекции. Используйте элемент RowLimit для определения числа элементов, возвращаемых для одной страницы. В следующем примере используется цикл по всем элементам списка объявлений с применением свойства ListItemCollectionPosition класса CamlQuery и свойства ListItemCollectionPosition класса ListItemCollection для поочередного выполнения операции getили set в каждой итерации коллекции, по пять элементов на страницу. Пока значение равно true, что означает, что пять элементов возвращены со страницы, цикл продолжается и использует свойство PagingInfo для отображения сведений о странице и о каждом из пяти возвращаемых элементов. Если возвращается менее пяти элементов, цикл завершается.
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
Дополнительные сведения и примеры получения клиентских объектов в контексте объектной модели Silverlight SharePoint Foundation см. в статье Использование объектной модели Silverlight.
См. также
Концепции
Инструкции по использованию клиентской объектной модели
Практическое руководство. Создание, обновление и удаление элементов списка
Другие ресурсы
Фрагмент кода: получение данных элемента из внешнего списка на клиенте