Visual Studio 2008
Часть 6. Создание приложений на платформе Microsoft Office
Создание дополнительных модулей
Работа с документами Word и Excel
Настройка и расширение «ленты»
Использование Word Content Controls
Расширения на основе Outlook Forms
Новые механизмы защиты и развертывания приложений на основе Microsoft Office
Новая, третья версия Visual Studio Tools for Office (называемая также VSTO 2008) позволяет создавать решения на основе ключевых продуктов из состава Microsoft Office 2003 и Microsoft Office 2007. Поддерживаются языки программирования C# и Visual Basic .NET. В VSTO 3.0 есть ряд новых и расширенных функций, которые мы кратко рассмотрим далее. Visual Studio Tools for Office входит в состав следующих изданий Visual Studio: Visual Studio 2008 Professional, Team Edition for Architects, Team Edition for Database Professionals, Team Edition for Developers и Team Edition for Testers.
Поддержка создания решений на основе Microsoft Office появилась в Visual Studio в 2003 году: первая версия Visual Studio Tools for Office поддерживала только Excel 2003 и Word 2003 и позволяла реализовывать расширения на уровне документов (document-level code behind), используя управляемый код.
В VSTO 2005 появилась поддержка InfoPath, а также возможность создания модулей расширения для Outlook. Помимо этого в VSTO 2005 была реализована поддержка создания панелей задач (ActionsPane) для ряда продуктов, входящих в семейство Microsoft Office 2003.
В VSTO 2005 Second Edition была добавлена поддержка Office 2007, включая возможность создания расширений для PowerPoint и Visio. Этот продукт был доступен для бесплатной загрузки для легальных пользователей Microsoft Visual Studio.
Как уже было отмечено, VSTO 3.0 входит в состав Visual Studio 2008 начиная с версии Professional и обеспечивает поддержку разработки модулей расширения на уровне документов и приложений как для Office 2003, так и для Office 2007. Обеспечены возможность создания Workflow для Microsoft SharePoint и развертывание по технологии ClickOnce.
Основные требования
Для того чтобы вы смогли создавать решения с помощью Visual Studio Tools for Office, на компьютере, используемом для разработки, должны быть установлены следующие компоненты:
- поддерживаемые версии Microsoft Office. В зависимости от типа проекта могут потребоваться различные версии продукта, но все они должны быть установлены локально, на компьютере разработчика (табл. 1);
- для всех установленных продуктов семейства Microsoft Office потребуется установка PIA (Primary Interop Assemblies), которые обеспечивают доступ к программной модели продуктов семейства Office из кода, написанного на управляемых языках программирования и выполняемого под управлением CLR (Common Language Runtime);
- для того чтобы решения на базе Microsoft Office, создаваемые средствами Visual Studio Tools for Office, можно было отлаживать и выполнять, PIA должны быть установлены в глобальном кэше сборок (Global Assembly Cache, GAC);
- если перед установкой Microsoft Office на компьютере была установлена библиотека .NET Framework версии 2.0 или более поздней, вы можете установить PIA в глобальный кэш сборок, выбрав в Office опцию Complete Installation. В противном случае вам потребуется отдельно установить PIA;
- отметим, что PIA, входящие в состав Visual Studio Tools for Office, устанавливаются локально и используются только для сборки разрабатываемых проектов;
- как часть установки Microsoft Office необходимо установить Visual Basic for Applications (VBA).
Для установки Visual Studio Tools for Office на компьютере, где планируется разработка для Microsoft Office System 2007, необходимо выполнить следующие шаги:
- Установить .NET Framework 3.5 или более поздней версии — это необходимо сделать перед установкой Primary Interop Assemblies, которые помещаются в глобальный кэш сборок.
- Установить требуемую версию Microsoft Office, включая Primary Interop Assemblies. Отметим, что Visual Studio Tools for Office не поддерживает разработку для Microsoft Office 2003 и 2007 (или различных версий отдельных продуктов, например Word 2003 и Word 2007) на одном компьютере — для создания приложений для Microsoft Office 2003 и 2007 потребуется отдельный компьютер для каждой версии продукта.
- Установить версию Visual Studio, в состав которой входит Visual Studio Tools for Office. При необходимости получения локализованных сообщений также потребуется установить Language Package, который доступен на сайте Microsoft.
В случае использования Visual Studio Tools for Office для создания приложений для Microsoft Office 2003 вам потребуется установить .NET Framework 2.0, а также пакет обновлений для Office — Office Service Pack 2.
Если вы планируете создавать и расширять SharePoint Workflow, необходимо установить Visual Studio Tools for Office на компьютере, операционная система которого поддерживает Microsoft Office SharePoint Server 2007 — Windows Server 2003 или Windows Server 2008. В результате будут установлены шаблоны проектов, которые позволят вам создавать расширения для SharePoint Workflow.
После того как все необходимые компоненты, продукты и средства разработки установлены, можно приступать к разработке решений на базе Microsoft Office. К основным возможностям, предоставляемым Visual Studio Tools for Office, относятся: создание дополнительных модулей, работа с документами Word и Excel, расширение интерфейсного элемента «лента», создание панелей задач, использование Word Content Controls, разработка расширения на основе Outlook Forms и создание расширений для SharePoint Workflow.
Создание дополнительных модулей
Дополнительные модули на уровне приложений (application-level add-ins) позволяют расширять функциональность ключевых приложений, входящих в состав Microsoft Office. Дополнительные модули доступны в приложении независимо от того, какой документ в нем открыт, — это отличает механизмы расширения на основе дополнительных модулей от механизмов расширения на основе шаблонов документов, которые мы рассмотрим ниже.
В Visual Studio Tools for Office входят средства для создания дополнительных модулей на основе новых шаблонов проектов для большинства приложений, входящих в семейства Microsoft Office 2003 и Microsoft Office 2007, — Excel 2003 и 2007, InfoPath 2007, Outlook 2003 и 2007, PowerPoint 2003 и 2007, Project 2003 и 2007, Visio 2003 и 2007, Word 2003 и 2007. Использование новой программной модели существенно упрощает создание дополнительных модулей, так как не требует применения COM-технологий.
Шаблоны, входящие в состав Visual Studio Tools for Office
Среди новинок для модулей расширений отметим возможность обеспечения доступа к объектам внутри ваших моделей расширений из других компонентов Microsoft Office — например из других модулей расширений или из кода на Visual Basic for Applications, включенного в состав документа. Таким образом, у разработчиков появляется возможность создания на уровне модулей расширения разделяемых сервисов, которые могут использоваться другими компонентами и сервисами.
Работа с документами Word и Excel
Создание расширений на уровне документов представляет собой способ добавления расширенной функциональности к тому или иному документу либо к электронной таблице. Поскольку расширения реализованы на уровне документов, они будут доступны только в тех документах или электронных таблицах, с которыми они ассоциированы.
В состав Visual Studio Tools for Office входит набор возможностей, упрощающих создание расширений на уровне документов для Word 2007 и Excel 2007. К таким возможностям относятся:
- создание расширений для документов и электронных таблиц в формате Office Open XML для Word 2007 и Excel 2007 или в двоичных форматах, поддерживаемых в Microsoft Office 2003 или более ранних версий;
- дизайн документов и шаблонов в Visual Studio и написание кода в среде разработчика;
- возможность добавления компонентов Windows Forms в документы и шаблоны;
- добавление компонентов-расширений (host-controls) для встроенных объектов Word и Excel, которые расширяют объектный модуль и обеспечивают возможность связи с данными.
Настройка и расширение «ленты»
Интерфейсный элемент «лента» (Ribbon) впервые появился в Microsoft Office 2007 и представляет собой объединение функциональных возможностей меню, списков, галерей и ряда других элементов. Лента поддерживает контекстное переключение, группировку задач и ряд других возможностей. В Microsoft Office 2007 поддерживаются программная настройка и расширение интерфейсного элемента «лента» для продуктов Microsoft Office Excel 2007, Microsoft Office Outlook 2007, Microsoft Office PowerPoint 2007 и Microsoft Office Word 2007.
Существует два способа настройки элемента «лента»: с помощью дизайнера Ribbon Designer, включенного в состав Visual Studio Tools for Office 2008, и через описание «ленты» на языке Ribbon XML.
Настройка элемента «лента» с помощью дизайнера поддерживает следующую функциональность:
- возможность добавления настраиваемой «ленты» к проекту Office с применением специального шаблона проекта — Ribbon (Visual Designer);
- визуальное создание новых вкладок с помощью дизайнера:
- перетаскивание компонентов на «ленту»,
- настройка расположения компонентов и их внешнего вида,
- добавление обработчиков событий двойным щелчком по компоненту «ленты»;
- установка свойств «ленты» и ее компонентов в окне свойств (Properties);
- добавление кода обработчиков событий на языке Visual C# или Visual Basic с полной поддержкой проверки типов и технологии IntelliSense.
Дизайнер также может использоваться для добавления компонентов к меню, которые открываются при нажатии на кнопку Office (Microsoft Office Button).
Настройка «ленты» с применением языка Ribbon XML позволяет более детально контролировать «ленту» и ее элементы и выполнять ряд задач, не поддерживаемых в дизайнере Ribbon Designer. В Visual Studio Tools for Office 2008 работа с «лентой» на уровне Ribbon XML поддерживается на уровне специального шаблона — Ribbon (XML), помимо этого имеется возможность экспорта любой «ленты», созданной средствами дизайнера, в шаблон для редактирования «ленты» на уровне языка XML.
В Visual Studio Tools for Office 2008 реализована типизованная объектная модель, которая может использоваться для управления компонентами «ленты» в режиме выполнения приложения. Например, можно динамически добавлять элементы меню или управлять отображением отдельных компонентов в зависимости от контекста, в котором в данный момент находится приложение. Объектная модель состоит из трех ключевых элементов: класса Ribbon, событийной модели и классов, отвечающих за отдельные компоненты «ленты».
Класс Ribbon наследует от класса OfficeRibbon и представляет собой класс, код которого разделен в файлах кода, создаваемого разработчиком, и файла, генерируемого дизайнером «ленты». Событийная модель поддерживает три события: Load, возникающее при начальной загрузке расширений «ленты», LoadImage, используемое для кэширования графических изображений, применяемых в «ленте», и Close, которое возникает при завершении работы экземпляра «ленты».
В пространстве имен Microsoft.Office.Tools.Ribbon определены следующие классы, отвечающие за отдельные компоненты «ленты» (табл. 2).
Каждый класс отвечает за отдельный тип компонента «ленты» и свойства, которые позволяют динамически управлять отображением компонента и рядом других его параметров. Помимо свойств каждый компонент «ленты» поддерживает ряд событий — они перечислены в табл. 3.
Все рассмотренные выше классы, события и другие элементы поддержки «ленты» в Visual Studio Tools for Office 2008 реализованы в пространстве имен Microsoft.Office.Tools.Ribbon. Здесь содержатся классы приведенные в табл. 4.
Создание панелей задач
Создание панелей задач — это еще один способ настройки приложений Microsoft Office с помощью Visual Studio Tools for Office 2008. Панели задач представляют собой интерфейсный элемент, который обычно располагается справа от основного окна приложения Microsoft Office. Панели задач позволяют расширять функциональность офисных приложений и часто используются как механизм обеспечения интеграции между офисными приложениями и приложениями, автоматизирующими какие-либо бизнес-задачи.
Панели задач обычно создаются либо на уровне документов (в этом случае они называются Actions Panes), либо на уровне приложений — в таком случае их называют Custom Task Panes. В табл. 5 приведены основные рекомендации по использованию Actions Panes и Custom Task Panes.
Панель задач типа Actions Pane создается на основе класса ActionsPane, который реализован в пространстве имен Microsoft.Office.Tools. Данный класс поддерживает обширную объектную модель с большим числом методов, свойств и событий, которые могут применяться разработчиками для управления различными аспектами создания и отображения панелей задач, а также обеспечения всего жизненного цикла панели — от ее инициализации до завершения работы всего приложения.
Панель задач, используемая на уровне приложения (Custom Task Pane), создается на основе класса CustomTaskPane, который также реализован в пространстве имен Microsoft.Office.Tools. Ниже показан пример создания панели задач с применением метода Add(UserControl, String). В данном примере используются свойства объекта CustomTaskPane для установки ряда значений по умолчанию и задаются обработчики событий DockPositionChanged и VisibleChanged, реагирующие соответственно на изменение местоположения панели и переключение панели с отображаемой на неотображаемую:
private MyUserControl myUserControl1;
private Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
myUserControl1 = new MyUserControl();
myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1,
“New Task Pane”);
myCustomTaskPane.DockPosition =
Office.MsoCTPDockPosition.msoCTPDockPositionFloating;
myCustomTaskPane.Height = 500;
myCustomTaskPane.Width = 500;
myCustomTaskPane.DockPositionRestrict =
Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
myCustomTaskPane.Visible = true;
myCustomTaskPane.VisibleChanged +=
new EventHandler(myCustomTaskPane_VisibleChanged);
myCustomTaskPane.DockPositionChanged +=
new EventHandler(myCustomTaskPane_DockPositionChanged);
}
private void myCustomTaskPane_DockPositionChanged(object sender, EventArgs e)
{
Microsoft.Office.Tools.CustomTaskPane taskPane =
sender as Microsoft.Office.Tools.CustomTaskPane;
if (taskPane != null)
{
if (taskPane.DockPosition ==
Office.MsoCTPDockPosition.msoCTPDockPositionFloating)
{
taskPane.Height = 500;
taskPane.Width = 500;
}
}
}
private void myCustomTaskPane_VisibleChanged(object sender, EventArgs e)
{
Microsoft.Office.Tools.CustomTaskPane taskPane =
sender as Microsoft.Office.Tools.CustomTaskPane;
if (taskPane != null)
{
if (taskPane.Visible)
{
taskPane.DockPosition =
Office.MsoCTPDockPosition.msoCTPDockPositionRight;
}
}
}
Использование Word Content Controls
Компоненты, называемые Content Controls, применяются в Microsoft Office Word 2007 для структурирования документов. Такой компонент задает область документа, которая может иметь только определенное содержание: текст, дату, графические изображения и т.п. Компоненты Content Controls используются для ограничения возможностей пользователей по вводу неверной информации в определенные области документа.
В состав Visual Studio Tools for Office входит следующий набор средств, упрощающий разработку компонентов Content Controls:
- написание кода, использующего классы на управляемом коде для каждого компонента, входящего в состав Word 2007;
- обработка событий для каждого компонента;
- связь компонентов с элементами XML-документов, включаемых в состав документов, базами данных и объектами на управляемом коде;
- добавление компонентов к документам с помощью специального дизайнера:
- перетаскивание компонентов в документы,
- установка свойств документов,
- создание обработчиков событий по двойному щелчку мышью;
- программное добавление компонентов к документам в режиме выполнения.
Поддержка компонентов Content Controls реализована в пространстве имен Microsoft.Office.Tools.Word в виде классов, каждый из которых представляет собой компонент отдельного типа. Поддерживаются компоненты, приведенные в табл. 6.
Класс ContentControl представляет собой основу для одного из перечисленных выше компонентов — конкретный тип компонента задается свойством Type. Поддерживается создание компонентов как в режиме разработки приложения, так и в режиме выполнения.
Выше мы отметили возможность связи компонентов с различными источниками данных. Рассмотрим ее более подробно. Наличие связи компонентов с данными позволяет отображать данные, которые будут обновляться при обновлении данных в источнике, а также вносить изменения в данные, которые будут передаваться источнику. Поддерживаются следующие опции связи с данными:
- привязка компонентов к полям баз данных или объектам на управляемом коде — поддерживается та же функциональность, что и в Windows Forms;
- привязка компонентов к элементам XML-документов (они называются Custom XML Parts), которые встроены в основной документ.
При использовании модели связи с данными Windows Forms поддерживается связь компонента с одним элементом данных — например с колонкой в таблице базы данных. Помимо этого существует возможность связи с данными с применением окна Data Sources в Visual Studio. В табл. 7 показаны компоненты и поддерживаемые ими типы источников данных.
Для связи компонентов с элементами XML-документов используется свойство XMLMapping соответствующего компонента. В следующем примере показано, как связать компонент типа PlaintextContentControl с элементом Price в ветви Product из XML-документа, входящего в состав основного документа:
plainTextContentControl1.XMLMapping.SetMapping
(«/Product/Price», String.Empty, null);
При связывании компонентов с элементами XML-документов автоматически поддерживается так называемое двунаправленное связывание. Таким образом, если пользователь редактирует текст, соответствующий XML-элемент автоматически обновляется. Точно так же если значения XML-элементов обновляются, то обновляется и содержимое связанного с ними компонента. Связь с XML-элементами поддерживается для компонентов ComboBoxContentControl, DatePickerContentControl, DropDownListContentControl, PictureContentControl и PlainTextContentControl.
Все компоненты поддерживают событийную модель, которая может применяться для выполнения каких-либо действий, связанных с использованием данных. Событийная модель состоит из событий, приведенных в табл. 8.
Расширения на основе Outlook Forms
Visual Studio Tools for Office позволяет создавать регионы форм, которые расширяют функциональность стандартных или дополнительных форм Microsoft Office Outlook. В Visual Studio Tools for Office поддерживаются следующие возможности по созданию регионов форм:
- добавление регионов к проекту с применением специального шаблона — Form Region;
- задание расположения и типа региона и других характеристик с применением специального мастера — Form Region Wizard;
- визуальная разработка регионов с помощью специального дизайнера:
- перетаскивание компонентов в регионы,
- управление расположением компонентов и их характеристиками,
- создание обработчиков событий по двойному щелчку мышью;
- добавление кода на Visual C# или Visual Basic с полной поддержкой проверки типов и технологии IntelliSense;
- отладка проектов с использованием средств, которые автоматически запускают Outlook и генерируют файлы и конфигурационные настройки, позволяющие Outlook обнаружить и загрузить регионы форм.
Использование нового мастера — New Outlook Form Region — позволяет импортировать любой регион формы, созданный средствами Microsoft Office Outlook. При применении Microsoft Office Outlook для дизайна регионов форм можно использовать поля Outlook и компоненты, входящие в состав Outlook, которые недоступны через Visual Studio Toolbox. Помимо этого предоставляется возможность повторного применения регионов, разработанных для других проектов на основе Outlook. После того как регион импортирован, появляется возможность написания кода для обработчиков событий с применением штатных средств, предоставляемых Microsoft Visual Studio.
В табл. 9 показаны все возможные подходы к настройке и расширению интерфейса офисных приложений, поддерживаемые в Visual Studio Tools for Office.
Создание SharePoint workflow
Visual Studio Tools for Office позволяет создавать workflow для SharePoint — использование workflow дает возможность ассоциировать документы, хранящиеся в Microsoft Office SharePoint Server 2007, с процессами. Создание SharePoint workflow облегчают следующие возможности Visual Studio Tools for Office:
- для создания проектов для SharePoint workflow можно применять шаблоны SharePoint 2007 Sequential Workflow и SharePoint 2007 State Machine Workflow;
- отладка логики workflow нажатием клавиши F5. Visual Studio Tools for Office автоматически ассоциирует workflow с библиотекой документов по умолчанию на локальном портале SharePoint и запускает экземпляр workflow.
С помощью мастера New Office SharePoint Workflow пользователи могут указать конфигурацию для отладки. Мастер поддерживает следующие опции:
- указание сайта SharePoint, библиотеки и списков, которые могут использоваться при отладке SharePoint workflow;
- указание, какие действия запускают workflow.
Для создания проекта по разработке SharePoint workflow необходимо выполнить следующие шаги:
- В диалоговой панели New Project в панели Project Types выбрать язык программирования — Visual Basic или Visual C# — и одну из ветвей (все они содержат одинаковые шаблоны для SharePoint workflow):
- Workflow;
- Office;
- ветвь 2007 в ветви Office.
- В зависимости от типа создаваемого workflow выбрать шаблон — либо SharePoint 2007 Sequential Workflow, либо SharePoint 2007 State Machine Workflow — и задать имя проекта.
- В панели мастера New Office SharePoint Workflow задать опции отладки — они будут использоваться Visual Studio Tools for Office при развертывании workflow при его отладке из среды Visual Studio.
- На странице Specify the workflow name and site for debugging необходимо указать SharePoint Server имя, которое будет применяться для идентификации шаблона на сайте.
- Далее необходимо указать адрес портала, который будет использоваться для выполнения разрабатываемого workflow. Портал должен располагаться на локальном компьютере. По умолчанию применяется адрес: http://localhost/Docs.
- Нажмите кнопку Next.
- Если текущий портал не содержит списка history list, мастер создаст его автоматически, так как он используется для протоколирования всех событий, связанных с выполнением workflow, — например создание workflow, создание или завершение задания и т.п.
- На странице Select the lists you will use when debugging укажите библиотеку или список, которые будут использоваться для отладки workflow. Например, если разрабатываемый код предназначен для управления документом, следует указать библиотеку документов.
- Далее необходимо включить опцию Automatically Associate Workflow, которая позволит автоматически добавлять шаблон workflow к указанной библиотеке или к списку при отладке. В противном случае шаблон нужно будет добавлять вручную, используя страницу администратора Add a Workflow на сайте SharePoint.
- Задайте список задач, который вы собираетесь использовать. В нем отображаются задачи в рамках workflow, доступные каждому участнику процесса.
- Задайте список, который будет отображать все события, возникающие при выполнении workflow.
- Нажмите кнопку Next.
- На странице You can specify the conditions for how your workflow is started можно указать опции, которые будут использоваться при запуске workflow.
- После того как работа с мастером завершена, вы попадаете в дизайнер Designer for Windows Workflow Foundation, в котором происходит написание кода для workflow.
Для тестирования workflow необходимо установить «точку остановки», например, на обработчике события onWorkflowActivated. После этого нужно выполнить действия над документом, приводящие к активации шагов workflow.
Новые механизмы защиты и развертывания приложений на основе Microsoft Office
Разработчикам предоставляется возможность использования технологии ClickOnce для обеспечения безопасности и развертывания решений, созданных средствами Visual Studio Tools for Office для платформы Microsoft Office 2007, включая расширения на базе документов и расширения на базе офисных приложений. В Visual Studio Tools for Office поддерживаются следующие средства развертывания приложений:
- мастер Publish Wizard для публикации и развертывания настроек и расширений;
- автоматическое определение наличия обновлений для созданных расширений — поддерживаются проверка наличия обновлений в заданные интервалы времени, загрузка и установка обновлений, а также откат к более ранним версиям расширений;
- возможность загрузки и выполнения решений на основе Office даже в тех случаях, когда пользователь не подключен к сети.
Модель безопасности, реализованная в технологии ClickOnce, разработана таким образом, чтобы быть совместимой с будущими версиями среды выполнения Visual Studio Tools for Office, Microsoft .NET Framework и Microsoft Office. В Visual Studio Tools for Office поддерживаются следующие ключевые возможности по обеспечению безопасности:
- для Microsoft Office 2007 предоставляется возможность обеспечения безопасности решений с применением независимой от версий модели безопасности ClickOnce;
- использование Trust Center в Microsoft Office для выбора оптимальных для вашего решения настроек безопасности, включая подписание манифеста развертывания сертификатами безопасности, отображение информации о безопасности на уровне ClickOnce и программное добавление элементов в список пользователей;
- задание политик безопасности для каждого пользователя.
Компоненты VSTO 2008
Ключевые компоненты VSTO 2008 располагаются в каталоге \Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office. В корне находятся адаптеры для загрузки в Visual Studio в режиме дизайна Excel 2003/2007 и Word 2003/2007. Здесь также расположены «переходник» для использования компонентов, написанных на управляемых языках, в режиме дизайна и библиотека типов для дизайнера. Подкаталог PIA содержит сборки для реализации взаимодействия управляемого и неуправляемого кода (Primary Interop Assembly) как для версии Office 2003 (каталог Office11), так и для Office 2007 (каталог Office12). В каталоге vspkgs находятся расширения Visual Studio для реализации различных дизайнеров, а в каталоге VSTOTemplates есть шаблоны всех типов проектов, поддерживаемых в Visual Studio Tools for Office 2008.
В следующем разделе мы рассмотрим новинки в Visual Studio 2008, связанные с созданием сервисов, использованием Windows Communication Foundation и Windows Workflow Foundation.