我在Outlook 2010中添加自定义属性AT FOLDER LEVEL。MAPIFolder
(和Folder
)对象有一个名为UserDefinedProperties
的属性,其中可以添加自定义属性,但是问题是这些属性并不意味着用它们存储值。作为一个黑客,我将属性值存储在名称中,方法是将两者用EQUAL符号分开,例如我添加UserDefinedProperty
Name
类似于" MyProperty = 123"。
现在的问题是,有时我的属性的值包含Name
中不允许的字符。例如,我有一个属性值为#34; America / New_York"。 Name
中不允许使用这两个字符(斜线和下划线),因此我得到了一个例外。
我需要的是在文件夹级别存储属性值的更好方法,或者是Name
对象的UserDefinedProperty
属性中允许的字符列表,这样我就可以做某种替代。
我使用的是C#,.NET Fx 4.0和VSTO。
答案 0 :(得分:1)
我的坏。我没有完全阅读异常消息。它明确提到了非法字符。这些是:
括号: [和]
下划线:_
磅:#
如果有人对存储文件夹级属性有更好的了解,请在此处发布。
答案 1 :(得分:0)
您应该使用StorageItem
来管理文件夹级别的状态。用户视图中隐藏了StorageItems
,允许您使用Exchange邮箱项保持状态。
StorageItem
密钥MessageClass
保留文件夹状态
Outlook.StorageItem folderState = folder.GetStorage("IPM.Storage.MyCustomStore", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);
if (folderState.Size == 0) // no state exists
{ // save state
folderState.UserProperties.Add("CustomKey1", Outlook.OlUserPropertyType.olText).Value = "America/New_York";
folderState.Save();
}
else // state exists
{ // read state
string propVal = folderState.UserProperties["CustomKey1"].Value;
}
您可以管理文件夹using Subject
as a key的StorageItems
或上述示例中使用MessageClass
作为关键字。
答案 2 :(得分:0)
根据例外情况,名称不能包含特殊字符。但是财产的价值可以:
Outlook.Folder folder = Application.GetNamespace("MAPI").Folders[1] as Outlook.Folder;
Outlook.StorageItem storageItem = folder.GetStorage("ABCDE", Outlook.OlStorageIdentifierType.olIdentifyBySubject);
Outlook.UserProperty property = null;
foreach (Outlook.UserProperty p in storageItem.UserProperties)
{
if (p.Name == "PropertyName")
property = p;
}
if (property == null)
{
property = storageItem.UserProperties.Add("PropertyName", Outlook.OlUserPropertyType.olText, false, Outlook.OlDisplayType.olUser);
}
property.Value = "my_value_can_contain[brackets]";
storageItem.Save();