更新项目在SharePoint中具有重复发生

Pho*_*ang 3 sharepoint recurrence

我有一个活动清单.我创建了一个每日重复的新项目(开始时间:2010年1月5日上午12:00和结束时间:2010年5月30日12:00 AM).我想删除具有开始时间的项目: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++;
                            }
Run Code Online (Sandbox Code Playgroud)

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

谢谢

PD.

Rya*_*yan 13

要在SharePoint中删除定期事件的实例,您必须实际添加记录并将其标记为已删除.

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

设置定期事件时,只需将1条记录添加到列表中,无论它有多少个实例.这是"主记录",并且在RecurrenceDate字段中具有重复发生模式.

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

在此例外记录中,您有以下感兴趣的字段

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

它引用了区域复发记录

这是关于Recurring Events的最佳参考.

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

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