SharePoint 客户端对象模型:加载/更新/删除方法的使用



有人可以解释为什么有两种方法ClientContext.Load的差异或原因,例如用于列表项ListItem.RefreshLoad()?有区别吗?

为什么 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();

谢谢!

要意识到的主要事情是,客户端对象模型从一开始就设计为异步的。

将客户端上下文对象视为用于发送指令和接收数据的容器。.Load() 方法对指令进行排队,例如.Load(item)排队以检索有关给定列表项的数据的说明。

.ExecuteQuery().ExecuteQueryAsync() 方法发送这些排队的指令并从服务器检索结果。

这些操作不同于您可以对实际 SharePoint 对象(如列表和列表项)执行的操作。请考虑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对象时,您所做的只是在本地内存中创建一个对象 - 您尚未向服务器发送任何内容以实际创建列表中的项。ListItem对象只是一个占位符,您对它执行的任何操作(例如在上面的示例中创建它并设置其字段值)都存储为需要执行的指令。

当您将该对象加载到客户端上下文对象(通过clientContext.Load(newListItem)时,您只需将这些指令馈送到客户端上下文。运行 clientContext.ExecuteQuery() 后,将执行这些指令,并且占位符对象将填充从服务器返回的任何实际相关数据。

相关内容

  • 没有找到相关文章

最新更新