Поделиться через


Обзор извлечения данных

Дата последнего изменения: 9 марта 2015 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Синтаксис запроса или синтаксис метода
Использование строк запроса в ECMAScript
Загрузка на месте или запрашиваемая загрузка
Порядок извлечения объектов
Порядок обновления объектов
Порядок извлечения элементов списка
Порядок обновления элементов списка
Асинхронная обработка

Доступно на сайте SharePoint Online

Эту новую клиентскую объектную модель можно использовать, чтобы извлечь атрибуты для конкретного объекта клиента SharePoint (ClientObject или ClientObject в ECMAScript (JavaScript, JScript)), чтобы извлечь дочерние объекты и связанные с ними атрибуты, или чтобы извлечь дочерние элементы в коллекции. Объектная модель использует семантику явного извлечения данных, которой необходимо следовать для извлечения функционирующих данных. Клиентская объектная модель не сохраняет данные, извлекаемые локально на клиенте.

Выполнение извлечения данных представляет собой следующую процедуру.

  1. Возврат контекста для запроса клиента с помощью конструктора ClientContext() (JavaScript: ClientContext(serverRelativeUrl)).

  2. Использование объектной модели для указания объекта, который следует извлечь, или объекта, из которого следует извлечь данные.

  3. Загрузка объекта или коллекции либо путем загрузки на месте, использующей метод Load<T>(T, []) (JavaScript: load(clientObject)) для возврата конкретного объекта, коллекции или данных, либо путем запрашиваемой загрузки, использующей метод LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp)) для возврата перечисляемой коллекции объектов.

  4. Выполнение запроса путем вызова синхронного метода ExecuteQuery() в управляемой версии .NET клиентской объектной модели или в версии Silverlight, когда код выполняется из потоков, которые не изменяют пользовательский интерфейс. В версии JavaScript объектной модели, или когда версия Silverlight изменяет пользовательский интерфейс, процесс извлечения данных использует модель асинхронного обратного вызова, и необходимо вызывать метод ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)), который включает параметры для методов обработки успешного или неудачного выполнения запроса. Когда вызов метода для выполнения запроса возвращается (синхронно или асинхронно), можно получить доступ к результатам запроса в объекте, в котором этот запрос был инициирован.

Синтаксис запроса или синтаксис метода

Обе формы синтаксиса LINQ, синтаксис запроса и синтаксис метода, могут использоваться в управляемой клиентской объектной модели для загрузки отдельных объектов, свойств конкретного объекта или перечисляемых коллекций объектов.

ПримечаниеПримечание

При использовании LINQ для выполнения запросов к объектной модели клиента необходимо учитывать два указанных ниже фактора.

  • При создании запросов для клиентской объектной модели с помощью LINQ применяется поставщик LINQ to Objects, а не поставщик LINQ to SharePoint, который можно использовать только при написании кода для серверной объектной модели.

  • Если запрос возвращает подмножество элементов списка, эффективнее использовать запрос CAML, а не LINQ. Причина заключается в том, что все элементы списка передаются из базы данных контента на интерфейсный веб-сервер и загружаются в память. Только после этого применяется фильтр LINQ. При использовании запроса CAML фильтрация выполняется на сервере базы данных. Это относится только к запросам, выполняющим фильтрацию элементов списка. Другие типы запросов LINQ, например запросы, возвращающие подмножество списков веб-сайта, выполняются более эффективно.

Синтаксис запроса можно использовать только в методе LoadQuery(), и для него необходимы два этапа — определение выражения запроса и извлечение результата запроса. Этот процесс показан в следующем примере кода, который возвращает все списки из текущего веб-сайта, имеющие заданный заголовок.

var query = from list 
    in clientContext.Web.Lists
    where list.Title != null
    select list;

var result = clientContext.LoadQuery(query);
clientContext.ExecuteQuery();
Dim query = From list In clientContext.Web.Lists _ 
    Where list.Title IsNot Nothing _ 
    Select list

Dim result = clientContext.LoadQuery(query)
clientContext.ExecuteQuery()

Синтаксис метода может применяться с методом Load<T>(T, []) или LoadQuery() и использует лямбда-выражения. В следующем примере тот же самый запрос для списков с заголовком задается с помощью синтаксиса метода.

clientContext.Load(clientContext.Web, 
    website => website.Lists.Include(
        list => list.Title).Where(
            list => list.Title != null));

clientContext.ExecuteQuery();
clientContext.Load(clientContext.Web, _
    Function(website) website.Lists.Include( _
    Function(list) list.Title).Where( _
    Function(list) list.Title IsNot Nothing))

    clientContext.ExecuteQuery()

В предыдущем примере показывается, как с помощью метода Include<TSource>(IQueryable<TSource>, []) ограничить свойства, возвращаемые от коллекции объектов, что улучшает производительность. Запрос возвращает только заголовки списков, имеющих заголовок.

В следующем примере с помощью синтаксиса запроса извлекаются те фильтруемые поля списка, которые не являются скрытыми.

FieldCollection collField = oList.Fields;

var query = from field
        in collField
        where field.Hidden == false
        && field.Filterable == true
        select field;

var result = clientContext.LoadQuery(query);

clientContext.ExecuteQuery();
Dim collField As FieldCollection = oList.Fields

Dim query = From field In collField _ 
    Where field.Hidden = False AndAlso field.Filterable = True _ 
    Select field

Dim result = clientContext.LoadQuery(query)

clientContext.ExecuteQuery()

В следующем примере выполняется тот же запрос, но в отличие от предыдущего примера используется синтаксис метода в методе Load<T>(T, []).

clientContext.Load(oList,
    list => list.Fields.Where(
    field => field.Hidden == false
        && field.Filterable == true));

    clientContext.ExecuteQuery();
clientContext.Load(oList, Function(list) list.Fields.Where( _
    Function(field) field.Hidden = False _
    AndAlso field.Filterable = True))

    clientContext.ExecuteQuery()

Использование строк запроса в ECMAScript

Методы JavaScript для извлечения объектов и данных не принимают синтаксис LINQ, но можно задать базовый запрос с помощью строкового выражения. В следующем примере с помощью метода load(clientObject) извлекается только заголовок и идентификатор конкретного списка.

clientContext.load(oList, 'Title' ,'Id');

clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));

При работе с коллекцией списков для возврата только заголовка и идентификатора каждого списка следует указать Include, как показано в следующем примере.

clientContext.load(collList, 'Include(Title, Id)');

Можно также воспользоваться полями класса *PropertyNames, связанного с объектом или коллекцией, чтобы указать, какие атрибуты следует возвращать, как показано в следующем примере.

var propTitle = SP.ListPropertyNames.title;
var propId = SP.ListPropertyNames.id;
clientContext.load(collList, 'Include(' + propTitle + ', ' + propId + ')');

Кроме того, можно вложить ключевое слово Include в передаваемую строку запроса. В следующем примере с помощью метода loadQuery(clientObjectCollection, exp) извлекаются заголовки всех списков, а также заголовки и описания всех полей во всех списках.

myListArray = clientContext.loadQuery(collList, 
    'Include(Title,Fields.Include(Title,Description))');

Загрузка на месте или запрашиваемая загрузка

Существует два способа использования запросов на основе LINQ в клиентской объектной модели: с помощью загрузки на месте или с помощью запрашиваемой загрузки. Запрашиваемая загрузка возвращает данные в другом массиве результатов, в то время как загрузка на месте возвращает данные в самом объекте.

Загрузка на месте запрашивает загрузку объектов и их данных и обслуживает идентификацию объектов посредством нескольких запросов. Загрузки на месте выполняются с помощью метода Load<T>(T, []) контекста клиента. В следующем примере загружаются все списки текущего веб-сайта и их свойства по умолчанию. После выполнения запроса код получает доступ ко всей коллекции списков и к свойствам списков по умолчанию.

clientContext.Load(clientContext.Web.Lists); 
clientContext.ExecuteQuery();

В запрашиваемой загрузке запрос существует отдельно от возвращаемых результатов. В отличие от загрузки на месте, в запрашиваемой загрузке идентификация объекта не сохраняется, поэтому код должен сам обслуживать возвращаемые объекты. В следующем примере с помощью синтаксиса запроса возвращаются все списки веб-сайта.

var query = from list 
    in clientContext.Web.Lists 
    select list;

var result = clientContext.LoadQuery(query);

clientContext.ExecuteQuery();
Dim query = From list In clientContext.Web.Lists _ 
    Select list

Dim result = clientContext.LoadQuery(query)

clientContext.ExecuteQuery()

Этот пример заполняет результат интерфейсом IEnumerable<T> объектов List, с которыми может работать код, и которые должны обслуживаться самостоятельно. Следует отметить, что объект context.Web.Lists остается пустым, и возвращается количество 0; чтобы получить количество списков, необходимо использовать метод Count() интерфейса IEnumerable<T>.

Порядок извлечения объектов

В следующем примере показывается способ извлечения объекта для доступа к его свойствам. Поскольку объект загружается на месте, доступ можно получить ко всем свойствам списка по умолчанию.

ClientContext clientContext =  new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;

List oList = collList.GetByTitle("Announcements");

clientContext.Load(oList);

clientContext.ExecuteQuery();

Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created);
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists

Dim oList As List = collList.GetByTitle("Announcements")

clientContext.Load(oList)

clientContext.ExecuteQuery()

Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created)
function retrieveWebSite() {
    var clientContext = new SP.ClientContext('/sites/MySiteCollection');
    var oWebsite = clientContext.get_web();
    var collList = oWebsite.get_lists();

    this.oList = collList.getByTitle('Announcements');
    clientContext.load(oList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {
    alert('Title: ' + oList.get_title() + ' Created: ' + oList.get_created());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Некоторые свойства не являются доступными по умолчанию при извлечении определенных объектов, и для доступа к ним необходимо загружать их явно. В предыдущем примере выполняется загрузка конкретного объекта "Список", и доступ к обоим свойствам возможен потому, что они доступны в объекте по умолчанию. Однако если бы в примере выполнялась попытка получения доступа к свойствам, не являющимся доступными по умолчанию, например к свойству OnQuickLaunch (JavaScript: onQuickLaunch), то возвращалось бы исключение PropertyOrFieldNotInitializedException. В следующей таблице приводятся свойства, не являющиеся доступными по умолчанию при извлечении объекта.

Объект

Свойства

Folder

ContentTypeOrder (JavaScript: contentTypeOrder), UniqueContentTypeOrder (JavaScript: uniqueContentTypeOrder)

List

BrowserFileHandling (JavaScript: browserFileHandling), DataSource (JavaScript: dataSource), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), IsSiteAssetsLibrary (JavaScript: isSiteAssetsLibrary), OnQuickLaunch (JavaScript: onQuickLaunch), RoleAssignments (JavaScript: roleAssignments), SchemaXml (JavaScript: schemaXml), ValidationFormula (JavaScript: validationFormula), ValidationMessage (JavaScript: validationMessage)

ListItem

DisplayName (JavaScript: displayName), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), RoleAssignments (JavaScript: roleAssignments)

SecurableObject

HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), RoleAssignments (JavaScript: roleAssignments)

Site

Usage (JavaScript: usage)

Web

EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments), RoleAssignments (JavaScript: roleAssignments)

В дополнение к свойствам, приведенным в предыдущей таблице, также не являются доступными по умолчанию родительские или дочерние объекты, доступ к которым можно получить с помощью свойств объекта. Следовательно, при добавлении oList.Items.Count в предыдущем примере в консоли всегда будет отображаться 0 вместо фактического количества имеющихся элементов, поскольку коллекция элементов "Список" специально не запрашивается в методе Load<T>(T, []) (JavaScript: load(clientObject)).

Чтобы получить доступ к свойствам, не являющимся доступными по умолчанию при возвращении объекта, необходимо явно запросить свойства. Следующий вариант вызова предыдущего метода Load<T>(T, []) (JavaScript: load(clientObject)) делает доступным атрибут OnQuickLaunch (JavaScript: onQuickLaunch).

clientContext.Load(oList,
    list => list.Title,
    list => list.Created,
    list => list.OnQuickLaunch);
clientContext.Load(oList, _
    Function(list) list.Title, _
    Function(list) list.Created, _
    Function(list) list.OnQuickLaunch)
clientContext.load(oList, 'Title', 'Created', 'OnQuickLaunch');

В управляемой объектной модели или в объектной модели Silverlight при работе с коллекцией объектов следует использовать метод IncludeWithDefaultProperties<TSource>(IQueryable<TSource>, []), чтобы включить свойства, не являющиеся доступными по умолчанию в каждом загружаемом списке.

ПримечаниеПримечание

В объектной модели JavaScript отсутствует эквивалент метода IncludeWithDefaultProperties<TSource>(IQueryable<TSource>, []).

В следующем примере те же сведения, что и в предыдущем примере, отображаются для каждого списка на веб-сайте.

ClientContext clientContext =  new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;

clientContext.Load(collList,
    lists => lists.IncludeWithDefaultProperties(
        list => list.OnQuickLaunch));

clientContext.ExecuteQuery();

foreach (List oList in collList)
{
    Console.WriteLine("Title: {0} Created: {1} QuickLaunch: {2}", oList.Title, oList.Created, oList.OnQuickLaunch);
}
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists

clientContext.Load(collList, _
    Function(lists) lists.IncludeWithDefaultProperties( _
        Function(list) list.OnQuickLaunch))

clientContext.ExecuteQuery()

Dim oList As List
For Each oList In collList
    Console.WriteLine("Title: {0} Created: {1} QuickLaunch: {2}", oList.Title, oList.Created, oList.OnQuickLaunch)
Next oList

Порядок обновления объектов

Изменение объекта с помощью клиентской объектной модели работает аналогично изменению объекта с помощью серверной клиентской модели. В обоих случаях необходимо вызывать метод Update. Однако в клиентской объектной модели изменения не вступают в силу до загрузки объекта и вызова метода ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). В следующем примере изменяется описание загружаемого списка.

ClientContext clientContext =  new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;

List oList = collList.GetByTitle("My List");

oList.Description = "Changed description...";

oList.Update();

clientContext.ExecuteQuery();
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists

Dim oList As List = collList.GetByTitle("My List")

oList.Description = "Changed description..."

oList.Update()

clientContext.ExecuteQuery()
function updateList() {
    var clientContext = new SP.ClientContext('/sites/MySiteCollection');
    var oWebsite = clientContext.get_web();
    var collList = oWebsite.get_lists();

    this.oList = collList.getByTitle('My List');

    oList.set_title('Changed description...');

    oList.update();

    clientContext.load(oList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {
    alert(oList.get_title() + ' created.');
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Следует отметить, что в предыдущем примере для изменения объекта не требуется загрузка этого объекта на клиенте.

Порядок извлечения элементов списка

Для извлечения многочисленных элементов списка наиболее эффективно использовать запрос в CAML, чтобы указать, какие элементы должны быть возвращены. Следует задать запрос с помощью класса CamlQuery (JavaScript: CamlQuery), а затем передать этот запрос в метод GetItems(CamlQuery) (JavaScript: getItems(query)).

В следующем примере класс CamlQuery (JavaScript: CamlQuery) используется для возврата первых 50 элементов списка, чей идентификатор меньше 100. Метод Load<T>(T, []) указывает IncludeWithDefaultProperties<TSource>(IQueryable<TSource>, []), чтобы включить извлечение свойства DisplayName.

ClientContext clientContext =  new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;

List oList = collList.GetByTitle("My List");

CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Leq>" +
    "<FieldRef Name='ID'/><Value Type='Number'>100</Value>" +
    "</Leq></Where></Query><RowLimit>50</RowLimit></View>";

ListItemCollection collListItem = oList.GetItems(camlQuery);

clientContext.Load(collListItem,
    items => items.IncludeWithDefaultProperties(
    item=>item.DisplayName));

clientContext.ExecuteQuery();

foreach (ListItem oListItem in collListItem)
{
    Console.WriteLine("ID: {0} Display name: {1}", oListItem.Id, oListItem.DisplayName);
}
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists

Dim oList As List = collList.GetByTitle("My List")

Dim camlQuery As New CamlQuery()
camlQuery.ViewXml = "<View><Query><Where><Leq>" + _
    "<FieldRef Name='ID'/><Value Type='Number'>100</Value>" + _
    "</Leq></Where></Query><RowLimit>50</RowLimit></View>"

Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)

clientContext.Load(collListItem, _
    Function(items) items.IncludeWithDefaultProperties( _
        Function(item) item.DisplayName))

clientContext.ExecuteQuery()

Dim oListItem As ListItem
For Each oListItem In collListItem
    Console.WriteLine("ID: {0} Display name: {1}", oListItem.Id, oListItem.DisplayName)
Next oItem

Поскольку в объектной модели JavaScript отсутствует метод IncludeWithDefaultProperties<TSource>(IQueryable<TSource>, []), в следующем примере используется Include с методом load(clientObject), чтобы указать извлечение идентификатора и отображаемого имени каждого элемента списка.

function retrieveListItems() {

    var clientContext = new SP.ClientContext('/sites/MySiteCollection');
    var oList = clientContext.get_web().get_lists().getByTitle('My List');
        
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><Where><Leq>' + 
        '<FieldRef Name=\'ID\'/><Value Type=\'Number\'>100</Value>' + 
        '</Leq></Where></Query><RowLimit>50</RowLimit></View>');

    this.collListItem = oList.getItems(camlQuery);
        
    clientContext.load(collListItem, 'Include(Id, DisplayName)');
        
    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();
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Порядок обновления элементов списка

Чтобы изменить элемент списка, можно указать значение столбца для изменения с помощью индексатора и, как и в случае других объектов, вызвать метод Update() (JavaScript: update()) перед вызовом метода ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). В следующем примере изменяется заголовок элемента с указанным идентификатором.

ClientContext clientContext =  new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;

List oList = collList.GetByTitle("My List");
ListItem oItem = oList.GetItemById(5);
oItem["Title"] = "Hello World";
oItem.Update();

clientContext.ExecuteQuery();
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists

Dim oList As List = collList.GetByTitle("My List")

Dim oItem As ListItem = oList.GetItemById(5)
oItem("Title") = "Hello World"
oItem.Update()

clientContext.ExecuteQuery()
function updateListItem() {

    var clientContext = new SP.ClientContext('sites/MySiteCollection');
    var oList = clientContext.get_web().get_lists().getByTitle('My List');

    this.oListItem = oList.getItemById(5);
    oListItem.set_item('Title', 'Hello World');
    oListItem.update();

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    alert('Item updated.');
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Асинхронная обработка

Обе версии объектной модели, JavaScript и Silverlight (когда она изменяет пользовательский интерфейс), используют асинхронную обработку. Следовательно, метод ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) включает передачу делегатов в методы обратного вызова для обработки успешного или неудачного выполнения запроса. Когда асинхронный метод завершает обработку, вызывается указанный метод обратного вызова, и клиент извлекает данные с сервера. Чтобы выполнить запрос с помощью объектной модели JavaScript или Silverlight, следует задать делегата, имеющего ту же подпись, что и метод обратного вызова, и расширить путь вызова, передав этот делегат в качестве параметра в метод ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)).

Следующий пример иллюстрирует асинхронную обработку в JavaScript и в Silverlight. Первый метод, retrieveWebsite, получает объект с текущего веб-сайта, и этот объект становится доступным указанному методу обратного вызова, onQuerySucceeded, для которого делегат передается в метод ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). Метод обратного вызова получает и устанавливает заголовок извлекаемого объекта веб-сайта, а затем второй раз вызывает метод выполнения запроса, чтобы обновление вступило в силу.

var oWebsite;
var clientContext;

function retrieveWebsite()
{
   clientContext = SP.ClientContext.get_current();
   oWebsite = clientContext.get_web();
   clientContext.load(oWebsite);
   clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed);
} 
 
function onQuerySucceeded()
{
   oWebsite.set_title(oWebsite.get_title() + " changed in ECMAScript.");
   oWebsite.update();
   clientContext.executeQueryAsync();
}

В следующем примере показывается аналогичная установка заголовка веб-сайта с помощью объектной модели Silverlight.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    public partial class MainPage : UserControl
    {
        ClientContext clientContext;
        Web oWebsite;

        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            clientContext = ClientContext.Current;
            oWebsite = clientContext.Web;

            clientContext.Load(oWebsite,
                website=>website.Title);

            clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);
        }

        private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
        {
            UpdateUIMethod updateUI = ChangeTitle;
            this.Dispatcher.BeginInvoke(updateUI);
        }

        private void ChangeTitle()
        {
            oWebsite.Title = oWebsite.Title + " changed in Silverlight.";
            oWebsite.Update();

            clientContext.ExecuteQueryAsync(onTitleChanged, onQueryFailed);
        }

        private void onTitleChanged(object sender, ClientRequestSucceededEventArgs args)
        {
            UpdateUIMethod updateUI = DisplayTitle;
            this.Dispatcher.BeginInvoke(updateUI);
        }

        private void DisplayTitle()
        {
            MessageBox.Show("Title changed to " + oWebsite.Title);
        }

        private void onQueryFailed(object sender, ClientRequestFailedEventArgs args)
        {
            MessageBox.Show("Request failed. " + args.Message + "\n" + args.StackTrace);
        }

        private delegate void UpdateUIMethod();
    }
}

В обоих примерах, для JavaScript и для Silverlight, текущий контекст клиента запроса указывается с помощью свойства Current (JavaScript: current) контекста клиента, вместо использования конструктора ClientContext(String) (JavaScript: ClientContext(serverRelativeUrl)) и указания URL-адреса.

Другие примеры и сведения об извлечении данных в контексте объектной модели SharePoint Foundation Silverlight см. в статье Использование объектной модели Silverlight.

См. также

Концепции

Работа с веб-сайтами

Практическое руководство. Получение списков

Получение элементов списка

Практическое руководство. Работа с пользователями и группами

Контекст клиента как центральный объект

Клиентские объекты, объекты значений и скалярные свойства

Создание клиентского объекта

Инструкции по использованию клиентской объектной модели

Различия управляемой объектной модели и объектной модели ECMAScript

Общие задачи программирования

Другие ресурсы

Библиотека классов для клиента

Библиотека классов ECMAScript

Использование управляемой объектной модели клиента SharePoint Foundation 2010

Центр ресурсов для объектной модели клиента (Возможно, на английском языке)