При разработке решений SharePoint необходимо иметь возможность переносить рабочие процессы как в пределах фермы, так и с одной фермы SharePoint на другую. Типичный сценарий — перенос в продуктивную среду рабочего процесса, созданного в тестовой среде.
Рассмотрим различные подходы к решению данной задачи.
Разработка рабочих процессов в Visual Studio
Этот вариант предусматривает размещение рабочих процессов в файлы решений SharePoint (*.wsp). Такой подход обеспечивает большУю гибкость и возможности по конфигурированию рабочих процессов, однако в некоторых случаях использование решений типа Farm Solution может быть небезопасно в плане работоспособности и производительности фермы SharePoint.
Подробно о разработке рабочих процессов в Visual Studio можно почитать по ссылке.
Создание пакета, содержащего рабочий процесс, в SharePoint Designer 2013
Инструмент SharePoint Designer 2013 предоставляет возможность сохранить рабочий процесс в файл шаблона. Сохранение рабочего процесса в файл шаблона называют упаковкой рабочего процесса. Полученный файл шаблона может быть импортирован на целевой сервер SharePoint, что исключает необходимость повторной разработки рабочего процесса на целевом сервере. Следует иметь в виду ограничения на типы рабочих процессов, которые могут быть экспортированы как шаблон:
- Все типы рабочих процессов платформы SharePoint Workflow 2013
- Только повторно используемые (reusable) рабочие процессы платформы SharePoint Workflow 2010.
Поскольку мы не планируем использовать устаревшую модель рабочих процессов, данное ограничение для нас не принципиально. Однако полученный файл шаблона представляет собой такой же пакет решения *.wsp как и пакет, генерируемый Visual Studio, а значит данный подход имеет те же недостатки, что и предыдущий, если выполнять развертывание упакованного рабочего процесса непосредственно.
Вместо непосредственного развертывания, мы воспользуемся файлом шаблона для извлечения метаданных (файл workflow.xaml), описывающих рабочий процесс. Эти метаданные мы сможем использовать для развертывания рабочего процесса с помощью альтернативных вариантов, описанных ниже.
- Откройте с помощью SharePoint Designer сайт, на котором развернут рабочий процесс, подлежащий переносу.
- Выберите в боковой панели «Объекты сайта» пункт меню «Рабочие процессы».
- Выберите нужный рабочий процесс в списке и нажмите на элемент ленты «Сохранить как шаблон», расположенный в группе «Управление». Появится сообщение: «Шаблон сохранен в библиотеке „Активы сайта“.».
- Выберите в боковой панели «Объекты сайта» пункт меню «Все файлы». В списке в области основного просмотра выберите элемент с именем «Site Assets». Нажмите F5, чтобы обновить представление.
- Выберите элемент с именем "<имя рабочего процесса>.wsp" и нажмите на элемент ленты «Экспорт файла», расположенный в группе «Управление». Выберите путь для сохранения файла.
- Откройте в Проводнике (или другом файловом менеджере) папку, в которую был сохранен файл *.wsp. Переименуйте файл, изменив расширение с «wsp» на «cab».
- Откройте файл после переименования. Выполните извлечение файла «workflow.xaml» из содержимого архива. Это можно сделать простым перетаскиванием (drag-and-drop) файла в каталог для извлечения.
Использование фреймворков для развертывания (Provision Frameworks)
Типовые задачи, связанные с переносом и развертыванием артефактов разработки SharePoint, побудили сообщество разработчиков создать удобные инструменты для их автоматизации. Один из таких инструментов — фреймворк SPMeta2. Это мощный инструмент для решения задач развертывания артефактов разработки SharePoint, позволяющий использовать написание кода на языке C# вместо декларативного описания (XML). SPMeta2 поддерживает множество сценариев работы, в том числе сценарии для работы с рабочими процессами.
К недостаткам развертывания через фреймворк можно отнести необходимость создания отдельного проекта для его использования даже в простых случаях, когда можно обойтись скриптами PowerShell.
Перенос рабочих процессов с помощью скриптов PowerShell
Командная консоль PowerShell позволяет решать обширный класс задач, связанных с администрированием SharePoint. Более того: некоторые задачи возможно решить исключительно с помощью этого инструмента.
Для переноса рабочих процессов списка разработан скрипт PowerShell, доступный по ссылке. Скрипт использует объект класса WorkflowServicesManager для выполнения операций над рабочими процессами.
Для развертывания рабочего процесса с помощью скрипта необходимо получить файл workflow.xaml, содержащий описание рабочего процесса. Выше был описан способ получения файла workflow.xml с помощью SharePoint Designer. Однако проще сделать с помощью функции ExtractWorkflowXaml, определенной в скрипте. Параметры функции:
Параметр | Описание |
---|---|
$url | URL узла, ассоциированного с сервисом Workflow, который содержит рабочий процесс |
$wf_displayname | Имя рабочего процесса |
$workflow_xaml_path | Путь к файлу для сохранения |
Пример использования функции:
ExtractWorkflowXaml "http://mysp.com/source" "Test workflow" "C:spmetadataworkflow.xaml"
Для развертывания рабочего процесса необходимо вызвать функцию DeployListWorkflow. Параметры функции:
Параметр | Описание |
---|---|
$workflow_xaml | Путь к файлу .xaml |
$url | URL узла, ассоциированного с сервисом Workflow, для которого нужно создать рабочий процесс |
$list_name | Имя списка, с которым должен быть ассоциирован рабочий процесс |
$wf_displayname | Имя рабочего процесса |
$overwrite | Признак необходимости перезаписи определения рабочего процесса, если он уже существует |
Пример использования функции:
DeployListWorkflow "C:spmetadataworkflow.xaml" "http://mysp.com/sandbox" "Test Workflow List" "My New Workflow" $true
Перенос рабочих процессов с помощью скриптов PowerShell позволяет выполнить задачу без использования сторонних инструментов.
Плюсы данного решения:
- Не нужно создавать проект в Visual Studio и писать код, вызывающий функционал фреймворков для развертывания, достаточно простого вызова функции скрипта PowerShell.
- Возможность извлекать метаданные рабочего процесса простым вызовом функции скрипта PowerShell.
- Логирование действий в процессе развертывания позволит легко локализовать и исправить ошибку.
Минусы данного решения:
- Скрипт использует серверную объектную модель SharePoint (SSOM), а значит должен выполняться на сервере фермы SharePoint. Для работы скрипта посредством клиентской объектной модели необходима модификация скрипта.
- Скрипт настраивает лишь базовые атрибуты рабочего процесса, необходимые для его функционирования. Для работы с дополнительными атрибутами необходима модификация скрипта.
- В текущей версии скрипт предназначен для развертывания рабочих процессов списка. Для работы с другими типами рабочих процессов необходима модификация скрипта.
Скрипт сделан наиболее простым с целью демонстрации возможности развертывания рабочих процессов через PowerShell. В дальнейшем планируется расширение функциональности описываемого скрипта.
Автор: DarkGenius