0

Может кто-нибудь объяснить различия или причины, по которым существуют два метода: ClientContext.Load и т. Д. для ListItems ListItem.RefreshLoad()? Есть ли разница?Модель объекта клиента Sharepoint: использование методов Load/Update/Delete

Почему у ClientContext нет эквивалента .Update или Delete методов?

И когда мне нужно позвонить по методу ClientContext.ExecuteQuery?

ListItem item = ...; 

// 1. Is there a difference between ClientContext.Load(ListItem) and ListItem.RefreshLoad()? 
clientContext.Load(item); 
item.RefreshLoad(); 

// 2. Why aren't there methods like ClientContext.Update(...) or ClientContext.Delete(...)? 
item.Update(); 
item.DeleteObject(); 

// 3. When is the ClientContext.ExecuteQuery needed (load/update/delete)? 
clientContext.ExecuteQuery(); 

Спасибо!

+0

это может помочь, если вы его не видели -> [Выполнение основных операций] (https://msdn.microsoft.com/en-us/library/office/jj163201.aspx) – WhiteHat

ответ

0

Главное, чтобы понять, что объектная модель клиента спроектирована так, чтобы быть асинхронной от get go.

Подумайте о своем объекте контекстного объекта в качестве судна для отправки инструкций и получения данных. Метод .Load() ставит в очередь инструкции, такие как .Load(item), в порядке очереди, чтобы получить данные о данном элементе списка.

Методыи .ExecuteQueryAsync() отправляют эти поставленные в очередь инструкции и извлекают результаты с сервера.

Эти операции отличаются от операций, которые вы можете выполнять против реальных объектов SharePoint, таких как списки и элементы списка. Рассмотрим this example from Microsoft:

ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation(); 
ListItem newListItem = targetList.AddItem(itemCreateInfo); 
newListItem["Title"] = "New Announcement"; 
newListItem["Body"] = "Hello World!"; 
newListItem.Update(); 

clientContext.Load(newListItem); 
clientContext.ExecuteQuery(); // only at this point is the item actually created 

При создании ListItem объекта в клиентской объектной модели, все, что вы делаете, это создать объект в локальный memory-- вы не посылали ничего на сервер еще на самом деле создать в списке. Объект ListItem является просто заполнителем, и все, что вы делаете с ним (например, создаете его и устанавливаете его значения полей в приведенном выше примере), хранится в виде инструкций, которые необходимо выполнить.

Когда вы загружаете этот объект в объект контекста клиента (через clientContext.Load(newListItem), вы просто загружаете эти инструкции в свой Контекст клиента. После запуска clientContext.ExecuteQuery() эти инструкции выполняются, и объект-заполнитель заполняется любыми актуальными релевантными данными возвращается с сервера.

Смежные вопросы