Wie kann ich mithilfe von FindItems () den wiederkehrenden Master aller wiederkehrenden Serien ermitteln, bei denen ein oder mehrere Vorkommen innerhalb eines Datumsbereichs beginnen?

Hintergrund:

Ich verwende die verwaltete Microsoft Exchange-Webdienste-API 2.0. Ich versuche, einen Kalenderordner zu durchsuchen und alle Termine zurückzugeben, die den folgenden Kriterien entsprechen:

Hat eine Empfindlichkeit von NormalHat eine Kategorie von "Test"Startet in einem bestimmten Datumsbereich

Ich bin zu dem Schluss gekommen, dass ich nicht nur nach dem Datum filtern muss, das ich verwenden mussFindItems () Anstatt vonFindAppoinments ()(Bitte korrigieren Sie mich, wenn das falsch ist.) Der Nachteil von FindItems () ist, dass es nur den Master einer wiederkehrenden Serie zurückgibt und ich die Vorkommnisse selbst auflösen muss. Ich explodiere den Master ohne Probleme, aber in meinen Tests stieß ich auf ein Problem, wie FindItems () Wiederholungen sucht. Es scheint nur dann den Master einer wiederkehrenden Serie zurückzugeben, wenn die gesamte Serie irgendwann in meinem Suchbereich beginnt. Wenn also jemand für das nächste Jahr täglich eine wiederkehrende Serie erstellt und ich den Kalender nächsten Monat durchsuche, gibt FindItems () keinen Hinweis darauf, dass in diesem Bereich eine wiederkehrende Serie stattfindet.

TLDR:

Angesichts eines Kalenders mit einer wiederkehrenden Serie, deren tägliche Häufigkeit am 01.01.2014 beginnt und am 30.01.2014 endet. Wie kann ich FindItems () mit einem Filter-Datumsbereich von 1/10/2014 bis 1/20/2014 verwenden, um den wiederkehrenden Master für diese Serie zurückzugeben?

Mein Code

// A search collection that contains all of the search conditions.
List<SearchFilter> masterSearchFilterCollection = new List<SearchFilter>();
masterSearchFilterCollection.Add(new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "IPM.Appointment"));

masterSearchFilterCollection.Add(new SearchFilter.IsEqualTo(AppointmentSchema.Sensitivity, Sensitivity.Normal)); //No Private items
//masterSearchFilterCollection.Add(new SearchFilter.ContainsSubstring(AppointmentSchema.Categories, "Test"));

List<SearchFilter> dateRangeSearchFilterCollection = new List<SearchFilter>();
dateRangeSearchFilterCollection.Add(new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, searchStartDateTime));
dateRangeSearchFilterCollection.Add(new SearchFilter.IsLessThanOrEqualTo(AppointmentSchema.Start, searchEndDateTime));
masterSearchFilterCollection.Add(new SearchFilter.SearchFilterCollection(LogicalOperator.And, dateRangeSearchFilterCollection));

SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, masterSearchFilterCollection);

ItemView view = new ItemView(pageSize, initialOffset);
view.PropertySet = GetPrimaryProperties();
FindItemsResults<Item> results = Service.FindItems(Folder, searchFilter, view);

foreach(Appointment item in results)
{
   if (item.AppointmentType == AppointmentType.RecurringMaster)
   {
      // Calendar item is a recurring master item for a recurring series.
      // Loop through all occurrences of the master here
   }
   else
   {
      // Calendar item is not part of a recurring series.
   }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage