UserDefinedProperty的Name属性中允许的字符

时间:2012-10-30 12:42:32

标签: c# outlook vsto outlook-addin outlook-2010

我在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。

3 个答案:

答案 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 keyStorageItems或上述示例中使用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();