Обработчики событий запускаются только один раз в надстройке Microsoft Office VSTO - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть надстройка VSTO Outlook 2016, на которой установлен только флажок.

Сценарий: При ответе на электронное письмо необходимо установить флажок.После отправки электронного письма я добавляю текст «mailItem.FlagRequest» в электронное письмо с надписью «Это электронное письмо является ответом по разрешению для дела».Когда отправленное электронное письмо открывается из Отправленных элементов Outlook, флажок должен оставаться установленным.

Проблема: При отправке электронного письма с установленным флажком, если я открываю письмо из Отправленных элементов- Я вижу флажок проверяется в первый раз в одиночку.Если я закрою письмо и открою снова, флажок снят.

Я пытался явно установить флажок, но он не будет проверен.

Код ссылки здесь:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System.Windows.Forms;

namespace OutlookAddIn5
{
    public partial class ThisAddIn
    {
        private Outlook.Inspectors _appInspectors;
        ThisRibbonCollection ribbonCollection;
        private Outlook.Explorer explorer;
        private Outlook.Application app;
        private Outlook.MailItem mailItem;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            explorer = this.Application.ActiveExplorer();
            app = (Outlook.Application)explorer.Application;

            _appInspectors = app.Inspectors;
            _appInspectors.NewInspector += new Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);

            this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }

        void Application_ItemSend(object Item, ref bool Cancel)
        {
            ThisRibbonCollection ribbonCollection;
            ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];
            if (ribbonCollection.Ribbon1.checkBox1.Checked)
            {
                Outlook.MailItem mi = Item as Outlook.MailItem;
                mi.FlagRequest = "This email is a resolution response for the case";
                mi.Save();
            }
        }

        void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
        {
            mailItem = Inspector.CurrentItem as Outlook.MailItem;
            ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];
            if (!string.IsNullOrEmpty(mailItem.FlagRequest) && mailItem.FlagRequest.Contains("This email is a resolution response for the case"))
            {
                ribbonCollection.Ribbon1.checkBox1.Checked = true;
                ribbonCollection.Ribbon1.checkBox1.Enabled = false;
                ribbonCollection.Ribbon1.checkBox1.Visible = true;               
            }
            else
            {
                //   Globals.Ribbons.Ribbon1.checkBox1.Visible = false;
                ribbonCollection.Ribbon1.checkBox1.Checked = false;
                ribbonCollection.Ribbon1.checkBox1.Enabled = true;
                ribbonCollection.Ribbon1.checkBox1.Visible = false;              
            }           
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            // Note: Outlook no longer raises this event. If you have code that 
            //    must run when Outlook shuts down, see http://go.microsoft.com/fwlink/?LinkId=506785
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }        
        #endregion
    }
}

1 Ответ

0 голосов
/ 20 сентября 2019

Вам необходимо предоставить обработчик событий для вашего флажка управления.Когда событие запускается, задайте пользовательское свойство в MailItem (или свойство FlagRequest)

Когда элемент открыт (событие Inspectors.NewInspector), явно обновите ленту.Когда Outlook вызывает обратный вызов для проверенного состояния флажка, возвращает значение на основе пользовательского свойства (или FlagRequest в вашем случае).

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