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


Создание действий изолированного рабочего процесса

Дата последнего изменения: 16 июля 2010 г.

Применимо к: SharePoint Server 2010

В этой статье
Сценарий использования действия изолированного рабочего процесса
Типичные сценарии использования действий изолированного рабочего процесса
Советы по использованию действий изолированного рабочего процесса

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

Данный раздел соответствует примеру "Изолированный рабочий процесс", входящий в состав SDK Microsoft SharePoint 2010. Дополнительные сведения о том, как получить этот пример, см. в разделе Пример кода: изолированный рабочий процесс.

Действия изолированного рабочего процесса — это функции в коде, используемые в конструкторе декларативных рабочих процессов и вызываемые из декларативного рабочего процесса. Действие изолированного рабочего процесса создается в Microsoft Visual Studio и загружается в коллекцию решений SharePoint. Эти действия запускаются изолированно, что гарантирует защиту ключевого системного процесса и соблюдение границ.

С помощью действий изолированного рабочего процесса можно однократно считать элемент из внешнего списка и сохранить его для повторного использования. Это позволяет сократить количество операций чтения из внешнего списка, которые в противном случае пришлось бы выполнить при работе с действиями рабочего процесса SharePoint. При чтении столбца из внешнего списка с помощью действий встроенного рабочего процесса SharePoint вызываются методы Read List (Finder) и Read Item (SpecificFinder), что необязательно. Действия изолированного рабочего процесса предотвращают необязательные вызовы, уменьшая таким образом нагрузку на внешнюю систему.

Сценарий использования действия изолированного рабочего процесса

Как правило, рабочий процесс со службами Microsoft Business Connectivity Services (BCS) следует использовать в тех случаях, когда утверждение выполняется на основе условия, а условие зависит от значения, хранящегося во внешней системе. Рассмотрим, например, сценарий утверждения расходов, в котором отчет о расходах отправляется на утверждение начальнику только в том случае, если общая сумма расходов превышает безопасный лимит. Если сумма расходов не превышает безопасный лимит, расходы утверждаются автоматически и не требуют явного утверждения. Поскольку безопасный лимит может меняться, его значение хранится во внешней системе и загружается рабочим процессом из внешнего списка.

В примере ниже приведены инструкции по созданию внешнего списка, основанного на внешнем типе контента SafeLimit, рабочего процесса и переменной подстановки.

ПримечаниеПримечание

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

Создание рабочего процесса безопасного лимита с помощью действий SharePoint Designer

  1. Создайте в SharePoint Designer внешний тип контента и присвойте ему имя SafeLimit.

    Внешний тип контента должен включать два поля: EmployeeID и Limit (для значения безопасного лимита).

  2. Создайте на основе внешнего типа контента SafeLimit внешний список и присвойте ему имя SafeLimits.

  3. Создайте библиотеку документов для отчетов о расходах и присвойте ей имя ExpenseReports. Добавьте столбец для кода сотрудника EmployeeID.

  4. В SharePoint Designer в библиотеке документов ExpenseReports нажмите кнопку Создать рабочий процесс списка.

  5. Введите имя и описание рабочего процесса и нажмите кнопку Продолжить.

    Теперь можно добавить новые действия в конструкторе процессов.

  6. Вставьте действие Задать переменную рабочего процесса.

    1. Щелкните гиперссылку переменной рабочего процесса, а затем выберите команду Создать новую переменную.

      Присвойте новой переменной имя SafeLimit.

    2. Щелкните значение и нажмите кнопку fx, чтобы создать подстановку из внешнего списка.

    3. В качестве Источника данных выберите внешний список SafeLimits.

      Из этого источника данных будут выбираться значения безопасного лимита.

    4. Для параметра Поле из источника выберите поле, в котором будет отображаться безопасный лимит. В данном примере это поле называется Limit.

  7. Укажите, как будет осуществляться поиск элемента. В данном сценарии поиск элемента во внешнем списке осуществляется по коду сотрудника, поэтому для параметра Поле выберите поле EmployeeID.

  8. Выберите искомое значение. В данном сценарии выбирается поле EmployeeID из текущего элемента, поэтому нажмите в диалоговом окне кнопку fx.

  9. В открывшемся диалоговом окне выберите для параметра Источник данных значение Текущий элемент, а для параметра Поле из источникаEmployeeID.

    На рис. 1 показано диалоговое окно поиска.

    Рис. 1. Диалоговое окно поиска безопасного лимита

    Просмотр переменной

  10. Чтобы создать переменную подстановки, нажмите кнопку ОК.

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

    Рис. 2. Предупреждение поиска

    Предупреждение о поиске нескольких значений

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

Создание действия изолированного рабочего процесса

  1. В примере Пример кода: изолированный рабочий процесс реализованы действия, описанные в данном разделе. На верхнем уровне действие однократно считывает элемент, а затем считывает остальные свойства в рамках одной транзакции с внешней системой. Это действие также должно отображаться в Microsoft SharePoint Designer 2010, чтобы другие пользователи также могли создавать рабочие процессы для списка. Поскольку в SharePoint Designer не поддерживаются циклы, действие не может возвращать массив элементов. Вместо этого необходимо создать действие, считывающее элемент и сохраняющее его свойства в XML-строку. Затем будет создано другое действие, считывающее из этой XML-строки значение конкретного поля в переменную SharePoint Designer. Это действие можно оптимизировать, например, сохранять только значения, необходимые для чтения, однако в данном примере реализован наиболее общий и пригодный для повторного использования подход, при котором возвращаются свойства элемента с любым набором свойств.

    Метод с указанной ниже сигнатурой считывает значения из внешнего списка.

    public static Hashtable GetExternalListItemByField(SPUserCodeWorkflowContext context, String externalListId, string fieldName, string fieldValue)
    

    Этот метод получает идентификатор (ID) внешнего списка и находит в этом списке первый элемент, для которого поле "fieldname" принимает значение "fieldValue". После нахождения элемента метод заносит каждое поле в таблицу данных и сохраняет ее в формате XML, что позволяет впоследствии выполнить ее разбор. Функция достаточно универсальна, чтобы работать и с элементами списков SharePoint. Это позволяет повысить производительность, поскольку метод поиска и конкретный метод поиска вызываются только один раз и возвращают все свойства, однако при этом по-прежнему необходимо вызывать метод поиска. Действие можно оптимизировать таким образом, чтобы метод поиска вызывался только два раза; это будет рассмотрено ниже.

  2. После считывания элемента вызовите метод с указанной ниже сигнатурой для поиска полей, заданных в параметре value.

    public static Hashtable GetItemDataFromString(SPUserCodeWorkflowContext context, string itemData, string value) 
    

    Этот метод принимает через параметр itemData XML-строку со всеми свойствами элемента, восстанавливает таблицу данных и выполняет поиск поля, указанного в параметре value. Хотя при каждом вызове функции требуется повторная загрузка таблицы данных, это работает намного быстрее, чем обращение к внешней системе. При этом можно не задавать в коде отображаемые столбцы, а позволить их выбрать пользователю SharePoint Designer.

    Еще один файл проекта, который представляет интерес, — это файл elements.xml в каталоге BCSWorkflowActivities. В данном файле указывается, как изолированное действие будет представлено в SharePoint Designer и как пользователь SharePoint Designer может сопоставлять свойства. Подробное описание файла выходит за рамки данного раздела, однако он имеет ту же базовую структуру, что и файл ACTIONS.xml в Office SharePoint Designer 2007.

Использование примера "Изолированные действия BCS"

  1. В Центре загрузки Майкрософт загрузите и разархивируйте пример "Изолированные действия BCS" (см. статью Справочник по SharePoint 2010: пакет SDK (Возможно, на английском языке).)

  2. Откройте пример в Visual Studio 2010.

  3. Чтобы построить решение, нажмите клавишу F6.

  4. Развертывание решения.

    При развертывании решения на другом компьютере можно воспользоваться пакетом решения (WSP-файлом), созданным на шаге 3, выполнив указанные ниже действия.

    1. На странице Параметры сайта в разделе Коллекции выберите параметр Решения.

    2. Загрузите WSP-файл и активируйте его.

Создание рабочего процесса

  1. Создайте в SharePoint Designer внешний тип контента и присвойте ему имя SafeLimit.

    Внешний тип контента должен включать следующие поля: EmployeeID, EquipmentLimit, EquipmentApprover, MoraleLimit, MoralApprover, TravelLimit и TravelApprover.

  2. Создайте для внешнего типа контента SafeLimit внешний список и присвойте ему имя SafeLimits.

  3. Создайте библиотеку документов для отчетов о расходах и назовите ее ExpenseReports.

  4. Добавьте два столбца для полей EmployeeID и ExpenseType.

    Поле ExpenseType должно быть полем выбора со следующими возможными значениями: Morale, Equipment, Travel.

  5. В SharePoint Designer в библиотеке документов ExpenseReports нажмите кнопку Создать рабочий процесс списка.

  6. Введите имя и описание рабочего процесса и нажмите кнопку Продолжить.

    На этом этапе вы находитесь в конструкторе рабочих процессов и можете добавлять новые действия.

  7. Вставьте действие Получение элемента внешнего списка по полю (изолированная функция).

    1. Выберите в качестве первого параметра внешний список SafeLimits.

    2. С помощью кнопки fx выберите в качестве второго параметра столбец EmployeeID, в котором используется CurrentItem.

    3. В качестве третьего параметра введите EmployeeID.

    4. Выходной параметр можно оставить без изменений (по умолчанию ItemString).

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

    1. В качестве первого параметра введите поле, которое должно отображаться. В данном сценарии используется значение, хранящееся в поле выбора ExpenseType, к которому добавляется Лимит.

    2. В качестве второго параметра выберите переменную ItemString.

    3. Последним параметром является найденное значение; присвойте ему имя limit.

  9. Повторите шаг 8 и добавьте к значению ExpenseType значение Утверждающий (вместо значения Лимит), после чего измените выходной параметр на утверждающего.

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

    Рис. 1. Изолированный рабочий процесс

    Изолированный рабочий процесс

Типичные сценарии использования действий изолированного рабочего процесса

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

  • Чтение из внешнего списка нескольких значений.

  • Написание простой функции, работающей со списками SharePoint и внешними списками.

Советы по использованию действий изолированного рабочего процесса

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

  • Сложные изолированные действия, выполнение которых требует времени.

  • Медленные внешние списки.

  • Среды, в которых одновременно работает множество рабочих процессов.

  • Сценарии, в которых обработка сбоев рабочих процессов невозможна.

Изолированная служба кода может выполнять эти вызовы с учетной записью, отличной от учетной записи пула приложений, поэтому необходимо убедиться, что эта учетная запись настроена в Secure Store.

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