3

次のコードを実行して、定期的なエントリを という名前のカレンダー リストに保存しました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 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 をユーザー フォーム ( no user would want to calculate the last date of his occurence for recurring pattern with no end date) で同じ日に設定し、保存時に自動計算する必要があります。それはどのように可能ですか?

sharepoint UI を使用してエントリを作成すると、この終了日が同じ日に設定されていても、繰り返しエントリの場合でも自動計算されます。

どこが間違っているのか教えてください。レコードの保存中ですか、それとも取得中ですか? それとも が とEndDate同じ日付だからStartDateですか?親切に助けてください。

4

1 に答える 1

0

fRecurrence」および「Recurrence」フィールドを確認します。"True" の代わりに "1" を使用してみてください。"Recurrence" == -1 についてはわかりません。それが何を意味するのかを明確にしていただけますか?

もう1つのアイデア。コードの 2 番目の部分をテストするために、SharePoint サイトを使用して定期的なイベントを作成できます。

終了日のない定期的なイベントについて私が知っているように、「EndDate」は数年後の計算された日付です。したがって、コードが正しい場合、繰り返しイベントを処理するには、年を追加して「EndDate」を更新する必要があります。

于 2012-09-08T13:27:36.097 に答える