0

有人可以解釋爲什麼有兩種方法ClientContext.Load和例如ClientContext.Load的差異或原因對於ListItems ListItem.RefreshLoad()?有區別嗎?Sharepoint客戶端對象模型:使用加載/更新/刪除方法

爲什麼ClientContext沒有相應的.UpdateDelete方法?

什麼時候我必須致電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

要認識到的主要問題是客戶端對象模型被設計爲從開始異步。

將您的客戶端上下文對象視爲發送指令和接收數據的容器。 .Load()方法將指令排隊,例如.Load(item)排隊指令以檢索有關給定列表項的數據。

.ExecuteQuery().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(),這些指令進行和佔位符對象得到任何實際的相關數據填充從服務器返回

相關問題