Sharepoint 客户端对象模型:加载/更新/删除方法的使用
Sharepoint Client Object Model: Usage of Load / Update / Delete methods
有人可以解释这两种方法的区别或原因吗 ClientContext.Load
例如对于 ListItems ListItem.RefreshLoad()
?有区别吗?
为什么 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();
谢谢!
要认识到的主要事情是,客户端对象模型从一开始就被设计为异步的。
将您的客户端上下文对象视为发送指令和接收数据的容器。 .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
对象时,您所做的只是在本地内存中创建一个对象——您还没有向服务器发送任何内容来实际创建一个项目在列表中。 ListItem
对象只是一个占位符,您对其所做的任何操作(例如在上面的示例中创建它并设置其字段值)都存储为需要执行的指令。
当您将该对象加载到客户端上下文对象中时(通过 clientContext.Load(newListItem)
,您只是将这些指令提供给您的客户端上下文。一旦您 运行 clientContext.ExecuteQuery()
,这些指令就是执行后,占位符对象会填充从服务器返回的任何实际相关数据。
有人可以解释这两种方法的区别或原因吗 ClientContext.Load
例如对于 ListItems ListItem.RefreshLoad()
?有区别吗?
为什么 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();
谢谢!
要认识到的主要事情是,客户端对象模型从一开始就被设计为异步的。
将您的客户端上下文对象视为发送指令和接收数据的容器。 .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
对象时,您所做的只是在本地内存中创建一个对象——您还没有向服务器发送任何内容来实际创建一个项目在列表中。 ListItem
对象只是一个占位符,您对其所做的任何操作(例如在上面的示例中创建它并设置其字段值)都存储为需要执行的指令。
当您将该对象加载到客户端上下文对象中时(通过 clientContext.Load(newListItem)
,您只是将这些指令提供给您的客户端上下文。一旦您 运行 clientContext.ExecuteQuery()
,这些指令就是执行后,占位符对象会填充从服务器返回的任何实际相关数据。