我正在创建Microsoft Outlook加载项(Visual Studio 2012,C#,COM加载项,无VSTO,Outlook 2010/2013/2016),其中1)用户必须能够撰写和阅读必须的各种字段当邮件离开/进入Microsoft Exchange时,映射到/从MIME标头,以及2)字段必须作为要使用的本机Outlook字段可用,例如作为Outlook视图中的列,搜索表达式等中的列
要获取1),PS_INTERNET_HEADERS命名空间中的加载项读写(MAPI)字段。首次加载外接程序时,它会创建一个虚拟隐藏消息,以确保Exchange强制在MIME标头和MAPI属性之间进行传入消息的映射(解决Named Properties, X-Headers, and You中描述的问题)。这很好。
要获得2),我创建了一个老式的Outlook表单配置文件(Creating a Form Configuration File),其条目如下:
[Property.MMHSFoo]
Type=31
NmidPropset={00020386-0000-0000-C000-000000000046}
NmidString=MMHS-Foo
DisplayName=Foo
然后我使用Outlook Redemption在加载项加载时注册表单。现在,用户可以将字段Foo用作其他Outlook字段。
现在,我的问题是,当我使用Outlook表单设计器创建表单区域时,如果我尝试添加字段Foo,则会收到错误消息“操作失败”。如果我将NmidPropset值从PS_INTERNET_HEADERS(00020386-0000-0000-C000-000000000046)更改为PS_PUBLIC_STRINGS(00020329-0000-0000-C000-000000000046),我可以添加字段Foo,但是1)不起作用。
因此我的问题是:如何将名称空间PS_INTERNET_HEADERS中的字段添加到Outlook表单区域,以满足要求1)和2)?
答案 0 :(得分:0)
首先,对于(1),您不需要创建任何消息 - 只需在任何商店对象(IMsgStore,IMAPIFolder,IMessage等)上调用GetIDsFromNames(... MAPI_CREATE)。
对于(2),我认为该表单不会与PS_PUBLIC_STRINGS一起使用。为什么不创建任务窗格并在代码中显式填充其内容?