Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| ms_windows_ms_sql:visual-studio_2017-community-vsto-outlook [2019/01/09 11:16] – [Добавляем файлы] 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**. | ||