При использовании .ActiveInspector () извлекаемая «тема» составленной электронной почты иногда становится нулевой. - PullRequest
0 голосов
/ 02 июля 2019

Мы столкнулись с проблемой при написании надстройки VSTO Outlook.Получение темы составленной электронной почты работает нормально при выполнении ItemSend, но при попытке получить тему при составлении электронной почты (до ItemSend) полученная тема иногда оказывается нулевой.Это функция предварительного просмотра, которая запускается с помощью кнопки на ленте.

Установите точку останова, и похоже, что ActiveInspector (). CurrentItem уже не предоставляет правильное значение в качестве субъекта


Ribbon_TabNewMailMessage.cs:

    private void PreviewButton_Click(object sender, RibbonControlEventArgs e)
        {

            // pointing to ThisAddIn.cs (see code block below)
        if (Globals.ThisAddIn.Application.ActiveInspector() != null)
            {
                // Obviously sometimes not catching subject
                Outlook.MailItem mailItem = Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;

                // BAD CASE: mailItem.Subject is sometimes NULL
                var aSubj = mailItem.Subject;


ThisAddIn.cs:

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

            try
            {

                ...
                // Get the Application object
                Outlook.Application application = this.Application;

                // Subscribe to the ItemSend event, that it's triggered when an email is sent
                application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(ItemSend_BeforeSend);

                // new itemsend event
                void ItemSend_BeforeSend(object item, ref bool cancel)
                {

                   Outlook.MailItem mailItem = (Outlook.MailItem)item;

           // GOOD CASE: this one is working properly !!!   
           var bSubj = mailItem.Subject;

mailItem.Subject должен иметь значение из темы письма, но в ПЛОХОМ случае он возвращает NULL.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Метод Сохранить может помочь, если вам нужно получить последние изменения. Он сохраняет элемент Microsoft Outlook в текущей папке или, если это новый элемент, в папке Outlook по умолчанию для типа элемента.

Также вы можете переключить курсор на другое поле в окне, чтобы получить изменения, распространяемые на объектную модель Outlook. Outlook кэширует значения, пока курсор не будет перемещен в другое поле. Это известная проблема при работе с ООМ.

0 голосов
/ 02 июля 2019

Subject свойство не будет обновлено, пока фокус не сместится за пределы поля ввода Тема.

Вы можете попытаться найти окно редактирования HWND и использовать Windows API для получения его текста (GetWindowText и т. Д.).

...