我想从sharepoint日历中删除项目。这是我的代码的一部分:
Microsoft.SharePoint.Client.CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery();
query.ViewXml = "<View><Query><Where><And><Eq><FieldRef Name='Title'/><Value Type='Text'>"
+ requestTitle +
"</Value></Eq><Eq><FieldRef Name='EventDate'/><Value Type='Text'>"
+ lFrom +
"</Value></Eq></And><And><Eq><FieldRef Name='EndDate'/><Value Type='Text'>"
+ lTo +
"</Value></Eq><Eq><FieldRef Name='fAllDayEvent'/><Value Type='Text'>"
+ Boolean.TrueString +
"</Value></Eq></And></Where></Query></View>";
Microsoft.SharePoint.Client.ListItemCollection listItem = calendar.GetItems(query);
context.Load(listItem);
if (listItem.Count == 1)
{
listItem[0].DeleteObject();
//context.ExecuteQuery();
}
它在行
中引发异常 if (listItem.Count == 1)
它说listItem没有初始化。当我像这样传递空查询时,它甚至会抛出异常:
Microsoft.SharePoint.Client.ListItemCollection listItem = calendar.GetItems(new Microsoft.SharePoint.Client.CamlQuery());
为什么呢?在此链接https://msdn.microsoft.com/en-us/library/office/ee534956(v=office.14).aspx上,据说它应该在传递空查询时检索所有项目。
Evertyhing非常适合在日历中添加新项目,以下是我用过的代码:
//adding new calendar item
Microsoft.SharePoint.Client.ListItemCreationInformation item = new Microsoft.SharePoint.Client.ListItemCreationInformation();
Microsoft.SharePoint.Client.ListItem newItem = calendar.AddItem(item);
newItem["Title"] = requestTitle;
newItem["EventDate"] = lFrom;
newItem["EndDate"] = lTo;
newItem["fAllDayEvent"] = Boolean.TrueString;
newItem.Update();
答案 0 :(得分:2)
因为你已经使用了
Microsoft.SharePoint.Client
库,我假设它是一个客户端应用程序。在客户端应用程序中,向服务器发送请求是一件昂贵的事情。因此,实际发生的是,无论何时加载任何组件,只会在后台创建一个请求。这样,您可以使用 load()将多个请求捆绑为1次。要将请求实际发送到服务器,您需要在检查 listItemCollection 的长度之前调用ExecuteQuery()。
Microsoft.SharePoint.Client.ListItemCollection listItem = calendar.GetItems(query);
context.Load(listItem);
context.ExecuteQuery(); // This will take a while
if (listItem.Count == 1)
{
listItem[0].DeleteObject();
context.ExecuteQuery();
}