C# 展开定期和日历日期:不为定期事件自动计算事件结束日期
我已经完成了以下代码,将一个定期条目保存到名为C# 展开定期和日历日期:不为定期事件自动计算事件结束日期,c#,sharepoint-2010,calendar,recurring,C#,Sharepoint 2010,Calendar,Recurring,我已经完成了以下代码,将一个定期条目保存到名为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
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)
{
}
仅当oQueryBookings.CalendarDate=date时,才会显示结果
等于11/09/2012 08:00:00
,并且它不会返回此后日期的任何项目,即使在19/09/2012 08:00:00
如果在保存项目时将recEvent[“EndDate”]
设置为19/09/2012 08:00:00
,则查询将返回所有项目。我希望定期项目的结束日期在用户表单上设置为“同一天”(没有用户希望为没有结束日期的定期模式计算其发生的最后日期),并且应在保存时自动计算。这是怎么可能的
如果我使用sharepoint UI创建条目,则此结束日期将自动计算,即使它设置为同一天,并且是定期条目
请告诉我哪里出了问题?是在保存记录时还是在提取记录时?还是因为EndDate
与StartDate
的日期相同?请提供帮助。检查“频繁发生”和“重复发生”字段。您可以尝试使用“1”而不是“True”,我不确定“重复性”=-1。你能澄清一下这是什么意思吗
还有一个主意。您可以使用SharePoint网站创建重复事件,以测试代码的第二部分
正如我所知,对于无结束日期的重复事件,“结束日期”是未来几年的计算日期。因此,如果您的代码正确,要处理重复事件,您应该通过追加年份来更新“EndDate”。谢谢<代码>结束日期
适用于每2个月后仅在周日发生且在10次发生后结束的事件!我怎样才能知道这样一个活动的结束日期?我的问题不是关于并没有结束日期的事件,我可以在未来附加很多年,而且效果很好。我的问题只是在某些情况下重复事件。确定。对于重复实例,应检查RecurrenceData。xml值应该包含一个带有多个实例的“repeatinstances”标记。例如,如果希望事件在10次出现后结束,xml值应如下所示:su 10请检查“monthlyByDay”标记中的属性。
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);