#calendar #exchangewebservices #ews-managed-api #recurring-events
#Календарь #exchangewebservices #ews-managed-api #повторяющиеся события
Вопрос:
Я использую управляемый API EWS для синхронизации приложения планирования с календарями exchange. Я нормально провожу все обычные собрания, но я не получаю никаких повторяющихся встреч.
Мой код следующий:
itemChangeCollection = _service.SyncFolderItems(
new FolderId(WellKnownFolderName.Calendar,
new Mailbox(Email)),
propertySet,
null,
Settings.Default.ExchangeSyncFetchCount,
SyncFolderItemsScope.NormalItems,
syncState);
Что мне нужно изменить, чтобы также видеть повторяющиеся встречи?
Ответ №1:
Экземпляры повторяющихся встреч не являются «реальными» товарами в магазине. Они являются виртуальными в том смысле, что они вычисляются всякий раз, когда вы выполняете поиск с использованием календаря и временных рамок.
Единственный способ найти повторяющиеся встречи — использовать метод FindItems.
Комментарии:
1. На самом деле я использую FindItem для извлечения встреч из календаря комнаты с ограничениями по дате начала и окончания и все еще не получаю повторяющиеся встречи.
2. Я только что понял, что причина, по которой я не получал повторяющиеся встречи, несмотря на то, что я использовал FindItem, заключалась в том, что я использовал фильтр поиска (я хотел использовать как представление элементов для разбивки на страницы, так и указать интервал дат). Если вы хотите получать повторяющиеся элементы, вы не можете использовать фильтр поиска (по крайней мере, не тот, который содержит условия даты).
Ответ №2:
SyncFolderItems
возвращает только необходимую информацию для восстановления повторяющейся серии, но не раскрывает отдельные события. Если вам нужны расширенные вхождения, вам нужно использовать FindItems
метод.
Однако, даже если предположить, что вы можете расширить повторяемость самостоятельно, SyncFolderItems
alone не предоставляет всю необходимую информацию.
SyncFolderItems
вернет список событий с Single
или RecurringMaster
AppointmentType. Событие RecurringMaster содержит свойства ModifiedOccurrences
и DeletedOccurrences
. К сожалению, элементы в ModifiedOccurrences
содержат только ItemId, а не сам элемент. Кажется необходимым решить все исключения отдельно, чтобы получить поля измененных вхождений. Из документации:
Каждый объект OccurrenceInfo в коллекции ModifiedOccurrences содержит четыре свойства: End, ItemId, OriginalStart и Start. Чтобы получить доступ к дополнительным свойствам элемента исключения, необходимо выполнить привязку к элементу с помощью OccurrenceInfo.ItemId.
foreach (OccurrenceInfo item in recurringMasterItem.ModifiedOccurrences)
{
Appointment modifiedItem = Appointment.Bind(service, item.ItemId);
Console.WriteLine("Subject: " modifiedItem.Subject);
}
Другими словами, с помощью данных, которые вы получаете от SyncFolderItem
, вы можете расширить повторяемость, включая временные исключения и удаленные события, но вам придется разрешать исключения в других полях (т. Е. сводка, тело, местоположение. и т.д.) с дополнительными .Bind()
вызовами.
Комментарии:
1. Марко, ты знаешь, как ты мог бы узнать, какие из измененных событий только что были изменены? (После выполнения SyncFolderItems и загрузки свойства ModifiedOccurrences оно содержит все события, которые когда-либо были изменены, а не только то, которое было изменено с момента последней синхронизации). Спасибо!
Ответ №3:
SyncFolderItems
предоставит вам повторяющиеся основные элементы, но не расширит их до вхождений. Повторяющийся мастер содержит общие свойства для всех элементов, повторяющийся шаблон и список исключений и удалений. Это вся информация, необходимая для расширения их до вхождений. Хотя предполагается, что вы вызываете Appointment.BindToOccurrence
для привязки свойств для отдельного события из повторяющегося мастера на основе индекса возникновения. Недостатком является то, что это вызывает вызов EWS для каждого события.