我使用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并重新打开它以查看位置...
任何评论或方向的尝试将非常感谢!谢谢: - )
答案 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;
我希望这个解决方案可以帮助任何遇到同样问题的人。