【问题标题】:EWS update location field of an appointment item doesn't work约会项目的 EWS 更新位置字段不起作用
【发布时间】: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 并重新打开它以查看该位置...

任何尝试的方法或方向将不胜感激!谢谢你:-)

【问题讨论】:

    标签: outlook-addin exchangewebservices


    【解决方案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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2012-01-06
      • 2019-06-18
      • 2012-12-21
      相关资源
      最近更新 更多