Практическое руководство. Получение списков
Дата последнего изменения: 29 апреля 2011 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Извлечение всех свойств для всех списков на веб-сайте
Извлечение только заданных свойств списков
Хранение полученных списков в коллекции
Применение фильтров к извлечению списков
Извлечение полей списков из веб-сайта
Доступно на сайте SharePoint Online
Работа с объектами списков похожа на работу с объектами веб-сайтов. Начинайте работу с использования конструктора ClientContext() (JavaScript: ClientContext(serverRelativeUrl)) и передачи URL-адреса или URI-кода для возврата определенного контекста запроса. После этого можно использовать свойство Lists (JavaScript: lists) класса Web (JavaScript: Web) для получения коллекции списков на веб-сайте.
Извлечение всех свойств для всех списков на веб-сайте
Чтобы возвратить все списки для веб-сайта, загрузите коллекцию списков с помощью метода Load<T>(T, []) (JavaScript: load(clientObject)), а затем вызовите ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). В следующем примере отображается URL-адрес веб-сайта и дата и время создания списка.
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());
}
Извлечение только заданных свойств списков
В предыдущем примере выполнялся возврат всех свойств списков на веб-сайте, но для уменьшения ненужных данных, передаваемых между клиентом и сервером, можно использовать выражения запросов LINQ, чтобы указать возвращаемые свойства. В следующем примере для возврата только заголовка и идентификатора каждого из списков в коллекции используется метод Include<TSource>(IQueryable<TSource>, []) внутри выражения LINQ.
Примечание |
---|
Как видно в следующем примере ECMAScript (JavaScript, JScript), можно указать Include в качестве части строки запроса, передаваемой в метод load(clientObject)) для задания возвращаемых свойств. |
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());
}
В предыдущем примере после вызова ExecuteQuery() (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) становятся доступны только заголовок и идентификатор каждого объекта списка. Если попытаться отобразить, например, oList.ParentWebUrl, возникает исключение PropertyOrFieldNotInitializedException.
Хранение полученных списков в коллекции
Как видно в предыдущем примере, метод LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp)) можно использовать вместо метода Load<T>(T, []) (JavaScript: load(clientObject)) для хранения возвращаемого значения в другой коллекции вместо его сохранения в свойстве 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());
}
Применение фильтров к извлечению списков
Синтаксис лямбда-выражений LINQ или выражений запросов LINQ можно использовать для создания фильтров, ограничивающих извлекаемые запросом списки, для чего необходимо задать ссылку на пространство имен System.Linq.
В следующем примере выполняется изменение предыдущего примера с помощью использования лямбда-выражения в качестве параметра для метода LoadQuery(), чтобы возвратить только те списки, которые содержат элементы и не являются скрытыми.
Примечание |
---|
При применении LINQ для создания запросов для клиентской объектной модели используется LINQ to Objects, а не поставщик LINQ to SharePoint, который можно использовать только при создании кода для серверной объектной модели. |
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))
Для использования стандартного синтаксиса запросов LINQ параметр для метода LoadQuery() должен иметь следующий вид.
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)
В следующем примере показано, как использовать синтаксис LINQ для извлечения из веб-сайта только первых двух списков.
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))
Примечание |
---|
Метод loadQuery(clientObjectCollection, exp) объектной модели JavaScript в Microsoft SharePoint Foundation 2010 не поддерживает методы и операторы LINQ Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>), Take<TSource>(IQueryable<TSource>, Int32), <>, которые используются в управляемой объектной модели в предыдущих фрагментах кода. |
Извлечение полей списков из веб-сайта
Как показано в следующем примере, методы Include<TSource>(IQueryable<TSource>, []) или операторы Include можно вкладывать в запрос JavaScript, чтобы возвратить метаданные как для списка, так и для его полей. В примере возвращаются все поля из всех списков на веб-сайте, а также отображаются заголовок и внутреннее имя всех полей, внутреннее имя которых содержит строку "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());
}
Сведения и примеры по извлечению данных списков в контексте объектной модели SharePoint Foundation 2010 Silverlight см. в статье Использование объектной модели Silverlight.
См. также
Концепции
Инструкции по использованию клиентской объектной модели
Создание, обновление и удаление списков