约会项目的EWS更新位置字段不起作用

时间:2016-10-18 19:19:28

标签: outlook-addin exchangewebservices

我使用EWS API 2.0更新Outlook会议项目中的位置和主题。我可以看到位置和主题在outlook日历中反映出来。但是,当我弹出约会项目时,该位置是空白的,但是,我仍然可以看到更新的主题。

以下是我使用的代码:

Appointment appointment = Appointment.Bind(_service, ConvertId(entryId));
 appointment.Location = location;
 appointment.Subject = "Server Update Subject";
 appointment.Update(ConflictResolutionMode.AutoResolve, SendInvitationsOrCancellationsMode.SendToNone); 

PS:我使用Outlook加载项(VSTO)打开我的Web应用程序以查找可用的会议室并更新会议项目。

一旦房间(位置)在服务器端(通过EWS)更新,我可以看到outlook日历立即反映更改,但更新未显示在outlook中已打开的约会项目上。

我需要关闭outlook中的约会项目并重新打开约会项目以查看更新,但是,我仍然只能看到更新的主题,而不是位置。

要查看更新后的位置,我需要关闭Outlook并重新打开它以查看位置...

任何评论或方向的尝试将非常感谢!谢谢: - )

1 个答案:

答案 0 :(得分:0)

经过数小时的研究后,终于弄明白了。

一个已知问题是Outlook不会更新通过EWS(或从服务器端更改)所做的更改,直到您重新打开应用程序并释放对该对象的所有引用(重新打开之前)。因此解决方案是添加Marshal.ReleaseComObject,如下所示:

Marshal.ReleaseComObject(apptItem);

释放对象(与关闭Outlook应用程序相同),然后使用EntryId重新打开对象。

string eid = item.EntryID;
--- release the app object ---
var ns = application.GetNamespace("MAPI");// application.Session;// application.GetNamespace("MAPI");

Outlook.AppointmentItem appoinment = ns.GetItemFromID(eid) as Outlook.AppointmentItem;

我希望这个解决方案可以帮助任何遇到同样问题的人。