3

我有一个活动清单。我创建了一个每天重复的新项目(开始时间:1/5/2010 12:00 AM,结束时间:5/30/2010 12:00 AM)。我想删除具有 Start Time : 5/12/2010 12:00 AM 但我的应用程序抛出异常的项目。

我的代码如下:

   DateTime eventDate = DateTime.Parse(list.Fields.GetFieldByInternalName("EventDate").GetFieldValueAsHtml(DateTime.Parse(this.DateTimeOfItem).ToUniversalTime()));
                            SPQuery pQuery = new SPQuery();
                            pQuery.ExpandRecurrence = true;
                            pQuery.CalendarDate = eventDate.AddDays(-1);
                            pQuery.Query = string.Format("<OrderBy><FieldRef Name=\"EventDate\"/></OrderBy><Where><And><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Week /></Value></DateRangesOverlap><Eq><FieldRef Name=\"ID\" /><Value Type=\"Counter\">{0}</Value></Eq></And></Where>", this.ID);
                            SPListItemCollection itemColl = list.GetItems(pQuery);
                            int index = 0;
                            while (index < itemColl.Count)
                            {
                                SPListItem item = itemColl[index];
                                if (DateTime.Parse(item["EventDate"].ToString()).CompareTo(eventDate) == 0)
                                {
                                    web.AllowUnsafeUpdates = true;
                                    item["UID"] = Guid.NewGuid().ToString();
                                    item["EventType"] = 3;
                                    item["RecurrenceID"] = eventDate;
                                    item["MasterSeriesItemID"] = this.ID;
                                    item["XMLTZone"] = null;
                                    item["RecurrenceData"] = "Every 1 day(s)";
                                    item.Update();
                                    list.Update();
                                    web.AllowUnsafeUpdates = false;
                                    break;
                                }
                                index++;
                            }

我不知道为什么我不能更新这个项目。请帮我。

谢谢

PD。

4

2 回答 2

13

要在 SharePoint 中删除重复事件的实例,您必须实际添加一条记录并将其标记为已删除。

要了解 SharePoint 中的重复事件并保持理智,您需要编写一个小实用程序来输出整个列表(每个字段)以了解它们是如何工作的。CAML 查询将重复事件扩展为“假”实例,这些实例无法更新。

当您设置重复事件时,无论它有多少实例,您都只会将 1 条记录添加到列表中。这是“主记录”,在RecurrenceDate字段中具有重复模式。

当您添加例外时(例如,“1/5/2010 12 : 00 AM”上的实例已被删除或移至另一个日期),那么这是另一个新记录。

在此异常记录中,您有以下感兴趣的领域

  • MasterSeriesItemID - 主重复记录的 ID
  • EventType - 3 表示修改的实例,4 表示已删除的实例
  • RecurrenceID - 此执行替换的实例的日期时间

它引用了局部重复记录

这是关于经常性事件的最佳参考。

了解 SharePoint 日历以及如何将其导出为 iCal 格式

请注意,在 SharePoint 2007 中,当您拥有“全天事件”(主记录或异常)时,RecurranceID 字段中存在一些非常疯狂的错误,将 UTC 转换为站点时间/从 UTC 转换为站点时间

于 2010-05-11T16:37:18.027 回答
3

是的,瑞恩是正确的。您需要添加新记录以删除重复系列的实例。有关详细信息,请查看此 URL:http ://sharepointtechie.blogspot.com/2010/08/deleting-individual-events-from.html

于 2011-03-05T18:29:38.773 回答