Разработка рабочих процессов SharePoint с помощью средств разработчика Office Developer Tools для Visual Studio 2012

Официальный выпуск средств разработчика Office Developer Tools для Visual Studio 2012  ( загрузить ) содержит множество замечательных функций, которые помогут разработчикам программ для Office и SharePoint оперативно и эффективно создавать первоклассные приложения и решения для Office 2013 и 2010. В этом сообщении я представлю вам улучшения SharePoint 2013, связанные с разработкой рабочих процессов в Visual Studio 2012, а также приведу пошаговое руководство по созданию приложения рабочего процесса SharePoint (рабочий процесс утверждения и маршрутизации документов).

Приложения для SharePoint можно разрабатывать удаленно, причем они могут предназначаться как для размещения в SharePoint Online, так и локально. Вам больше не придется разрабатывать их прямо на сервере SharePoint! Более того, теперь вы можете публиковать приложения для рабочих процессов в Магазине Office и в каталоге приложений. На самом деле, вы также можете создавать рабочие процессы SharePoint 2013 в проектах решений, однако поверьте мне, что вам будет не хватать функции удаленной разработки, которая доступна только при создании приложений для проектов SharePoint.

В SharePoint 2013 рабочие процессы создаются на основе Windows Workflow Foundation в .NET Framework 4.5 и ориентируются на использование Workflow Manager 1.0. Ознакомьтесь с этой статьей MSDN, чтобы подробнее узнать об основных понятиях рабочих процессов SharePoint 2013.

Вы заметите следующие основные отличия, связанные с разработкой рабочих процессов:

  • Разработка представляет собой не написание программного кода на C# или Visual Basic, а настройку рабочих процессов при помощи простых выражений Visual Basic или C#, которые могут иметь декларативную форму.
  • Вместо шаблонов рабочих процессов Sequential (Последовательный) или State Machine (Конечный автомат) имеется единый шаблон рабочих процессов, который имеет тип State Machine по умолчанию. Чтобы перейти к типу по умолчанию, просто поменяйте местами действия Sequence и State Machine.
  • Действия рабочих процессов выполняются с помощью SharePoint REST API.

Мы надеемся, что пользователи предварительных версий наших инструментов оценят простоту и легкость создания рабочих процессов в новом выпуске средств разработчика Office Developer Tools. Ниже приведены сведения о важных изменениях и дополнениях, которые влияют на существующие проекты рабочих процессов, созданные при помощи версии Preview 2 наших средств разработчика. С нетерпением ожидаем ваших отзывов!

Начало программы - программное обеспечение

Этот выпуск разработанных нами инструментов совместим с SharePoint 2013 RTM и с обновлением сервера SharePoint Server 2013 за март 2013 г. На самом деле, даже если вы не планируете заниматься разработкой для SharePoint в ближайшем будущем, вам все равно необходимо установить мартовское обновление на вашу ферму серверов SharePoint. Мы не рекомендуем продолжать использование версии SharePoint RTM. Разумеется, в случае использования SharePoint Online вам не нужно беспокоиться об обновлении вашего программного обеспечения SharePoint — оно обновляется постоянно. Если у вас нет SharePoint Online, вы можете получить бесплатный пробный доступ всего за несколько минут; выполнив вход на портал Office 365 для разработчиков, где размещен SharePoint Online.

Если вы планируете разрабатывать рабочие процессы SharePoint 2013 или устанавливать нестандартные, специально разработанные процессы, убедитесь в наличии установленного Workflow Manager на сервере SharePoint и не забудьте также установить накопительное обновление для Workflow Manager 1.0.

Разработку рабочих процессов лучше всего вести при помощи Visual Studio 2012 с пакетом обновления 2. Если вы еще не установили эту среду разработки, сначала установите Visual Studio 2012 RTM на вашем компьютере разработчика, а затем установите Visual Studio 2012 с обновлением 2 и обновление для .NET KB2750149.

Проекты рабочих процессов, созданные с помощью версии Preview 2 средств разработчика Office Developer Tools

Если вы ранее создавали проекты рабочих процессов SharePoint 2013 с помощью версии Preview 2 средств разработчика Office Developer Tools, то обратите внимание на следующие важные изменения платформы SharePoint 2013 и пакета средств разработки (SDK), представленные в мартовском обновлении.

  • Улучшенная масштабируемость и более надежное обновление приложения для создания рабочих процессов.
    • Новый формат добавления рабочих процессов и настраиваемых действий в приложения.
    • Элемент Item Guid (Guid элемента) теперь устарел и заменен новым элементом под названием Item Id (ИД элемента), который является целым числом. 
      Что это означает? Действия LookupSPListItemGuid и GetCurrentItemGuid больше не поддерживаются, для их замены созданы события LookupSPListItemId и GetCurrentItemId. Все прочие действия, где использовался Item Guid, теперь содержат добавленный элемент Item Id, а элемент Item Guid скрыт. Ваши проекты, в которых используется Item Guid, будут работать как обычно (кроме случаев работы с очень крупными списками, в которых более 5 000 элементов). Это одна из причин проводимых изменений.
  • Оптимизированная эффективность разработки и отладки рабочих процессов.
    • Изменена ссылка в XAML-файле на сборку действий рабочего процесса, теперь она указывает на новую промежуточную сборку, создаваемую во время проектирования, вместо фактически используемой сборки действий SharePoint.

Созданные с помощью Preview 2 проекты рабочих процессов необходимо преобразовывать для обеспечения совместимости с официальной версией средств разработчика Office Developer Tools и мартовским обновлением SharePoint. Чтобы упростить этот процесс, воспользуйтесь средством CodePlex для преобразования ваших проектов (SharePoint 2013 Workflow Converter для Visual Studio 2012).

Пошаговое руководство: Создайте приложение рабочего процесса утверждения и маршрутизации документов

Давайте поэтапно рассмотрим процесс создания с чистого листа приложения для стандартного сценария рабочих процессов SharePoint, а именно — для утверждения и маршрутизации документов.

Сложность: средняя

Обзор рабочего процесса

  • Экземпляр рабочего процесса создается сразу после обновления документа или библиотеки документов.
  • Если документу присвоен статус Ready For Review (Готов к рецензированию), то рабочий процесс назначает ему задачу и отправляет уведомление по электронной почте утверждающему, который производит рецензирование.
  • Если утверждающий производит утверждение документа, то рабочий процесс копирует документ в репозиторий опубликованных документов.
  • Оригинальный документ остается в библиотеке Draft Documents (Черновики документов), но его статус должен быть окончательным, например, Published (Опубликован) или Rejected (Отклонен).

Давайте начнем.

1. С помощью Visual Studio 2012 со��дайте новый проект App for SharePoint 2013 (Приложение для SharePoint 2013), как показано на рис. 1.

Full-size version of the screenshot

2. Создайте две библиотеки документов с именами Draft Documents (Черновики документов) и Published Documents (Опубликованные документы) в качестве настраиваемых списков, как показано на рис. 2.Full-size version of the screenshot

3. Добавьте следующие настраиваемые столбцы к библиотекам Draft Documents и Published Documents
(Выполните следующее для каждой из библиотек.)

  1. Добавьте столбец со списком людей или групп и назовите его Approver (Утверждающий).
  2. Добавьте столбец со списком вариантов и назовите его Document Status (Статус документа). Затем добавьте к нему пять вариантов: Draft In Progress (Рабочий черновик), Ready For Review (Готов к рецензированию), Approved for Publishing (Утвержден для публикации), Rejected (Отклонен) и Published (Опубликован). (Чтобы задать варианты выбора в сетке свойств, раскройте свойство Type (Тип) и нажмите кнопку с троеточием ( ) в свойстве Items (Элементы). Введите значения в появившееся диалоговое окно, как показано на Рис. 3.)

Full-size version of the screenshot

4. Создайте рабочий процесс SharePoint со списком с именем DocumentApprovalWorkflow, как показано на рис. 4 и 5.

Full-size version of the screenshot

Full-size version of the screenshot

5. Сопоставьте рабочий процесс с библиотекой Draft Documents, затем выберите создание нового списка журнала и нового списка задач рабочего процесса, как показано здесь.

Full-size version of the screenshot

6. Настройте тип сопоставления рабочего процесса для автоматического запуска при изменении элемента в библиотеке Draft Documents.

Full-size version of the screenshot

Примечание.  Если необходимо изменить тип сопоставления рабочего процесса уже после создания рабочего процесса, это можно сделать в сетке свойств (см. рис. 8). (Свойства рабочего процесса появятся в сетке свойств при выделении элемента рабочего процесса в обозревателей решений)

Full-size version of the screenshot

7. Если проект рабочего процесса еще не открыт, откройте его двойным щелчком в Solution Explorer (обозреватель решений), чтобы открыть конструктор рабочих процессов. На рис. 9 представлен рабочий процесс.

Full-size version of the screenshot

8. А теперь давайте спроектируем логику рабочего процесса. Прежде всего, нам нужно знать статус документа.

    1. Чтобы получить это значение, перетащите действие LookupSPListItem с панели инструментов на полотно конструктора рабочих процессов. Это действие возвращает объект DynamicValue, содержащий набор свойств (пары «ключ-значение»), принадлежащих конкретному элементу списка SharePoint.
    2. Настройте действие LookupSPListItem так, чтобы оно возвращало свойства текущего элемента в текущем списке (см. рис. 10). Настройку свойств можно выполнить с помощью сетки свойств, выбрав действие на полотне. Используйте поля со списками в сетке свойств для выбора нужных параметров.

Full-size version of the screenshot

На поверхности действия LookupSPListItem перейдите по ссылке Get Properties (Получить свойства). Это позволит автоматически выполнить несколько действий (см. рис. 11). Создать переменную с типом DynamicValue и привязать ее к возвращаемому аргументу действия LookupSPListItem под названием Result (Результат). Это действие сохраняет свойства элемента списка в переменную. Добавить новое действие под названием GetDynamicaValueProperties и задать только что созданную переменную DynamicValue в качестве входного аргумента этого действия. Это действие позволяет получать значения отдельных свойств у переменной DynamicValue.

Full-size version of the screenshot

 

9. На поверхности действия GetDynamicValueProperties нажмите Define(Определить). Появится диалоговое окно, в котором можно выбрать получаемые свойства.

    1. В списке Entity Type (Тип объекта) выберите List Item of Draft Documents (Элемент списка черновиков документов), как показано на рис. 12.
    2. В сетке данных щелкните Create Property (Создать свойство), чтобы активировать поле со списком, содержащее свойства, доступные для элементов списка в библиотеке Draft Documents (Черновые документы). Затем выберите Document Status (Статус документа) в поле со списком.

Full-size version of the screenshotFull-size version of the screenshot

Добавьте еще одну строку, снова нажав Create Property (Создать свойство) и выбрав Approver (Утверждающий) в поле со списком. Перейдите по ссылке Populate Variables (Заполнить переменные) в диалоговом окне. В результате для каждой строки будет автоматически создана переменная соответствующего типа данных, а также переменная Assign To (Назначение), см. рис. 13.

Full-size version of the screenshot

10. Создав необходимые значения элементов списка, можно проверить, имеет ли документ статус Ready For Review(Готов к рецензированию).

  1. На панели инструментов перетащите действие If на полотно конструктора рабочих процессов. (Подсказка: можно выполнить поиск по панели инструментов, чтобы быстро отфильтровать нужные действия.)
  2. Присвойте условию If значение DocumentStatus.Equals(“Ready For Review”) , как показано на рис. 14.

Full-size version of the screenshot

11. Если документ готов к рецензированию, то назначьте задачу утверждающему.

Перетащите на полотно с панели инструментов действие SingleTask и отпустите его в область Then (То) внутри действия If (Если), как показано на рис. 15.

Full-size version of the screenshot

Теперь назначьте задачу для утверждающего. Перейдите по ссылке Configure (Настройка) на поверхности действия. Появится диалоговое окно, в котором можно будет выполнить базовую настройку свойств задачи. Присвойте переменной Approver (Утверждающий) значение свойства Assigned To (Кому назначен), как показано на рис. 16. Чтобы сохранить изменения, нажмите OK.

Full-size version of the screenshot

Здесь вы заметите ошибку проверки действия SingleTask. Изучите это действие в сетке свойств и убедитесь, что у свойства AssignedTo есть ошибка. Наведите курсор мыши на имя свойства, чтобы увидеть подсказку, в которой говорится о типе данных свойства и содержится описание его использования. Мы видим, что это свойство ожидает значение String (Строка), однако переменная Approver имеет тип Int32 (см. рис. 17).

Full-size version of the screenshot

Чтобы исправить эту ошибку, добавьте строку  .ToString()  к строке Approver, как показано на рис. 18. Это можно было сделать прямо в показанном ранее диалоговом окне конфигурации. Итак, вы настроили базовую задачу для отправки назначенному лицу (в данном случае, утверждающему) электронных писем, уведомляющих его о наличии новых задач, которые ожидают действий.

Full-size version of the screenshot

12. Давайте поближе взглянем на сетку свойств для действия SingleTask. Прокрутив ее вниз, вы заметите автоматически созданные выходные переменные, которым присвоены значения Outcome и TaskItemId. Обратите внимание на имя переменной Outcome — оно должно быть похоже на outcome_0. Мы будем использовать эту переменную для проверки результатов выполнения задачи в ходе следующего действия, а точнее — для выяснения того, был ли документ утвержден или отклонен утверждающим. Примечание. Возвращаемый аргумент Outcome возвращает значение Int32, соответствующее номеру результата, выбранного утверждающим (0 для Approved (Утвержден), 1 для Rejected (Отклонен)). Эти значения доступны для выбора по умолчанию в столбце сайта SharePoint под названием Task Outcome (Результат выполнения задачи).

13. Чтобы проверить результат выполнения задачи, давайте добавим к рабочему процессу еще одно действие If, разместив его после действия SingleTask, но внутри области Then. Присвойте условию If значение outcome_0 == 0, чтобы проверить, была ли утверждена задача (см. рис. 19).

Full-size version of the screenshot

14. Если утверждающий утвердит задачу, давайте обновим статус документа, присвоив ему значение Approved For Publishing (Утвержден для публикации), и затем скопируем его в библиотеку Published Documents (Опубликованные документы); в противном случае присвоим документу статус Rejected(Отклонен).

  1. Добавьте действие UpdateListItem к области Then внутри этого действия If.
  2. Затем настройте его для обновления текущего элемента в текущем списке, выбрав соответствующие значения в полях со списками, которые размещены в сетке свойств.
  3. Далее нажмите кнопку с символом троеточия ( ), чтобы просмотреть свойство ListItemPropertiesDynamicValue. Появится диалоговое окно, предоставляющее вам возможность указать свойство элемента списка, которое необходимо обновить.
  4. Присвойте параметру Entity Type значение List Item of Draft Documents с помощью поля со списком.
  5. В сетке данных нажмите Create Property (Создать свойство), чтобы активировать поле со списком, содержащее свойства, доступные для элементов списка в библиотеке Draft Documents (Черновые документы). Затем выберите Document Status (Состояние документа) в поле со списком и присвойте ему значение Approved For Publishing (Утвержден для публикации), как показано на рис. 20.

Full-size version of the screenshot

Добавьте действие CopyItem в область Then под UpdateListItem, как показано на рис. 21. Настройте его для копирования текущего элемента из текущего списка в библиотеку Published Documents (Опубликованные документы). Присвойте параметру Overwrite (Перезапись) значение true — допустим, что источником всех опубликованных документов является библиотека Draft Documents, и поэтому в списке не будет повторяющихся имен файлов.

Full-size version of the screenshot

Теперь добавим действие UpdateListItem в область Else (То). На этот раз мы хотим присвоить документу статус Rejected (Отклонен). На рис. 22 показан завершенный рабочий процесс.

Full-size version of the screenshot 

Мы закончили создание рабочего процесса «Утверждение и маршрутизация документов SharePoint» с чистого листа. Теперь попробуйте повторить это самостоятельно и сообщите нам, что вы думаете о разработке рабочих процессов SharePoint 2013 с помощью средств разработчика Office Developer Tools для Visual Studio 2012!

В дальнейшем будут опубликованы другие примеры и онлайн-документация, посвященные разработке рабочих процессов SharePoint.

Удачи!

Грейс Кочави (Grace Kochavi)

Менеджер программы — группа разработчиков средств для Office и SharePoint

Дополнительная информация