如何刷新Outlook 2010中的阅读窗格内容

时间:2013-06-03 09:30:02

标签: outlook vsto outlook-addin outlook-2010 outlook-redemption

我们使用兑换工具来填充包含真实内容的存根邮件。在所选项目上调用RDOMail.Import(...)后,我们关闭并使用

重新打开Outlook中的预览(阅读)窗格
m_Explorer.ShowPane(MSOutlook.OlPane.olPreview, false);
m_Explorer.ShowPane(MSOutlook.OlPane.olPreview, true);

此方法在Outlook 2007中运行良好。

但是在Outlook 2010中,程序刷新尝试(关闭/打开阅读窗格,取消选择/选择更新的项目)根本不起作用。 Outlook 2010仍显示旧版本。

有人有提示或可能的解决方案吗?

非常感谢提前。

3 个答案:

答案 0 :(得分:1)

您是否尝试在MailItem上调用Close?如果为我选择了该项,则会刷新内容。似乎更容易解决您的建议。

答案 1 :(得分:0)

最后,我们解决了它!

解决方案是

1)删除项目以更新context.RemoveItem(TargetData.EntryID);(我们正在使用RDOMessage,MailItem,RDOFolder和MAPIFolder的一些抽象。但我认为,背后的原理很安静。

2)添加新项目(WithComCleanup来自VSTOContrib项目)

using (var msg = RDOSession.Resource.GetMessageFromMsgFile(pathToMSG)
                                                     .WithComCleanup())
{ 
     msg.Resource.Move(context.RDOFolder);
     msg.Resource.Save();
}

3)将 ItemAdd 处理程序附加到 RDOFolder MAPIFolder ,请注意必须在类级别声明项目集合 ! 为什么选择ItemAdd?因为RDOMail.OnModifiedRDOMail.OnMoved都没有提供MailItem检索所需的有效EntryID。我们在获取时编写自定义UserAttributes,并在ItemAdd ...

中读取它们
 //...
 m_OwnItems = m_Folder.Items
 m_OwnItems.ItemAdd += new MSOutlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
 //...

 void Items_ItemAdd(object Item)
 {
     //Outlook 2010: Version 14, only Outlook 2010 supports `ClearSelection` and `AddToSelection`
     if (Item is MSOutlook.MailItem && ApplicationController.Instance.ApplicationVersion.Major >= 14)
     {
         var mail = Item as MSOutlook.MailItem;

         //Check that the added item is the one you added with GetMessageFromMsgFile
         //...

         if (m_Explorer.IsItemSelectableInView(mail))
         {
             m_Explorer.ClearSelection();
             m_Explorer.AddToSelection(mail);
         }
     }    
 }                        

4)它完成了! Outlook 2010的这种行为使我们在整个开发时间内烦恼......

答案 2 :(得分:0)

  1. 请记住,RDOMail.Move会返回新对象(就像OOM一样)。

  2. 由于您正在重新创建消息,因此其创建时间将会更改。