约会项目的 EWS 更新位置字段不起作用
Posted
技术标签:
【中文标题】约会项目的 EWS 更新位置字段不起作用【英文标题】:EWS update location field of an appointment item doesn't work 【发布时间】:2016-10-18 19:19:27 【问题描述】:我使用 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】:经过数小时的研究,终于弄明白了。
在您重新打开应用程序并释放对对象的所有引用(重新打开之前)之前,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;
我希望这个解决方案可以帮助遇到与我相同问题的任何人。
【讨论】:
以上是关于约会项目的 EWS 更新位置字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章