Плагин C # OutlookCalendar - как обнаружить удаление встречи в повторяющейся серии - PullRequest
0 голосов
/ 23 мая 2019

Пишу плагин C # для календаря Outlook для сопоставления встреч с другой системой.Используя EventHandlers (например, MAPIFolderEvents_12_BeforeItemMoveEventHandler и ItemsEvents_ItemChangeEventHandler), я могу обнаружить перемещение и удаление элементов, при условии, что они являются отдельными элементами или полной повторяющейся серией.

Проблема в том, что я не могу обнаружитьснятие встречи с сериалом.(Я думаю, это связано с тем, что это изменение основного назначения, а не удаление).EventHandler ищет перемещение элемента в папку DeletedItems, и в этом случае этого не происходит.У меня есть ItemChange EventHandler в папке, но это, кажется, редко срабатывает.

calendarFolder = (Outlook.Folder)Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

calendarFolder.Items.ItemChange += new ItemsEvents_ItemChangeEventHandler(calendarFolder_ItemsChange);

calendarFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(calendarFolder_BeforeItemMove);

Может кто-нибудь подсказать, как я могу получить уведомление об этом действии?

Большое спасибо

1 Ответ

0 голосов
/ 23 мая 2019

Вы правы, что вы получите событие ItemChange только при удалении или изменении экземпляра повторяющегося действия - удаления записываются только в блоке повторений основного события (вы можете увидеть его данные в OutlookSpy - выберите встречу, нажмите кнопку IMessage, выберите AppointmentRecur (свойство PT_BINARY с именем), а изменения вхождения сохраняются в виде вложений в основной встрече.

Но причина ItemChange редко возникает в вашемкод состоит в том, что сборщик мусора освобождает объект, который запускает события (элементы).Вам нужно сохранить calendarFolder.Items в специальной переменной на уровне класса (таким образом, GC не будет касаться ее, пока ваш класс жив) и настроить обработчик событий для этой переменной

...