Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
ms_windows_ms_sql:visual-studio_2017-community-vsto-outlook [2018/10/24 08:57] – [Задача] admin | ms_windows_ms_sql:visual-studio_2017-community-vsto-outlook [2019/02/11 09:13] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Задача ====== | ||
+ | Нужно реализовать всплывающее окно в **Outlook 2016**, если число получателей письма больше одного. \\ | ||
+ | Вот что получилось. {{ : | ||
+ | ====== Средства ====== | ||
+ | **Visual Studio 2017 Community Edition** + **VSTO** (Visual Studio Tools for Office). \\ | ||
+ | **Tools** -> **Get Tools And Features** -> вкладка **Workloads** -> ставим галочку на **Office/ | ||
+ | после установки открываем **Visual Studio**. \\ | ||
+ | **File** -> **New** -> **Project** -> слева **Installed** -> **Visual C#** -> **Office/ | ||
+ | ====== Алгоритм ====== | ||
+ | Для начала я попытаюсь реализовать самый простой вариант. \\ | ||
+ | При нажатии кнопки **Send** моя надстойка будет проверять количество реципиентов. Если их больше 1 - показываем диалоговое окно с вопросом " | ||
+ | |||
+ | ====== Реализация ====== | ||
+ | Реализацию нашел в книжке: | ||
+ | < | ||
+ | using System; | ||
+ | using Outlook = Microsoft.Office.Interop.Outlook; | ||
+ | using System.Windows.Forms; | ||
+ | using Microsoft.Office.Interop.Outlook; | ||
+ | |||
+ | namespace Multiple_Recipients_PopUP | ||
+ | { | ||
+ | public partial class ThisAddIn | ||
+ | { | ||
+ | private void ThisAddIn_Startup(object sender, System.EventArgs e) | ||
+ | { | ||
+ | this.Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); | ||
+ | } | ||
+ | |||
+ | 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 https:// | ||
+ | } | ||
+ | |||
+ | void Application_ItemSend(object Item, ref bool Cancel) | ||
+ | { | ||
+ | Outlook.MailItem currentMailItem = Item as Outlook.MailItem; | ||
+ | |||
+ | if (currentMailItem != null) | ||
+ | { | ||
+ | if (currentMailItem.Recipients.Count > 1) | ||
+ | { | ||
+ | string message = "Send mail to {0} people?"; | ||
+ | string caption = "More than one recipient..."; | ||
+ | MessageBoxButtons buttons = MessageBoxButtons.YesNo; | ||
+ | DialogResult result; | ||
+ | result = MessageBox.Show(String.Format(message, | ||
+ | |||
+ | if (result == DialogResult.No) | ||
+ | { | ||
+ | Cancel = true; | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | #region VSTO generated code | ||
+ | |||
+ | /// < | ||
+ | /// Required method for Designer support - do not modify | ||
+ | /// the contents of this method with the code editor. | ||
+ | /// </ | ||
+ | private void InternalStartup() | ||
+ | { | ||
+ | this.Startup += new System.EventHandler(ThisAddIn_Startup); | ||
+ | this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); | ||
+ | } | ||
+ | | ||
+ | #endregion | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ====== Проверка того, что все работает ====== | ||
+ | Жмем **Build** -> **Publish** ... \\ | ||
+ | Выбираем папку, куда опубликуется наша надстройка и выбираем тип - я выбрал CD-ROM. \\ | ||
+ | В результате в выбранной папке появится файлик **setup.exe** и файлы надстройки, | ||
+ | |||
+ | ====== Развертывание ====== | ||
+ | [[https:// | ||
+ | Разворачивать полученную надстройку можно либо с помощью **Cick-Once**, | ||
+ | Как написано [[https:// | ||
+ | ===== Развертывание с помощью Visual Studio Installer ===== | ||
+ | Скачиваем и устанавливаем [[https:// | ||
+ | В **Solution Explorer** жмакаем правой кнопкой по солюшену и создаем новый проект - **Add -> New Project... -> Other Project Types -> Visual Studio Installer -> Setup Project**. \\ | ||
+ | Нам надо добавить файлы надстройки и записи в реестре. \\ | ||
+ | |||
+ | ==== Добавляем файлы ==== | ||
+ | В **Solution Explorer** жмакаем правой кнопкой по проекту -> **Add -> Project Output...** \\ | ||
+ | Там в поле **Project** выбран наш единственный проект, | ||
+ | В результате в проект инсталлятора добавится **dll** нашей надстройки и необходимые зависимости. \\ | ||
+ | Кроме того, надо добавить файлы ***.vsto** и ***.manifest**, | ||
+ | В **Solution Explorer** жмакаем правой кнопкой по проекту -> **Add -> File...** и находим файлы ***.vsto** и ***.manifest** из папки **bin\Release**. \\ | ||
+ | В **Solution Explorer** жмакаем правой кнопкой по проекту -> **View -> File System**. \\ | ||
+ | Кликаем по **Application Folder** и справа в строке **DefaultLocation**указываем путь установки. Обычно это **[ProgramFilesFolder][Manufacturer]\[ProductName]**, | ||
+ | ==== Добавляем записи в реестр ==== | ||
+ | В **Solution Explorer** жмакаем правой кнопкой по проекту -> **View -> Registry**. | ||
+ | Дальше делаем в соответствии с этим - [[https:// | ||
+ | В окошке **Registry On target Machine** добавляем ключи: **HKLM\Software\Microsoft\Office\Outlook\Addins\Multiple_Recipients_PopUP** \\ | ||
+ | И добавляем описанные параметры. \\ | ||
+ | Путь к манифесту задаем как **[ProgramFilesFolder][Manufacturer]\[ProductName]\...** \\ | ||
+ | В качестве манифеста указываем файл **vsto** из корня. На сборочной машине у меня файл реестра был указан как **filename.vsto|vstolocal**. При разворачивании | ||
+ | Правильные значения этих параметров можно поглядеть на компе на котором собиралась и тестировалась надстройка. | ||
+ | |||
+ | ==== Выбираем установку для всех пользователей ==== | ||
+ | В **Solution Explorer** кликаем по проекту и справа в окне свойств меняем значение поля **InstallAllUsers** на **True**. | ||
+ | |||
+ | |||
+ | ====== Публикация с помощью политик GPO ====== | ||
+ | https:// | ||
+ | |||
+ | ====== Тестирование и отладка ====== | ||
+ | В моем случае - после того как я проверил работу моей надстройки на своей машине, | ||
+ | Для того, чтобы посмотреть какую ошибку выдает надстройка при запуске нужно: | ||
+ | * открыть окошко cmd и задать переменной **VSTO_SUPPRESSDISPLAYALERTS** значение **0** | ||
+ | < | ||
+ | *Запустить **Outlook** из этого окошка. | ||
+ | < | ||
+ | Затем в **Outlook -> File -> Options -> Add-Ins -> Manage COM Add-ins Go...** -> ставим галочку на оснастке и жмем **OK**. В результате появится окно с сообщением и кнопкой **Details**. |