约会项目的 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 更新位置字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章

EWS Office 365 模拟不起作用

sql触发器确保约会之间的30天不起作用

Oreo+ 中位置更新的前台服务不起作用

融合位置提供程序 - 通过位移更新位置不起作用

工作管理器的位置更新不起作用

当前位置更新在 iphone 设备中不起作用