从Sharepoint日历中删除项目

时间:2015-08-03 08:43:35

标签: sharepoint

我想从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();

1 个答案:

答案 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();
}