Допустимые символы в свойстве UserDefinedProperty Name

Я добавляю настраиваемое свойство НА УРОВНЕ ПАПКИ в Outlook 2010. Объект MAPIFolderFolder) имеет свойство с именем UserDefinedProperties, куда можно добавлять настраиваемые свойства, но проблема в том, что эти свойства не предназначены для хранения значений с ними. В качестве хака я сохранял значение свойства прямо в имени, разделяя их знаком РАВНО, например. Я бы добавил UserDefinedProperty, Name которого был бы чем-то вроде "MyProperty=123".

Теперь проблема в том, что иногда значение моего свойства содержит символы, которые не разрешены в Name. Например, у меня есть свойство, значение которого «Америка/Нью-Йорк». Эти два символа (косая черта и подчеркивание) не разрешены в Name, поэтому я получаю исключение.

Здесь мне нужен либо лучший способ хранения значения свойства на уровне папки, либо, альтернативно, список разрешенных символов в свойстве Name объекта UserDefinedProperty, чтобы я мог сделать какую-то замену.

Я использую C#, .NET Fx 4.0 и VSTO.


person dotNET    schedule 30.10.2012    source источник


Ответы (3)


Вы должны использовать 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 для папки , используя Subject в качестве key или используя MessageClass в качестве ключа в приведенном выше примере.

person SliverNinja - MSFT    schedule 30.10.2012
comment
это было бы отличным решением. можете ли вы подтвердить, работает ли он только с почтовыми ящиками Exchange или любой папкой Outlook в этом отношении? - person dotNET; 30.10.2012
comment
У меня нет почтовых ящиков, отличных от Exchange, чтобы протестировать его. Пожалуйста, отправьте ответ и сообщите нам об этом. Существуют также другие решения для хранения Outlook, которые могут вас заинтересовать, если это вам не подходит. - person SliverNinja - MSFT; 30.10.2012

Виноват. Я не прочитал сообщение об исключении полностью. В нем явно упоминаются недопустимые символы. Эти:

Квадратные скобки: [ и ]
Подчеркивание: _
Фунт: #

Тем не менее, если у кого-то есть лучшее представление о хранении свойств на уровне папки, опубликуйте их здесь.

person dotNET    schedule 30.10.2012

Согласно исключению, имя не может содержать специальные символы. Но стоимость свойства может:

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();
person Bikash Bk    schedule 28.08.2013