2012-01-20 62 views
2

我正在尝试开发一个AddIn - 或者说,现在只是一个概念验证,看看我脑海中是否真的有可能 - 对于Outlook(准确地说),在.NET/C#中,我面临以下问题:如何识别Outlook中的“我的”自定义文件夹AddIn

AddIn应该提供一个新的自定义文件夹(在层次结构的顶层,即旁边所有其他主要项目,如任务,日历,联系人等),以向用户提供项目。所以我认为,在AddIn的启动方法中,我可以简单地做一些类似于

Outlook.Folder parent = inBox.Parent as Outlook.Folder; 
Outlook.Folder myCustomFolder = (Outlook.Folder)parent.Folders.Add("My Custom Folder"); 

......并且确实有效。但是,退出Outlook并重新启动后会出现问题。由于该文件夹正在被Outlook保留,因此Outlook下次启动并再次初始化AddIn时仍然存在,因此文件夹的创建失败,因为已存在同名对象。但我没有看到任何方式如何判断这是上次“我的”文件夹。

我不想依靠其识别的文件夹(这只是太不可靠,甚至考虑;用户可能想要重命名,其他加载项可能存在的是创建一个同名的文件夹,而不是提到本地化问题等),但我还可以使用什么来确定自定义文件夹已经创建?

我要么必须能够以某种方式添加一个“标签”做文件夹,以便以后我可以将其识别为“我的” - 或者需要某种类型的唯一标识该文件夹的标识符(并保持不变甚至在展望Outlook之间!),所以我可以通过它认出它。

我一直在寻找的[MAPI]Folder对象的EntryIDStoreID领域,但在MSDN中的(可悲的是,不是很详细)的说明,我不知道如果我能依靠他们,因为显然他们能在一定条件下改变。

有什么建议吗?

回答

1

除非文件夹被删除然后重新创建,否则条目不会更改。但它不会是相同的文件夹 - 只是另一个可能具有相同名称的文件夹。 Outlook所做的是将特殊文件夹的入口标识存储在根IPM文件夹和/或收件箱文件夹中。 由于您无法在Exchange中设置文件夹的命名属性,因此无法挑选自己的属性标记而没有遇到冲突的风险,因此在收件箱文件夹(始终存在于默认存储区中)中创建隐藏消息并存储文件夹条目ID以及您可能需要的任何其他配置属性。为确保你的配置隐藏信息是唯一的,请选择一个独特的信息类,例如IPM.Note.MyCompany.MyAdddin.Config。 可以使用Outlook对象模型中的MAPIFolder.GetStorage或Redemption中的RDOFolder.HiddenItems来访问隐藏的消息。

+0

所以我现在使用EntryID来识别文件夹,但我不把它保存在隐藏的消息中;而是将其与AddIn的配置设置(存储在用户的应用程序数据配置文件夹中的文件中)保持在一起。不过,我会记住这个隐藏的消息技巧,以防万一我的方法无法正常工作。 –

相关问题