我们使用兑换工具来填充包含真实内容的存根邮件。在所选项目上调用RDOMail.Import(...)
后,我们关闭并使用
m_Explorer.ShowPane(MSOutlook.OlPane.olPreview, false);
m_Explorer.ShowPane(MSOutlook.OlPane.olPreview, true);
此方法在Outlook 2007中运行良好。
但是在Outlook 2010中,程序刷新尝试(关闭/打开阅读窗格,取消选择/选择更新的项目)根本不起作用。 Outlook 2010仍显示旧版本。
有人有提示或可能的解决方案吗?
非常感谢提前。
答案 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.OnModified
和RDOMail.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)
请记住,RDOMail.Move会返回新对象(就像OOM一样)。
由于您正在重新创建消息,因此其创建时间将会更改。