Поделиться через


Работа с веб-службами в рабочих процессах SharePoint с помощью Visual Studio 2012

Узнайте, как использовать веб-службы в рабочих процессах SharePoint с помощью Visual Studio 2012.

Предоставлено:Эндрю Коннелл, Voitanos

Примечание.

Поддержка рабочих процессов SharePoint 2010 для новых клиентов прекращена с 1 августа 2020 г., и они удалены из существующих клиентов 1 ноября 2020 г. Если вы используете рабочие процессы SharePoint 2010, рекомендуется перейти на Power Automate или другие поддерживаемые решения. Подробная информация приведена в статье Прекращение поддержки рабочих процессов в SharePoint 2010.

К этой статье прилагается пример законченного кода, который можно просматривать во время чтения или брать за основу при создании собственных проектов рабочих процессов SharePoint. Доступный для скачивания код можно найти в коллекции кода MSDN здесь: Работа с веб-службами в рабочих процессах SharePoint с помощью Visual Studio 2012.

Команда рабочих процессов работала с командой Azure, чтобы создать продукт с именем Workflow Manager. Workflow Manager служит для размещения последней версии среды выполнения Windows Workflow Foundation (версии 4) и всех необходимых служб с высоким уровнем доступности и масштабируемости. Производительность и масштабируемость обеспечивает служебная шина Microsoft Azure. Этот диспетчер работает абсолютно одинаково в локальном развертывании и облаке. Затем SharePoint подключается и настраивается, чтобы поручить выполнение рабочих процессов и все связанные с этим задачи ферме Workflow Manager. Одно из самых важных изменений в новой архитектуре рабочих процессов заключается в том, что все настраиваемые рабочие процессы в SharePoint (в том числе созданные с помощью Visual Studio 2012) являются полностью декларативными.

В предыдущих версиях SharePoint рабочие процессы, созданные в Visual Studio 2012, не были исключительно декларативными. Они представляли собой сочетание декларативного кода XAML со скомпилированной сборкой. Управляемая сборка содержала бизнес-логику рабочего процесса. У опытных разработчиков SharePoint может возникнуть следующий вопрос: "Как реализовать пользовательскую бизнес-логику без скомпилированной сборки?". Корпорация Майкрософт предлагает вместо этого создать настраиваемую веб-службу (в идеале — WCF, OData или RESTful), которая возвращает данные в формате нотации объектов JavaScript (JSON), и использовать некоторые новые действия и объекты в этой новой версии.

Сценарии использования веб-служб в рабочих процессах SharePoint

Не сложно представить сценарии, в которых используются настраиваемые веб-службы в рабочем процессе SharePoint. Разработчики, которые создавали рабочие процессы в SharePoint 2007 или SharePoint 2010, привыкли работать с собственным кодом, так как эти рабочие процессы по своей природе были программными. В эти рабочие процессы не требовалось добавлять собственный код, но разработчики часто делали это.

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

Рабочие процессы SharePoint могут использовать любые веб-службы. Тем не менее рабочим процессам проще всего взаимодействовать с веб-службами, которые передают данные по протоколу Open Data ( OData ) в форматах Atom или json. OData — это наиболее подходящий вариант, так как его полностью поддерживают средства разработки рабочих процессов SharePoint (как SharePoint Designer 2013, так и Visual Studio 2012).

Кроме того, поддерживаются как анонимные веб-службы, так и веб-службы, использующие различные типы проверки подлинности. На самом деле, вы полностью контролируете запросы и ответы при каждом вызове службы. Например, можно использовать ряд действий в рабочем процессе для проверки подлинности с помощью одной службы для получения маркера OAuth, а затем включить этот маркер в будущие запросы к службам, защищенным с помощью OAuth 2.0.

Использование веб-служб в рабочих процессах

Работа с веб-службами в рабочих процессах SharePoint состоит из двух этапов. Первый — простой вызов веб-службы, который выполняется с помощью нового действия HttpSend , появившегося в SharePoint. HttpSend позволяет вызывать простейшие веб-службы или для более сложных задач предоставляет команды HTTP и конкретные заголовки HTTP. На рисунке 1 показаны многие свойства, доступные в действии HttpSend .

Рис. 1. Окно инструментов "Свойства" для действия HttpSend

Рис. 1. Окно

Также необходимо указать тип метода, который вы хотите использовать в запросе на обслуживание. Обратите внимание, что на рисунке 1 в блоке Запрос можно указать тип метода (в этом случае — GET). Доступны (среди прочих) следующие типы: GET, PUT, POST и DELETE. Это основной способ определения действий, которые веб-службы, в частности службы RESTful, должны выполнять с ресурсами, определенными в универсальном коде ресурса (URI) действия.

Например, чтобы получить все свойства определенного элемента, Uri должен содержать уникальный адрес элемента, а в качестве метода необходимо задать GET. Чтобы удалить элемент, в качестве Uri используется тот же уникальный адрес элемента, только при этом задается метод DELETE. Это же касается и обновления элемента, при котором используется метод POST. При создании элемента Uri должен указывать на уникальный адрес коллекции, в которой будет создан элемент, а в качестве метода нужно задать POST. При создании или обновлении элементов службам обычно нужны данные, которые передаются в запросе и указываются с помощью свойства RequestContent в действии HttpSend.

Второй этап работы с веб-службами, который мы рассмотрим, включает отправку или получение данных из веб-службы. Независимо от того, какое свойство используется в действии HttpSend ( RequestContent или ResponseContent), данные можно передавать в виде сложной структуры в формате строк Нотация объектов JavaScript (JSON). Вам не придется создавать эти строки json и управлять ими вручную. Корпорация Майкрософт предоставляет новый тип объекта: DynamicValue, который значительно упрощает эту задачу.

Объекты DynamicValue могут хранить иерархические данные, а также ответ веб-службы. Кроме того, с объектами DynamicValue связан ряд действий, с помощью которых можно подсчитать количество элементов в ответе, извлечь значения из ответа либо создать структуру для обновления или создания элементов.

Создание веб-служб для рабочих процессов SharePoint

Так как добавлена поддержка вызова веб-служб и прекращена поддержка пользовательского кода в рабочих процессах, разработчики теперь должны знать, как создавать службы. Настраиваемые веб-службы для использования в рабочих процессах SharePoint можно создавать по-разному. Действие HttpSend и тип данных DynamicValue лучше всего подходят для служб RESTful и служб, которые соответствуют протоколу OData.

OData — это протокол для создания и использования данных на основе принципов служб REST. Он разработан для стандартизации обмена данными с использованием проверенного и надежного протокола HTTP. После создания спецификации OData различные организации реализовали протокол в собственных технологических стеках. Корпорация Майкрософт реализовала собственную версию OData и назвала ее Windows Communication Foundation (WCF) Data Services 5.0.

Службы RESTful, реализованные в SharePoint, поддерживают протокол OData, так как они разработаны с помощью WCF Data Services, а именно WCF Data Services 5.0, которые используют спецификацию OData 3.0.

Реализация операций CRUD-Q службы OData

Веб-службы обычно используются для простых операций по созданию, чтению, обновлению, удалению и отправке запросов (CRUD-Q) с данными в базе данных. WCF позволяет создать службу OData для использования с рабочим процессом SharePoint. При наличии базы данных необходимо выполнить четыре простых действия, почти не требующих написания кода.

  1. Создайте модель базы данных с помощью Entity Framework. При этом не требуется писать код (в Visual Studio доступен мастер).
  2. Создайте службу данных WCF. При этом не требуется писать код (в Visual Studio доступен мастер).
  3. В файле кода службы укажите источник службы в качестве имени модели объекта (созданной на шаге 1), а затем настройте параметры доступа и разрешения для объектов в модели. Для этого требуется написать всего две строки кода.
  4. Опубликуйте службу в расположении, доступном Workflow Manager.

Реализация операций службы OData

Другая задача, для которой используются веб-службы, — реализация бизнес-логики, которая выходит за рамки модели CRUD-Q. Например, рассмотрим службу OData, которая поддерживает операции CRUD-Q для создания банковских кредитов. Предположим, что эта служба также поддерживает вызов со стороны клиентов и предоставление кредитного рейтинга для определения текущей процентной ставки по кредиту. Этот тип задачи выходит за рамки модели CRUD-Q, поскольку включает вызов метода и передачу целого числа для получения ответа.

Службы данных OData и WCF поддерживают этот сценарий, предоставляя операции службы. Операции службы являются общими и даже используются в службах SharePoint, например при получении определенного списка с помощью адреса http://[..]/_api/web/lists/GetByTitle('ListTitle'). Метод GetByTitle — это оператор службы, созданный командой SharePoint. Разработчики создают собственные операции службы в настраиваемых веб-службах, созданных с помощью WCF Data Services.

Пошаговое руководство. Создание рабочего процесса с помощью Visual Studio 2012

В этом пошаговом руководстве показано, как создать собственный рабочий процесс, который вызывает веб-службу OData в базе данных Northwind. Базу данных Northwind можно найти на OData.org.

После завершения пользователи введут код идентификатор клиента, а затем запустят рабочий процесс. При запуске рабочий процесс получает дополнительные сведения о клиенте и обновляет элемент списка собранными данными.

  1. Запустите Visual Studio 2012 и создайте проект приложения, размещенного в SharePoint.

  2. В этом проекте создайте настраиваемый список и присвойте ему имя Customers.

  3. В этом новом списке создайте перечисленные ниже поля. Для каждого поля оставьте тип данных по умолчанию string.

    • Идентификатор клиента (переименованное поле Title, используемое по умолчанию)
    • Имя клиента
    • Должность
    • Адрес
    • Страна или регион
    • Рабочий телефон
    • Номер факса
  4. Теперь добавьте в проект рабочий процесс. Для этого в обозревателе решений выберите Добавить>Новый элемент, а затем в диалоговом окне Добавление нового элемента выберите элемент проекта Рабочий процесс в категории Office/SharePoint.

  5. Присвойте рабочему процессу имя CompleteCustomerDetails и нажмите кнопку Далее.

  6. Когда появится запрос мастера настройки, присвойте рабочему процессу имя Complete Customer Details и задайте для него тип Список. Нажмите кнопку Далее.

  7. На следующей странице мастера установите флажок, чтобы создать связь, выберите список Клиент, а затем команду Создать новый для журнала рабочих процессов и списков задач. Нажмите кнопку Далее.

  8. На последней странице мастера установите флажок, чтобы запустить рабочий процесс вручную. Оставьте параметр для автоматического запуска снимите флажок . Нажмите кнопку Готово.

  9. На этом этапе в Visual Studio отображается рабочая область конструирования рабочих процессов, содержащая одно действие Sequence.

  10. Измените имя действия Sequence на Root.

  11. Добавьте еще четыре действия Sequence внутри действия Root и назовите их, как показано ниже.

    • Инициализация
    • Получение данных клиентов из службы
    • Обработка ответа службы
    • Обновление элемента списка
  12. На этом этапе рабочий процесс выглядит, как показано на рис. 2.

    Рис. 2. Завершение рабочего процесса сведений о клиенте с помощью четырех пустых последовательностей

    Рис. 2. Завершение рабочего процесса

Получение идентификатора клиента, введенного пользователем

Рабочий процесс в первую очередь должен получить идентификатор клиента, введенный пользователем. Для этого необходимо создать две переменные.

  1. Перейдите на вкладку Переменные в нижней части конструктора рабочих процессов и создайте две переменные.

    • CustomerItemProperties (тип данных = DynamicValue; область = Init). Эта переменная используется для хранения результирующего набора, возвращаемого действием, которое получает все свойства из элемента списка.

    Примечание.

    Тип данных DynamicValue не отображается по умолчанию. Чтобы найти его, выберите Выбор типов в столбце Тип переменной. В поле поиска в верхней части диалогового окна введите DynamicValue, а затем выберите Microsoft.Activities.DynamicValue.

    • CustomerId (тип данных — String, область — Root): эта переменная используется для хранения идентификатора клиента, указанного пользователем.
  2. Найдите действие LookupSpListItem в разделе SP — List панели элементов и перетащите его в последовательность Инициализация . Задайте свойства действия, как показано на рис. 3.

    Рис. 3. Окно инструментов "Свойства" для действия LookupSPListItem

    Рис. 3. Окно

    Это действие для Workflow Manager определяет получение свойств текущего элемента списка с помощью REST API SharePoint и хранение ответа JSON в только что созданной переменной DynamicValue.

  3. Получите идентификатор клиента из элемента списка, щелкнув ссылку Получить свойства в действии LookupSpListItem . При этом в область конструктора добавляется действие GetDynamicValueProperties .

  4. В диалоговом окне Свойства нажмите многоточие (...), чтобы открыть окно "Свойства", как показано на рис. 4. В мастере для параметра Тип объекта задайте значение Элемент списка клиентов, а затем добавьте одно свойство CustomerId, задав в столбце "Путь" значение CustomerId, а в столбце "Назначить" — значение CustomerId (ранее созданную переменную), как показано на рисунке ниже.

  5. Нажмите кнопку Создать свойство и введите CustomerId в столбце Путь.

  6. В столбце Назначить введитеCustomerId, который является переменной, созданной ранее. На рисунке 4 показано готовое диалоговое окно "Свойства ".

    Рис. 4. Диалоговое окно свойств для действия GetDynamicValueProperties.

    Рис. 4. Диалоговое окно свойств действия

Вызов веб-службы Northwind OData

Теперь рабочий процесс содержит ссылку на идентификатор клиента, поэтому следующим шагом является вызов веб-службы. Для этого мы в основном будем работать с последовательностью Получение данных клиентов из службы.

  1. Выберите последовательность Получение данных клиентов из службы и создайте две переменные.

    • NorthwindServiceUri (тип данных = String; область = Получение данных клиентов из службы). В этой переменной хранится универсальный код ресурса (URI), который используется для запроса веб-службы.
    • NorthwindServiceResponse (тип данных = DynamicValue; область = Root). В этой переменной будет храниться ответ веб-службы.
  2. Чтобы создать URL-адрес для запроса веб-службы, сначала найдите действие Назначить на панели элементов рабочего процесса, а затем перетащите его в последовательность Получение данных клиентов из службы. Обратите внимание, что действие Назначить состоит из двух частей, представляющий собой пару "имя-значение".

  3. В левой части действия Назначить укажите NorthwindServiceUri.

  4. Задайте для правой части действия строку "http://services.odata.org/Northwind/Northwind.svc/Customers('" + CustomerId + "')?$format=json". На рисунке 5 показано завершенное действие.

    Рис. 5. Назначение действия, используемого для задания переменной, содержащей службу OData

    Рис. 5. Назначение действия

  5. Перетащите действие HttpSend с панели элементов в последовательность Получение данных клиентов из службы и поместите его сразу под действием Назначить.

  6. Задайте для свойств действия HttpSend значения, показанные на рис. 6.

    Рисунок 6. Свойства HttpSend

    Рис. 6. Свойства HttpSend

Обработка ответа веб-службы Northwind OData

Следующим шагом после запроса веб-службы и сохранения результатов в локальной переменной является обработка ответа. Каждое значение в ответе необходимо добавить в отдельную переменную.

  1. Создайте переменную для каждого из полей, созданных в начале этого пошагового руководства (кроме поля "Идентификатор клиента"), которые показаны ниже.

    • Имя клиента
    • Должность
    • Адрес
    • Страна или регион
    • Рабочий телефон
    • Номер факса
  2. Назовите каждую из этих переменных в соответствии с именем поля.

  3. Для всех переменных необходимо задать тип String и область Root.

  4. Добавьте действие GetDynamicValueProperties в последовательность Обработка ответа службы.

  5. В окне Свойства задайте для свойства Source значение NorthwindServiceResponse, как показано на рис. 7.

  6. Нажмите многоточие (...) в окне Свойства, а затем укажите значения в столбцах Путь и Назначить, как показано на рис. 7. Обратите внимание, что значения в столбце Назначить являются переменными, созданными для каждого из полей списка Клиенты.

    Рис. 7. Окно инструментов "Свойства" для getDynamicValueProperties и содержимое диалогового окна "Свойства"

    Рис. 7. Окно

Обновление элемента списка клиентов

Вам остается лишь обновить элемент списка.

  1. Добавьте действие UpdateListItem в последовательность Обновление элемента списка и задайте следующие значения в окне Свойства:

    • ListId: (текущий список);
    • ItemId: (текущий элемент).
  2. Нажмите многоточие (...) для свойства ListItemPropertiesDynamicValues и в появившемся диалоговом окне задайте для параметра Тип объекта значение Элемент списка клиентов.

  3. Наконец, для каждого из значений элементов списка, извлеченных из веб-службы, задайте переменные в рабочем процессе, как показано на рис. 8.

    Рис. 8. Диалоговое окно ListItemPropertiesDynamicValue с заданными значениями

    Рис. 8. Диалоговое окно ListItemPropertiesDynamicValue

Проверка рабочего процесса

Рабочий процесс готов и должен работать. Чтобы убедиться в его стабильности, его следует проверить.

  1. Нажмите клавишу F5, чтобы начать отладку. В Visual Studio будет создано и развернуто приложение, размещенное в SharePoint.

  2. Когда откроется браузер, перейдите к списку Клиенты, создайте одну запись клиента с идентификатором ALFKI, как показано на рис. 9, а затем сохраните этот элемент.

    Рис 9. Новый элемент списка

    Рис. 9. Новый элемент списка

  3. Затем вручную запустите рабочий процесс и вернитесь к элементу списка. Продолжайте обновлять страницу, чтобы увидеть, как рабочий процесс обновляет элемент списка, как показано на рис. 10.

    Рис. 10. Обновленный элемент списка

    Рис. 10. Обновленный элемент списка

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

Заключение

В SharePoint представлена новая архитектура рабочих процессов на основе нового продукта: Workflow Manager 1.0. Чтобы все пользовательские рабочие процессы работали независимо от типа развертывания SharePoint (локального или путем размещения в Office 365), все рабочие процессы теперь на 100 % декларативные. Пользовательская бизнес-логика, которая в предыдущих версиях SharePoint реализовывалась в виде пользовательского кода в рабочих процессах, созданных с помощью Visual Studio, больше не поддерживается.

Корпорация Майкрософт добавила поддержку вызова веб-служб в Workflow Manager с помощью нового действия HttpSend. Кроме того, в Workflow Manager появилась поддержка создания структур для отправки в веб-службы, а также использования их ответов с помощью типа данных DynamicValue. Используйте этот тип данных и связанные действия, чтобы упростить создание и использование надежных бизнес-процессов в рабочих процессах SharePoint с помощью внешних веб-служб.

См. также