1

我在 Outlook 2010 的文件夹级别添加了一个自定义属性。MAPIFolder(和Folder)对象有一个名为的属性UserDefinedProperties,可以在其中添加自定义属性,但问题是这些属性并不意味着与它们一起存储值。作为一个黑客,我通过用等号分隔两者来将属性值存储在名称中,例如我会添加一个UserDefinedProperty类似于Name“MyProperty = 123”的东西。

现在的问题是,有时我的属性值包含Name. 例如,我有一个值为“America/New_York”的属性。中不允许使用这两个字符(斜杠和下划线)Name,因此出现异常。

我在这里需要的是在文件夹级别存储属性值的更好方法,或者Name是对象属性中允许的字符列表UserDefinedProperty,以便我可以进行某种替换。

我正在使用 C#、.NET Fx 4.0 和 VSTO。

4

3 回答 3

1

我的错。我没有完全阅读异常消息。它明确提到了非法字符。这些都是:

方括号: [ 和 ]
下划线:_
:#

如果有人对存储文件夹级别属性有更好的想法,请在此处发布。

于 2012-10-30T12:55:59.297 回答
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;
}

您可以在上面的示例中使用作为键或使用作为键来管理StorageItems文件夹。SubjectMessageClass

于 2012-10-30T13:52:50.620 回答
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();
于 2013-08-28T11:08:46.223 回答