Надстройка VSTO для Outlook, событие удаления и записи, запускаемое только при первом открытии

Я работаю над надстройкой Outlook, при удалении которой я пытаюсь выполнить определенное действие. Он отлично работает со всеми назначениями, которые я уже открывал один раз. Когда встреча создается или удаляется из календаря без открытия, событие (BeforeDelete, Write) не запускается.

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    inspectors = this.Application.Inspectors;
    inspectors.NewInspector +=
    new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);
}
void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
    appointmentItem = Inspector.CurrentItem as Outlook.AppointmentItem;
    if (appointmentItem != null)
    {
        (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Send += _appointment_Send;
        (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).BeforeDelete += _appointment_Delete;
        (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Write += _appointment_Write;    
        (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Open += _appointment_Open;
        (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Close += _appointment_Close;
    }
}

Я предполагаю, что объяснение заключается в том, что инспекторы фактов прикрепляются только тогда, когда встреча открыта, и что путь, по которому следует идти, больше похож на описанный здесь, но я не уверен. Приведенный выше код работает как шарм, за исключением конкретного случая, когда встреча не открывается перед удалением или созданием.

Будем очень признательны за любое руководство.


person Salim    schedule 02.09.2017    source источник


Ответы (1)


Да, BeforeWrite не срабатывает. Если я выберу встречу в Outlook и посмотрю на события, инициированные OOM, используя OutlookSpy (выберите встречу , нажмите кнопку «Элемент», перейдите на вкладку «События» и посмотрите журнал внизу страницы, измените встречу в строке), я могу видеть только следующие события.

BeforeDelete срабатывает должным образом при удалении встречи.

PropertyChange (ConversationIndex)
PropertyChange (Subject)
PropertyChange (Start)
PropertyChange (StartInStartTimeZone)
PropertyChange (StartUTC)
PropertyChange (End)
PropertyChange (EndInEndTimeZone)
PropertyChange (EndUTC)
PropertyChange (Duration)
PropertyChange (AllDayEvent)
PropertyChange (StartInStartTimeZone)
PropertyChange (StartUTC)
PropertyChange (End)
PropertyChange (EndInEndTimeZone)
PropertyChange (EndUTC)
PropertyChange (Start)
PropertyChange (EndInEndTimeZone)
PropertyChange (EndUTC)
PropertyChange (Duration)
PropertyChange (End)
PropertyChange (MeetingStatus)
Write (false)
BeforeCheckNames (false)
AfterWrite ()
<Unknown(DispID=0x0000FC95)> (false)
person Dmitry Streblechenko    schedule 02.09.2017
comment
+1 для OutlookSpy, о котором я не знал. Как ни странно, событие Write, если оно запущено, должно быть чем-то, что я могу зафиксировать. К сожалению, этого не происходит. Это может быть связано с тем, что инспектор проверяет, относится ли currentItem к типу встречи Outlook. При редактировании без открытия я считаю, что значение равно нулю. - person Salim; 05.09.2017