Как определить «мою» пользовательскую папку в надстройке Outlook - PullRequest
2 голосов
/ 20 января 2012

Я пытаюсь разработать AddIn - или, точнее, пока просто концептуальное доказательство, чтобы увидеть, возможно ли то, что я имею в виду, вообще возможно - для Outlook (если быть точным, 2010), в. NET / C #, и я столкнулся со следующей проблемой:

Предполагается, что надстройка предлагает новую пользовательскую папку (на верхнем уровне иерархии, то есть рядом со всеми другими основными элементами, такими как задачи, календарь, контакты и т. Д.), В которой можно предлагать элементы пользователю. Поэтому я решил, что в методе запуска AddIn я мог бы просто сделать что-то вроде

Outlook.Folder parent = inBox.Parent as Outlook.Folder;
Outlook.Folder myCustomFolder = (Outlook.Folder)parent.Folders.Add("My Custom Folder");

... и это на самом деле работает. Однако после выхода из Outlook и его повторного запуска возникает проблема. Поскольку папка сохраняется в Outlook, она все еще там, когда Outlook снова запустит и инициализирует AddIn, поэтому создание папки завершится неудачно, поскольку объект с таким именем уже существует. Но я никак не могу понять, что это «моя» папка с прошлого раза.

Я не хочу полагаться на ее имя для идентификации папки (это слишком ненадежно даже для рассмотрения; пользователи могут захотеть переименовать ее, могут существовать другие надстройки, создающие папку с той же самой имя, не говоря уже о проблемах локализации и т. д.), но что еще я могу использовать, чтобы определить, что пользовательская папка уже создана?

Мне нужно было бы либо каким-либо образом добавить «тег» в папку, чтобы позже я мог распознать его как «мой», либо, в качестве альтернативы, потребовался бы некоторый идентификатор, который однозначно идентифицирует папку (и который остается постоянным даже между запусками Outlook!), чтобы я мог это узнать.

Я просматривал поля EntryID и StoreID объекта [MAPI]Folder, но из (к сожалению, не очень подробного) описания в MSDN я не уверен, могу ли я положиться на них потому что, по-видимому, они могут измениться при определенных условиях.

Есть предложения?

1 Ответ

1 голос
/ 20 января 2012

Если папка не удалена, а затем создана заново, запись не изменится. Но в любом случае это будет не та же папка - просто еще одна папка с таким же именем. Что делает Outlook, так это хранит значения записей специальных папок в корневой папке IPM и / или папке «Входящие». Поскольку вы не можете установить именованные свойства для папки в Exchange, и вы не можете просто выбрать свой собственный тег свойства, не рискуя столкнуться с конфликтом, создайте скрытое сообщение в папке «Входящие» (которое всегда присутствует в хранилище по умолчанию) и сохраните идентификатор записи папки. наряду с любыми другими свойствами конфигурации, которые вам могут понадобиться. Чтобы убедиться, что ваше скрытое сообщение конфигурации является уникальным, выберите уникальный класс сообщений, например, IPM.Note.MyCompany.MyAdddin.Config. Доступ к скрытым сообщениям можно получить с помощью MAPIFolder.GetStorage в объектной модели Outlook или RDOFolder.HiddenItems в погашении.

...