Как мне обрабатывать объекты VSTO outlook, как если бы они были mailitems - PullRequest
0 голосов
/ 15 ноября 2010

Я написал некоторый код VSTO (2003), который успешно применяет некоторые обязательные изменения строки темы в соответствии с вложениями почтовых отправлений. Код написан для работы с microsoft.office.interop.outlook.mailitem. Однако мне нужен тот же код для работы с другими типами, такими как, например, microsoft.office.interop.outlook.appointmentitem (на самом деле он должен работать для всего, что Пользователь может отправить, что бы иметь тему).

Если предположить, что у типов элементов Outlook есть свойство субъекта, свойство вложений и метод сохранения, как мне подойти к написанию кода, который работает для всех соответствующих типов interop.outlook.

Я пытался решить эту проблему с помощью отражения, но GetProperty возвращает ноль, поэтому я не могу использовать GetValue для него

? mi.GetType().GetProperty("Subject")
null

?(mi as Microsoft.Office.Interop.Outlook.MailItem).Subject
"Test Subject"

похоже, что нет общего класса outlookitem, который я мог бы использовать для этого. Какой правильный подход?

EDIT: Чтобы уточнить мой код начинается так ...

    void Application_ItemSend(object Item, ref bool Cancel) 
    {
            if (Item is Microsoft.Office.Interop.Outlook.MailItem) 
            {
                Microsoft.Office.Interop.Outlook.MailItem currentItem = 
                    Item as Microsoft.Office.Interop.Outlook.MailItem;

затем выполняет работу с currentItem (включая передачу в различные функции, в настоящее время набираемые с помощью свойств Microosft.Office.Interop.Outlook.MailItem. Я хочу, чтобы они обрабатывали «Microsoft.Interop.Outlook.somethingsendable»

1 Ответ

4 голосов
/ 15 ноября 2010

Это не сработает из коробки - AppointmentItem и MailItem - это совершенно разные интерфейсы, поэтому полиморфизм не возможен.

Лучшее, что я могу предложить, - это создать собственный класс SendableItem, чтобы обернуть интерфейсы PIA, которые вам необходимо поддерживать, и инкапсулировать там код переключения за общей оболочкой для «общих» операций, которые вы хотите использовать , Вы бы создали SendableItem, используя MailItem или AppointmentItem, но после создания они выглядят одинаково снаружи SendableItem оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...