具有外部Web应用程序的Outlook AddIn Sync日历/为AppointmentItems处理的正确事件是什么

时间:2018-08-23 07:15:01

标签: outlook outlook-addin

我尝试开发一个Outlook加载项,使我可以使Outlook中的日历项与外部Web应用程序保持同步。因此,基本上有两种情况:

  1. 用户在Outlook中更新AppointmentItem,这些更改应传播到Web应用程序
  2. 用户在Web应用程序中更新会议,并且这些更改应传播到Outlook(通过* .ics附件)

我的加载项尝试处理日历更改事件,如下所示:

Outlook.MAPIFolder calendarFolder =
this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
_CalendarItems = calendarFolder.Items;

[...]

 _CalendarItems.ItemChange += Item_Change;

在Item_Change方法中,我基本上尝试处理更改:

if (myAppointment.StartUTC != MyWebAppMeeting.getDateTime())
{
    Meeting myMeeting = myMyWebAppAPI.PostMeeting(meetingIdLong, myAppointment.GlobalAppointmentID, MyWebAppMeeting.title, myAppointment.Body, myAppointment.StartUTC, ...;
}

使用此句柄,我假设AppointmentItem已更新,我需要将这些更改传播到我的Web应用程序。

测试此实现可以发现以下内容: 当Web应用程序使用带有ICS附件的邮件向我的日历发送更新时,将触发Item_Change。但是... AppointmentItem目前尚未更新。这导致我用AppointmentItem中的OLD StartUTC值更新Web应用程序的事实!

您可能会说,为什么不使用Web应用程序中的新值。

好吧,正如我一开始试图指出的那样,我需要处理2种情况(通过Outlook更新和通过Web应用程序更新)。因此,如果我选择使用Web应用程序提供的值,则当用户在Outlook中移动AppointmentItem并由此触发Item_Change时,我将无法处理这种情况。在这种情况下,我当然会在AppointmentItem.Start_UTC中收到正确的值,以传播到Web应用程序。

那么关键是如何正确处理Outlook日历的更新?

0 个答案:

没有答案