Пользовательский интерфейс Office
Новые функции VSTO упрощают настройку программ Word и Outlook
Стив Фокс (Steve Fox) and Пол Стаббс (Paul Stubbs)
Данная статья основана на предварительном выпуске набора средств Microsoft Visual Studio для системы Microsoft Office. В любую содержащуюся в ней информацию могут быть внесены изменения
В статье рассматривается:
- Новые возможности VSTO «Orcas» бета-версии 1
- Использование конструктора Ribbon для документов Office
- Настройка Ribbon с помощью XML
- Привязка данных с помощью элементов управления содержимым Word
- Использование VSTO для создания пользовательских областей форм Outlook
Продукты и технологии:
VSTO, Office, Visual Studio
Система 2007 Microsoft® Office эволюционировала в надежную платформу бизнес-приложений, которую можно использовать для создания и развертывания ряда бизнес-приложений на основе Office (OBA). Бизнес-приложения на основе Office – это развивающийся класс приложений для решения практических задач и важных проблем бизнеса. Приложения создаются с помощью эффективной интеграции существующего программного обеспечения и служб Office (Microsoft Office Word, Службы Excel® и SharePoint® Server) с бизнес-системами, например SAP. Объедините мощность и расширяемость системы Office с предстоящим в этом году выпуском Visual Studio® (кодовое название «Orcas»), и вы получите невероятно надежную связку технологий. В этой статье описывается использование профессиональными разработчиками набора средств Microsoft Visual Studio для системы Microsoft Office (VSTO) для создания мощных пользовательских приложений для системы 2007 Microsoft Office.
Обзор VSTO
VSTO – это мощный набор инструментов и функций, позволяющий разработчикам расширять и настраивать приложения Microsoft Office с помощью Visual Basic® и C#. Выпуск VSTO под названием «Orcas» предоставит разработчикам еще большую мощность. Он включает интеграцию разработки управляемого кода с Microsoft Office и Microsoft Office SharePoint с использованием уникальных и замечательных способов. Он также содержит визуальный конструктор Ribbon для настройки Ribbon в Office и программирования с использованием простой модели программирования наподобие Windows® Forms.
Более того, VSTO предоставляет возможность простого расширения форм Microsoft Office Outlook® с помощью визуального конструктора с поддержкой элементов управления Windows Forms и Windows Presentation Foundation и возможностью импорта форм, состоящих из встроенных элементов управления Outlook. Кроме того, рабочий процесс SharePoint на языках C# или Visual Basic теперь поддерживает быструю разработку приложений в Visual Studio. В состав VSTO входят визуальный конструктор рабочего процесса и новая поддержка быстрой разработки и отладки пользовательского рабочего процесса на сервере SharePoint, что может ускорить выполнение трудоемкого процесса, состоящего из 15 этапов и длящегося несколько дней, всего до нескольких нажатий кнопок в мастере.
Кроме того, в состав VSTO входят визуальные конструкторы для программ Word 2007 и Excel 2007, появляющиеся внутри среды IDE Visual Studio. Это позволяет документам выступать в качестве визуальной области проектирования, что упрощает создание мощных решений на основе документов. В VSTO также доступны возможности создания документов Word 2007 с помощью новых элементов управления содержимым Word с полной поддержкой привязки данных в стиле ADO.NET, перетаскивания из окна источников данных и сетки свойств.
В этой статье рассматривается ряд функций из приведенного выше набора. В частности, показана настройка Ribbon в Office, добавление элементов управления содержимым Word в Microsoft Office Word 2007, интеграция настроенной Ribbon с элементами управления содержимым и создание областей форм Outlook. Очевидно, это только несколько функций Visual Studio «Orcas», но они рассматриваются в данной статье, поскольку войдут в выпуск бета 1, который будет доступен на время публикации этого материала.
Настройка пользовательского интерфейса Office с помощью конструктора Ribbon
В VSTO «Orcas» существует два способа настройки Ribbon в Office. Первый способ сходен с Microsoft Visual Studio 2005 Tools for Office Second Edition (VSTO 2005 SE), то есть с помощью определения и класса XML можно определить элементы Ribbon, а затем привязать их к обработчикам событий (через код обратного вызова). Поскольку вы, вероятно, знакомы с этим способом, мы более подробно рассмотрим второй способ настройки Ribbon в Office в VSTO «Orcas»: конструктор Ribbon. (Если вас интересует настройка Ribbon в VSTO 2005 SE, см. статью «Основы передовых технологий» Кена Гетца в этом выпуске журнала MSDN® Magazine.)
Конструктор Ribbon, включающий визуальный конструктор и расширяемую объектную модель, упрощает создание, настройку и отладку пользовательского интерфейса Ribbon для разработчиков. Как и в других визуальных конструкторах, можно перетаскивать элементы управления на рабочую область, устанавливать свойства в окне свойств и просто создавать обработчики событий для новых элементов Ribbon, дважды щелкнув элемент управления. Более того, обратные вызовы Office сопоставлены событиям объектов Ribbon в VSTO, поэтому вместо методов обратных вызовов создаются обработчики событий. В качестве примера рассмотрим настройку Ribbon для Word 2007.
Для начала создадим новый проект Word 2007 в узле C# или Visual Basic Office и назовем его WordRibbonExample. После создания проекта Visual Studio автоматически создает ряд файлов ресурсов проекта. В корневом файле проекта (WordExample.cs) щелкните правой кнопкой мыши и выберите «Add New Item | Ribbon (Visual Designer)» (Добавить новый элемент | Ribbon (визуальный конструктор)). Можно ввести имя для Ribbon или оставить имя по умолчанию. Будет создана пользовательская Ribbon по умолчанию, в которую можно добавить элементы.
Конструктор Ribbon поддерживает перетаскивание, поэтому можно перетаскивать элементы управления со вкладки «Office Ribbon Controls» (Элементы управления ленты Office) панели инструментов. Выпуск Beta 1 VSTO «Orcas» поддерживает следующие элементы управления Ribbon: вкладки, группы и кнопки. Поддерживаемые приложения Office – Word 2007, Excel 2007, PowerPoint® 2007 и Outlook 2007.
В следующем примере мы добавили три группы (для элементов управления Ribbon группы должны быть контейнерами) на вкладку Ribbon под названием «My Custom Tab» (Моя вкладка). Во все группы мы добавили кнопки и изображения. На рис. 1 показана правка свойств элемента управления.
.gif)
Рис. 1 Конструктор Ribbon (Щелкните изображение, чтобы увеличить его)
Типичная настройка Ribbon в VSTO состоит из одного или нескольких объектов «Ribbon», содержащих один или несколько объектов «Tab» (Вкладка) с одним или несколькими объектами «Group» (Группа) и т.д. Таким образом, настройка VSTO конструируется в определенной иерархической структуре объектов Ribbon. Например, на концептуальной диаграмме на рис. 2 показано, что элементом управления самого верхнего уровня должна быть вкладка. Затем на вкладку можно добавить одну или несколько групп; а в группы можно добавить одну или несколько кнопок, выключателей или меню, хотя глубина вложенности отдельного меню может составлять не более пяти уровней.
.gif)
Рис. 2 Иерархия элементов управления
После завершения сборки настроенной Ribbon к элементам управления можно добавить обработчики событий. Добавление обработчика событий к отдельному элементу управления Ribbon осуществляется практически так же, как и добавление других элементов управления: после двойного щелчка элемента управления Visual Studio автоматически добавит событие щелчка и откроет исходный код для ввода кода обработчика события. Например, если имеется кнопка под названием testButtonOne, можно дважды щелкнуть кнопку в конструкторе, и в представлении кода откроется событие testButtonOne_click, в котором можно ввести код обработки события, например следующий:
private void testButtonOne_click(
object sender, RibbonControlEventArgs e)
{
// Simple message box to illustrate click event.
testButtonOne.label = “New Label”;
MessageBox.Show(testButtonOne.label);
}
Настройка сложных вариантов Ribbon с помощью XML
В VSTO 2005 SE настройка Ribbon в Office осуществлялась с помощью файла XML посредством выбора «Ribbon Support» (Поддержка Ribbon) при добавлении в проект нового элемента. При этом автоматически создавался класс Ribbon, используемый для загрузки настраиваемого интерфейса пользователя, и файл XML Ribbon, определяющий настроенный интерфейс пользователя. На рис. 3 показан код XML по умолчанию в элементе «Ribbon Support» (Поддержка Ribbon).
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui” onLoad=”OnLoad”>
<ribbon>
<tabs>
<tab idMso=”TabAddIns”>
<group id=”MyGroup”
label=”My Group”>
<toggleButton id=”toggleButton1”
size=”large”
label=”My Button”
screentip=”My Button Screentip”
onAction=”OnToggleButton1”
imageMso=”HappyFace” />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
В проект также добавляются элементы по умолчанию для упрощения настройки пользовательского интерфейса, например кнопка-переключатель, вызывающая окно сообщения при ее нажатии пользователем, код обратного вызова для создания обработчиков событий для пользовательского интерфейса и вспомогательный код.
Хотя новый конструктор Ribbon позволяет выполнять общие задачи настройки Ribbon, он не поддерживает более сложные ситуации (такие как повторное использование встроенных команд или работа с менее распространенными элементами управления). При необходимости настройки пользовательского интерфейса Office по умолчанию или использования типов элементов управления, недоступных в конструкторе, следует использовать настройку Ribbon с помощью XML. В качестве отправной точки можно использовать элемент «Ribbon (XML)» или конструктор, затем экспортировать данные Ribbon в формат XML и продолжить определение настраиваемого интерфейса пользователя с помощью XML, но имейте в виду, что экспорт является одноразовым. Затем необходимо вручную определить форматы вызова функций обратного вызова и перенести написанный для конструктора код обработчика событий.
Элементы управления содержимым VSTO для Word
Хотя настройка Ribbon позволяет создавать и переносить настраиваемый интерфейс пользователя на уровне приложения, элементы управления содержимым VSTO для Word позволяют очень просто настраивать документ или шаблон для создания более структурированных и сложных документов. С помощью функции перетаскивания можно добавлять элементы управления в шаблоны Word 2007, создавать в этих элементах управления бизнес-логики, защищать элементы управления содержимым от изменения и удаления пользователем и добавлять простую привязку данных в локальные базы данных и базы данных предприятия. Поскольку VSTO предоставляет мощные функции настройки (такие как настройка области задач), можно представить ситуацию, в которой документ становится интерфейсом для корпоративных данных, а область задач (или настраиваемая Ribbon) используется для добавления элементов управления содержимым в документ Word 2007.
Используя элементы управления содержимым, создадим простой шаблон Word, который может автоматически создаваться с помощью данных клиентской базы данных, и добавим Ribbon, позволяющую конечному пользователю просматривать данные в базе данных. Созданный документ показан на рис. 4.
.gif)
Рис. 4 Пример приглашения
Сначала необходимо создать решение, позволяющее конечным пользователям настраивать шаблон Word с помощью выбора содержимого предварительно определенных областей на основе данных клиентской базы данных. Необходимо создать новый проект в Visual Studio, затем в Visual Basic или C# выбрать Office и затем шаблон документа Word 2007. В IDE Visual Studio откроется пустой документ Word, а на панели управления появятся элементы управления содержимым, как показано на рис. 5.
.gif)
Рис. 5 Элементы управления Word
С помощью оболочки проекта можно добавлять элементы управления в текст документа. Хотя добавление элементов управления – это великолепно, также необходима некая структура документа. Для создания шаблона данного документа можно создать шаблон в среде Visual Studio или загрузить предварительно определенный шаблон. В этом примере мы сначала добавили текст по умолчанию, выступающий в качестве шаблона приглашения, а затем добавили пять элементов управления содержимым (перетащив их с панели инструментов в текст документа). Мы добавили элемент управления RichTextContentControl для названия компании, адреса компании и получателя и элемент DatePickerContentControl для даты и даты ответа. После размещения элементов управления (сходных с другими элементами управления Visual Studio) в документе можно настроить их свойства в окне «Properties» (Свойства). На рис. 4 показаны добавленные элементы управления, позволяющие пользователям просматривать клиентскую базу данных (при подключении к обработчикам событий просмотра данных).
Если вы следили за описываемыми действиями, нажмите клавишу F5 для сборки и запуска вашего решения. Поскольку элементы управления не были подключены к какой-либо существующей базе данных, отсутствуют данные для заполнения этих полей. Поэтому закройте документ Word без сохранения и вернитесь в среду Visual Studio.
После размещения элементов управления в документе можно установить ссылку на определенный источник данных и установить привязку элементов управления к нему. В этом примере мы создали очень простую клиентскую базу данных Microsoft Office Access™ под названием CustomerDatabase. База данных состоит из одной таблицы с шестью столбцами: ID, CompanyName, CompanyAddress, ContactName, CurrentDate и ResponseDate. Создание ссылки выполняется очень просто. Для привязки элементов управления к определенным записям базы данных используется мастер Data Source Configuration Wizard (Мастер настройки источников данных).
Для начала откройте меню «Data» (Данные) и выберите «Add a New Data Source» (Добавить новый источник данных). Появится запрос мастера Data Source Configuration Wizard (Мастер настройки источников данных) на осуществление выбора. Выберите «Database» (База данных) и нажмите кнопку Далее. В следующем диалоговом окне выберите «New Connection» (Новое подключение), а затем в диалоговом окне «Add Connection» (Добавление подключения) выберите источник данных по умолчанию (которым является «Access») и базу данных Access. Затем появится запрос на выбор таблиц и представлений, которые необходимо привязать к проекту. Если вы создали такую же базу данных, как и мы, выберите таблицу CustomerInfo и снимите флажок «Views» (Представления). На рис. 6 показано данное диалоговое окно.
.gif)
Рис. 6 Диалоговое окно «Choose Your Database Objects» (Выбор объектов базы данных) (Щелкните изображение, чтобы увеличить его)
По завершении этого этапа нажмите кнопку «Готово». На основе предоставленной информации Visual Studio автоматически создает набор данных, адаптер таблицы и источник привязки – элементы, необходимые для привязки элементов управления к данным и программного управления записями в базе данных. В этом примере среда Visual Studio автоматически дала этим элементам следующие названия: customerDatabaseDataSet, customerInfoTableAdapter и customerInfoBindingSource.
Теперь, после подключения к проекту базы данных, необходимо привязать данные к определенным элементам управления. Это можно сделать с помощью свойства «Data binding» (Привязка данных) окна «Properties» (Свойства) (см. рис. 7). Выберите «Text» (Текст),затем выберите определенную запись базы данных, которую необходимо привязать к элементу управления содержимым. (Также можно перетащить определенные элементы данных с панели инструментов на элемент управления, к которому необходимо привязать данные.)
.gif)
Рис. 7 Свойство «Data Binding» (Привязка данных) (Щелкните изображение, чтобы увеличить его)
Теперь, когда записи клиентской базы данных подключены ко всем элементам управления содержимым, давайте настроим Ribbon и добавим к новым настраиваемым кнопкам обработчики событий, чтобы конечные пользователи могли просматривать клиентскую базу данных. Можно использовать конструктор Ribbon для создания двух кнопок («Next» (Далее) и «Previous» (Назад)) и окно «Properties» (Свойства) для установки свойств вкладки, кнопок и группы кнопок, а также сопоставления точечных рисунков кнопкам. Настроенная Ribbon может выглядеть так, как показано на рис. 8.
.gif)
Рис. 8. Кнопки просмотра данных
Последним этапом является добавление ко всем кнопкам обработчиков событий, чтобы конечные пользователи могли просматривать клиентскую базу данных. Для этого дважды щелкните каждую кнопку и добавьте код для просмотраа пользователем базы данных. При двойном щелчке кнопки откроется представление кода для класса Ribbon, позволяющее добавить код обработчика событий. В приведенном ниже коде используется объект Globals для доступа к документу, привязке источника к клиентской базе данных и методам MoveNext и MovePrevious.
private void button1_OnAction(
object sender, ControlEventArgs e)
{
Globals.ThisDocument.customerInfoBindingSource.MoveNext();
}
private void button2_OnAction(
object sender, ControlEventArgs e)
{
Globals.ThisDocument.customerInfoBindingSource.MovePrevious();
}
После подключения настроенных кнопок к элементам управления содержимым можно нажать клавишу F5 для сборки и запуска решения, а также для проверки выполненной интеграции настроенной Ribbon с элементами управления содержимым. После запуска решения щелкните вкладку «Customer Data» (Данные клиента) для просмотра только что добавленных настроенных кнопок Ribbon. Кнопки в правом верхнем углу документа, как показано на рис. 9, используются для просмотра данных с помощью загрузки определенных записей в элементы управления содержимым документа при нажатии кнопок.
.gif)
Рис. 9 Просмотр данных клиента в письме
Эта ситуация является простой, но довольно практичной. Она показывает использование конструктора Ribbon и элементов управления содержимым Word для создания автоматизированного приложения для загрузки и создания персонализированных приглашений для отдельных клиентов. После того, как вы более подробно изучите разработку для системы 2007 Microsoft Office с помощью VSTO, вы узнаете способы расширения этой ситуации и создания более сложных специальных приложений. Теперь рассмотрим области форм Outlook.
Области форм Outlook
Outlook 2007 позволяет создавать области форм, которые можно использовать для отображения сведений о почтовом сообщении, контакте и каких-либо иных элементах Outlook. Например, при получении сообщения электронной почты от клиента можно найти этого клиента в вашей системе и отобразить в области формы журнал его заказов. При открытии элемента контакта в области формы можно отобразить адрес контакта. В этом разделе вы создадите область формы для добавления замечаний о почтовых сообщениях. Эти замечания вводятся и отображаются в области формы под сообщением и сохраняются в качестве невидимых вложений сообщения (см. рис. 10).
.gif)
Рис. 10. Область формы Outlook 2007 (Щелкните изображение, чтобы увеличить его)
Создание области формы Outlook 2007 можно начать с проекта Visual Basic или C#. Добавление области формы осуществляется простым добавлением нового элемента области формы Outlook. Щелкните проект правой кнопкой мыши, затем выберите «Add New Item» (Добавление нового элемента). В диалоговом окне «Add New Item» (Добавление нового элемента) выберите «Outlook Form Region» (Область формы Outlook) и присвойте имя NotesFormRegion.cs. Щелкните «Add» (Добавить) для запуска мастера Outlook Form Region Wizard (Мастер областей форм Outlook) для добавления области формы. Прежде всего, необходимо выбрать тип создаваемой области формы. Можно выбрать один из четырех типов: Separate (Отдельная), Adjoining (Примыкающая), Replacement (Заменяющая) и Replace All (Заменяющая все).
Выберите Adjoining (Примыкающая), в результате чего область формы будет отображаться внизу инспектора. Нажмите кнопку «Далее» для продолжения. Присвойте имя VSTO Notes. Обратите внимание, что для областей форм типа Adjoining (Примыкающая) заголовок и описание недоступны. Теперь можно настроить отображение области формы в режиме создания, просмотра или в области чтения. Оставьте все параметры по умолчанию и нажмите кнопку «Далее» для продолжения.
Выберите инспекторы Outlook для прикрепления области формы. В данном примере используется почтовое сообщение для отображения области формы только при показе элемента почты. Теперь указаны все сведения, необходимые мастеру для создания области формы.
После нажатия кнопки «Готово» к вашему проекту будет добавлен новый элемент NotesFormRegion.cs, и откроется конструктор Form Region Designer (Конструктор области формы). Область формы можно создать так же, как и форму Windows, перетаскивая элементы управления с панели инструментов в область проектирования. В этом примере необходимо добавить только одно текстовое поле в формате RTF, используемое для отображения почтовых заметок. Перетащите элемент управления RichTextBox с панели инструментов на рабочую область области формы. Установите закрепление элемента управления в родительском контейнере, чтобы он заполнял всю область формы. Установите желтый цвет фона, чтобы область формы выглядела как заметка. На данный момент вы имеете полностью функциональную область формы Outlook. Можно нажать клавишу F5 для сборки области формы и запуска программы Outlook. Откройте почтовое сообщение, чтобы просмотреть желтое текстовое поле внизу сообщения.
Теперь напишем код, чтобы область формы записи заметок заработала. Правой кнопкой мыши щелкните конструктор области формы и выберите «View Code» (Просмотр кода). В представлении кода можно увидеть, что область формы унаследована от класса Microsoft.Office.Tools.Outlook.FormRegionControl. Базовый класс FormRegionControl содержит все необходимое для внедрения элемента управления в область формы Outlook. Вы также заметите три обработчика событий. Событие FormRegionInitializing вызывается при создании области формы. Это событие позволяет отменить создание области формы, с помощью него вам также отправляется ссылка на элемент Outlook, к которому прикреплена область формы. Два других события, FormRegionShowing и FormRegionClosed, вызываются при отображении и закрытии области формы. В эти события добавляется код. При закрытии области формы необходимо сохранить текст в текстовом поле в формате RTF в качестве скрытого вложения в сообщении. Для вложения текста его сначала необходимо сохранить во временном файле. При отображении области формы необходимо прочитать текст скрытого вложения и отобразить его в текстовом поле в формате RTF . И снова, сначала необходимо записать вложение во временный файл. На рис. 11 показано, как это может быть сделано.
Outlook.MailItem mailItem;
string NotesPath = “C:\\VSTO Note.txt”;
string NoteDisplayName = “VSTO Note”;
private void NotesFormRegion_FormRegionShowing(
object sender, System.EventArgs e)
{
mailItem = (Outlook.MailItem)this.OutlookItem;
foreach (Outlook.Attachment attachment in mailItem.Attachments)
{
if (attachment.DisplayName == NoteDisplayName)
{
attachment.SaveAsFile(NotesPath);
richTextBox1.Text = System.IO.File.ReadAllText(NotesPath);
}
}
}
private void NotesFormRegion_FormRegionClosed(object sender,
System.EventArgs e)
{
if (richTextBox1.Modified)
{
System.IO.File.WriteAllText(NotesPath, richTextBox1.Text);
foreach (Outlook.Attachment attachment in mailItem.Attachments)
{
if (attachment.DisplayName == NoteDisplayName)
{
attachment.Delete();
}
}
if (richTextBox1.TextLength > 0)
{
long position = 0;
mailItem.Attachments.Add(NotesPath,
Outlook.OlAttachmentType.olEmbeddeditem, position,
NoteDisplayName);
}
mailItem.Save();
}
}
После выполнения всех указанных выше этапов нажмите клавишу F5 и запустите проект. Будет собран проект и вызвана программа Outlook 2007. После запуска программы Outlook откройте сообщение из папки «Входящие» и введите текст для проверки.
Заключение
В данной статье показана настройка Ribbon в Office, добавление элементов управления содержимым к документу Word, интеграция настроенной Ribbon с документом Word и создание области формы Outlook. Это только некоторые функции разработки Office, доступные от VSTO в выпуске бета 1 Visual Studio «Orcas».
Стив Фокс (Steve Fox) - руководитель программы в группе Visual Studio Tools for Office (VSTO). В группе он занимается разработкой продукта VSTO, а помимо группы также работает с клиентами VSTO, обеспечивает обучение по VSTO и руководит занятиями по VSTO на конференциях.
Пол Стаббс (Paul Stubbs) - руководитель программы в группе Visual Studio Tools for Office and Visual Tools for Applications. Соавтор книги
VSTO for Mere Mortals (VSTO для простых смертных) вместе с Кэтлин МакГрэс (Kathleen McGrath) (Addison-Wesley, 2006). Он выступал на конференциях TechEd и TechReady и участвует в работе сообщества разработчиков на форумах Майкрософт. С его блогом можно ознакомиться по адресу blogs.msdn.com/pstubbs.