3

イベントリストがありました。毎日繰り返される新しいアイテムを作成しました(開始時間:1/5/2010 12:00 AMおよび終了時間:5/30/2010 12:00 AM)。開始時刻が2010年5月12日午前12:00のアイテムを削除したいのですが、アプリケーションが例外をスローしました。

以下の私のコード:

   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++;
                            }

このアイテムを更新できない理由がわかりません。私を助けてください。

ありがとう

PD。

4

2 に答える 2

13

SharePoint で定期的なイベントのインスタンスを削除するには、実際に新しいレコードを追加して、削除済みとしてマークする必要があります。

SharePoint で繰り返されるイベントを理解し、正気を保つには、リスト全体 (すべてのフィールド) を出力してそれらがどのように機能するかを学ぶための小さなユーティリティを作成する必要があります。CAML クエリは、定期的なイベントを「偽の」インスタンスに展開しており、これらを更新することはできません。

定期的なイベントを設定すると、インスタンスの数に関係なく、リストに追加されるレコードは 1 つだけです。これは「マスター レコード」であり、RecurrenceDateフィールドに繰り返しパターンがあります。

例外を追加すると (たとえば、「1/5/2010 12:00 AM」のインスタンスが削除されたか、別の日付に移動された場合)、これは別の新しいレコードになります。

この例外レコードには、次の関心のあるフィールドがあります

  • MasterSeriesItemID - マスター定期レコードの ID
  • EventType - 変更されたインスタンスの場合は 3、削除されたインスタンスの場合は 4
  • RecurrenceID - この実行によって置き換えられるインスタンスの日時

元の再発記録を参照します

これは、定期的なイベントに関する最良のリファレンスです。

SharePoint カレンダーと iCal 形式にエクスポートする方法を理解する

SharePoint 2007 では、'終日イベント' (マスター レコードまたは例外のいずれか) がある場合、RecurranceID フィールドで UTC からサイト時間への変換にかなりおかしなバグがいくつかあることに注意してください。

于 2010-05-11T16:37:18.027 に答える
3

はいライアンは正しいです。定期的なシリーズのインスタンスを削除するには、新しいレコードを追加する必要があります。詳細については、次のURLを確認してください:http ://sharepointtechie.blogspot.com/2010/08/deleting-individual-events-from.html

于 2011-03-05T18:29:38.773 に答える