【发布时间】:2015-03-09 10:16:05
【问题描述】:
当远程事件接收器更改文档列表项时,我需要处理它。远程事件接收器连接到 itemupdated 事件。这有一个明显的问题,如果我在 itemupdated 事件中更新项目,我将陷入无限循环。
为了避免这种无限循环,并且在没有像旧式 SharePoint 开发中使用的 EventFiringEnabled 之类的东西的情况下,我考虑在列表项上添加一个“已处理”标志以指示文档已被处理。
然后逻辑流程如下所示。
- 文档已添加到库中 - 这里没什么特别的
- 已在列表项上填写元数据 - 触发 ItemUpdated 事件
- 远程事件接收器应运而生。检查“已处理”标志。如果是真的,什么都不做,如果是假的,继续。使用文档上的元数据,它“处理”它。文档已更新,列表项“已处理”标志设置为 true。
我遇到的麻烦是在单个事务中更新文档和列表项。
我的 SaveFile 方法如下所示:
private void SaveFile(List list, string url, MemoryStream memoryStream)
{
var newFile = new FileCreationInformation
{
ContentStream = memoryStream,
Url = url,
Overwrite = true
};
File updatedFile = list.RootFolder.Files.Add(newFile);
ListItem item = updatedFile.ListItemAllFields;
item["Processed"] = true;
item.Update();
_clientContext.ExecuteQuery();
}
但这表现为两个更新。文件被更新,然后列表项被更新。有谁知道我是否可以将其强制为单个更新?
【问题讨论】:
-
如果您不想获取新项目,则无需调用 Load() 方法,这从您当前的 sn-p 中可以看出。我认为,@Vadim 正确地指出它仍然是从客户端机器发送的单个请求。
标签: sharepoint csom sharepoint-online