2012-09-08 11 views
3

我已完成以下代碼以將日曆列表的復發項保存到名爲Bookings展開復發和CalendarDate:事件EndDate未自動計算爲定期活動

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 occurences比該項目是正確保存和當前活動視圖顯示所有的實例,但同時獲取週期性分錄我只得到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 for recurring項目設置爲用戶窗體上的同一天(no user would want to calculate the last date of his occurence for recurring pattern with no end date),並且應該在保存時自動進行自動計算。這是可能的嗎?

如果我使用sharepoint UI進行輸入,則此日期即使設置爲同一天並且它是一個循環條目,也是自動計算的。

請指導我哪裏錯了?是在保存還是在獲取記錄的同時?或者是因爲EndDateStartDate的日期相同?請幫助。

回答

0

檢查「f復發」和「復發」字段。你可以嘗試使用「1」而不是「真」,我不確定「復發」== -1。你能否澄清一下這是什麼意思?

還有一個想法。您可以使用SharePoint網站創建重現事件來測試代碼的第二部分。

我知道沒有結束日期,「EndDate」是未來幾年的計算日期。因此,如果您的代碼是正確的,要處理重複事件,則應通過追加更多年份來更新「EndDate」。

+0

謝謝。 'EndDate'用於每兩個月僅在週日發生並在10次發生後結束的事件!我將如何獲得這樣的事件的結束日期?我的問題不是沒有結束日期的事件,我可以在將來追加許多年,並且工作正常。我的問題只是針對某些情況重複的事件。 – Ishan

+0

好的。對於重複實例,您應該檢查重複數據。 xml值應該包含帶有多個實例的「repeatinstances」標籤。例如,如果您希望該事件會後10個事件結束,那麼XML值應該是這樣的: 10 請檢查在屬性 「monthlyByDay」 的標籤。 – Warlock