我正在尝试开发一个AddIn - 或者更确切地说,现在只是一个概念验证,看看我的想法是否实际上甚至可能 - 对于Outlook(2010年,确切地说),在。 NET / C#和我面临以下问题:
AddIn应该提供一个新的自定义文件夹(在层次结构的顶层,即所有其他主要项目旁边,如任务,日历,联系人等),在其中向用户提供项目。所以我认为在AddIn的Startup方法中,我可以简单地做一些像
这样的事情Outlook.Folder parent = inBox.Parent as Outlook.Folder;
Outlook.Folder myCustomFolder = (Outlook.Folder)parent.Folders.Add("My Custom Folder");
......事实上确实有效。但是,退出Outlook并再次启动后出现问题。由于该文件夹由Outlook保留,因此下次Outlook再次启动并初始化AddIn时它仍然存在,因此创建该文件夹失败,因为已存在同名对象。但是我没有看到如何判断这是上次的“我的”文件夹。
我不想依赖其名称来识别文件夹(即使考虑也太不可靠;用户可能想要重命名它,可能存在其他AddIns创建文件夹的文件夹)相同的名称,更不用说本地化问题等),但我可以用什么来确定自定义文件夹已经创建?
我要么必须能够以某种方式添加“标签”做文件夹,以便我以后可以将其识别为“我的” - 或者需要某种唯一标识文件夹的ID(并且甚至保持不变)在推出Outlook之间!)所以我可以认识到它。
我一直在查看EntryID
对象的StoreID
和[MAPI]Folder
字段,但是从MSDN上的(遗憾的,不是非常详细的)说明中,我不确定如果我可以依赖它们,因为显然它们可以在某些条件下改变。
有什么建议吗?
答案 0 :(得分:1)
除非删除该文件夹然后重新创建,否则该条目不会更改。但它不会是相同的文件夹 - 只是另一个可能具有相同名称的文件夹。 Outlook所做的是将特殊文件夹的entryid存储在根IPM文件夹和/或收件箱文件夹中。 由于您无法在Exchange中的文件夹上设置命名属性,并且您不能只选择自己的属性标记而不会遇到冲突,请在收件箱文件夹(始终存在于默认存储中)中创建隐藏消息并存储文件夹条目ID以及您可能需要的任何其他配置属性。要确保您的配置隐藏消息是唯一的,请选择一个唯一的消息类,例如IPM.Note.MyCompany.MyAdddin.Config。 可以使用Outlook对象模型中的MAPIFolder.GetStorage或Redemption中的RDOFolder.HiddenItems访问隐藏的消息。