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"上的实例已删除或移至另一个日期)时,这是另一个新记录.
在此例外记录中,您有以下感兴趣的字段
它引用了区域复发记录
这是关于Recurring Events的最佳参考.
请注意,在SharePoint 2007中,当您有"全天事件"(主记录或例外)时,在RecurranceID字段中有一些非常疯狂的错误转换为/从UTC转换为站点时间