我已完成以下代码以将重复条目保存到名为 Bookings
的日历列表中。
SPSite site = new SPSite(SPContext.Current.Web.Url);
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Bookings"];
SPListItem recEvent = list.Items.Add();
try
{
recEvent["EventDate"] = startdate;//11/09/2012 08:00:00
recEvent["EndDate"] = enddate;//11/09/2012 08:30:00
recEvent["Booking_x0020_Title"] = Convert.ToString(txtTitle.Text);
recEvent["Title"] = Convert.ToString(txtTitle.Text);
recEvent["RecurrenceData"] = Recur_Xml.ToString();//ReccurrenceRule
recEvent["fRecurrence"] = "True";
recEvent["EventType"] = 1;
recEvent["UID"] = System.Guid.NewGuid();
recEvent["TimeZone"] = 0;
recEvent["Recurrence"] = -1;
recEvent["XMLTZone"] = "<timeZoneRule><standardBias>-330</standardBias><additionalDaylightBias>-60</additionalDaylightBias></timeZoneRule>";
recEvent.Update();
}
catch (Exception er)
{
}
如果我将上面的规则保存为 Repeat every 1 day for 10 occurrences
则项目保存正确并且当前事件 View 显示所有实例但是在获取重复条目时我只得到 1结果即在开始日期。以下是检索循环值的代码:
SPWeb oWeb = SPContext.Current.Web;
SPList oListBookings = oWeb.Lists.TryGetList("Bookings");
SPQuery oQueryBookings = new SPQuery();
string strQuery = "";
strQuery = @"<Where><DateRangesOverlap><FieldRef Name='EventDate' /><FieldRef Name='EndDate' /><FieldRef Name='RecurrenceID' /><Value Type='DateTime'><Today /></Value></DateRangesOverlap></Where>";
oQueryBookings.ExpandRecurrence = true;
oQueryBookings.Query = strQuery;
oQueryBookings.CalendarDate = date;
SPListItemCollection oCollBookings = oListBookings.GetItems(oQueryBookings);
仅当 oQueryBookings.CalendarDate = date;
等于 11/09/2012 08:00:00
时才会显示结果,并且不会返回任何日期之后的项目即使这些日期的实例一直存在到 19/09/2012 08:00:00
如果我在保存项目时将 recEvent["EndDate"]
设置为 19/09/2012 08:00:00
,查询将返回所有项目。我希望在用户表单上将重复项的 EndDate 设置为同一天(没有用户会想要计算没有结束日期的重复模式出现的最后日期
)并且应该自动计算保存。这怎么可能?
如果我使用 Sharepoint UI 创建条目,则此结束日期会自动计算,即使它设置为同一天并且如果它是重复条目也是如此。
请指导我哪里出错了?是在保存时还是在获取记录时?还是因为 EndDate
与 StartDate
的日期相同?请帮忙。
最佳答案
检查“fRecurrence”和“Recurrence”字段。您可以尝试使用“1”而不是“True”,我不确定“Recurrence”== -1。你能解释一下这是什么意思吗?
还有一个想法。您可以使用 SharePoint 网站创建重复事件来测试您的第二部分代码。
据我所知,对于没有结束日期的重复事件,“EndDate”是 future 几年的计算日期。因此,如果您的代码是正确的,要处理重复事件,您应该通过追加额外的年份来更新“EndDate”。
关于c# - 展开重复周期和 CalendarDate :Event EndDate not autocalculated for recurring events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328519/