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


Набор средств внешнего набора правил

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

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

Примечание.

Для этого примера требуется Microsoft SQL Server.

Visual Studio предоставляет редактор RuleSet в составе Windows Workflow Foundation (WF). Редактор запускается двойным щелчком действия Policy в рабочем процессе; редактор выполняет сериализацию объекта набора правил в файл с расширением RULES, связанный с рабочим процессом (действие Policy запускает экземпляр набора правил из рабочего процесса). При построении проекта рабочего процесса выполняет компиляция в сборку файла с расширением RULES как ресурса.

Компоненты данного образца включают следующее:

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

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

  • Действие ExternalPolicy запрашивает набор правил из службы набора правил и запускает набор правил из рабочего процесса.

Взаимодействие компонентов показано на следующем рисунке. В следующих разделах приведено описание каждого из компонентов.

Diagram showing the External RuleSet Toolkit sample overview.

Средство "RuleSet"

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

Screenshot showing the RuleSet Browser.

Средство "RuleSet" служит для применения основного и вспомогательного номеров версий к наборам правил, что позволяет одновременно создавать и хранить несколько версий (средство не предоставляет возможности блокировки или другие возможности управления конфигурацией, помимо поддержки версий). С помощью данного средства можно создавать новые версии набора правил или удалять существующие версии. При нажатии кнопки "Создать" средство создает новое имя набора правил и применяет версию 1.0. При копировании версии средство создает копию выбранной версии набора правил, включая содержащиеся правила, и присваивает новые уникальные номера версий. Эти номера версий основаны на номерах версий существующих наборов правил. Имя и номера версий набора правил можно изменить с помощью связанных полей на форме.

При нажатии кнопки "Изменить правила" запускается редактор RuleSet, как показано на следующем рисунке:

Screenshot showing the RuleSet Editor.

Это повторное размещение диалогового окна редактора, которое входит в надстройку Windows Workflow Foundation Visual Studio. Оно предоставляет тот же набор функциональных возможностей, включая поддержку Intellisense. Правила создаются для целевого типа (например, рабочего процесса), связанного с набором правил в средстве; При нажатии кнопки "Обзор" в главном диалоговом окне появится диалоговое окно "Селектор рабочего процесса или типа", как показано на рис. 4.

Workflow /Type Selection

Рисунок 4. Выбор рабочего процесса или типа

Диалоговое окно выбора рабочего процесса и типа можно использовать для указания сборки и определенного типа в этой сборке. Этот тип является конечным типом, по которому создаются (и запускаются) правила. В большинстве случаев конечным типом является рабочий процесс или какой-либо другой тип действия. Тем не менее можно запустить набор правил по любому типу .NET.

Путь к файлу сборки и набору правил типа name are stored with the в базе данных, чтобы при извлечении набора правил из базы данных средство пытается автоматически загрузить целевой тип.

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

Screenshot showing the Validation Errors dialog.

В меню "Данные" в средстве можно импортировать и экспортировать наборы правил. При нажатии кнопки "Импорт" появится диалоговое окно выбора файлов, из которого можно выбрать файл правил. Это может быть или не может быть файлом, изначально созданным в Visual Studio. В RULES-файле должен содержаться сериализованный экземпляр RuleDefinitions с коллекцией условий и коллекцией наборов правил. Средство не использует коллекцию условий, но использует RuleDefinitions формат .rules, чтобы разрешить взаимодействие с средой Visual Studio.

После выбора файла .rules появится диалоговое окно выбора набора правил. Можно использовать диалоговое окно для выбора наборов правил из файла, который требуется импортировать (по умолчанию указаны все наборы правил). Наборы правил в RULES-файле не содержат номеров версии, поскольку их версии в рамках проекта WF совпадают с версией сборки. Во время импорта средство автоматически назначает следующий доступный основной номер версии (который можно изменить после импорта); Номера назначенных версий можно просмотреть в списке селектора набора правил.

Для каждого импортируемого набора правил средство пытается поместить связанный тип из папки bin\Debug в местоположение RULES-файла (если есть), в зависимости от членов, используемых в наборе правил. Если средство обнаруживает несколько соответствующих типов, оно пытается выбирать тип в соответствии с совпадением между именем RULES-файла и именем типа (например, тип Workflow1 соответствует файлу "Workflow1.rules"). При наличии нескольких совпадений предлагается выбрать тип. Если этот механизм автоматической идентификации не удается найти соответствующую сборку или тип, то после импорта можно нажать кнопку "Обзор " в диалоговом окне основного инструмента, чтобы перейти к соответствующему типу. На следующем рисунке показан селектор набора правил:

Screenshot showing the RuleSet Selector dialog.

При нажатии кнопки "Экспорт данных" в главном меню инструментов появится диалоговое окно выбора набора правил, из которого можно определить наборы правил из базы данных, которую следует экспортировать. При нажатии кнопки "ОК" появится диалоговое окно "Сохранить файл ", в котором можно указать имя и расположение результирующего файла правил .rules. Поскольку в RULES-файл не содержатся сведения о версии, для заданного имени набора правил можно выбрать только одну версию набора правил.

Действие "PolicyFromService".

Код для действия PolicyFromService является прямолинейным. Функционирование этого кода во многом аналогично действию Policy, предоставляемому в WF, однако вместо извлечения конечного набора правил из RULES-файла данный код выполняет вызов службы размещения, чтобы получить экземпляр набора правил. Затем код запускает набор правил из экземпляра действия корневого рабочего процесса.

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

После того, как действие помещено в рабочий процесс, необходимо указать имя набора правил, который требуется запустить. Можно ввести имя как буквенное значение, либо выполнить привязку к переменной рабочего процесса или свойству другого действия. Дополнительно можно задать номера версий для конкретного набора правил, который требуется запустить. Если оставить значение по умолчанию "0" для основного и вспомогательного номеров версий, действию будет автоматически присвоен номер последней версии в базе данных.

Служба "RuleSet"

Эта служба отвечает за извлечение заданной версии набора правил из базы данных и ее возврат в вызывающее действие. Как уже обсуждалось ранее, если значения основной и вспомогательной версии, переданные в вызов GetRuleSet оба равны "0", служба выполняет извлечение последней версии. На этой стадии не выполняется кэширование определений или экземпляров набора правил; также, отсутствуют функции пометки версий набора правил как "развертываемых", чтобы отличить их от наборов правил в процессе выполнения.

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

Запуск средства

  1. В папке, в которой задана таблица набора правил, используемая средством и службой, также содержится файл "Setup.sql". Можно запустить пакетный файл "Setup.cmd", чтобы создать базу данных правил в SQL Express и задать таблицу набора правил.

  2. При редактировании пакетного файла или файла "Setup.sql", если использование SQL Express или размещение таблицы в базе данных с именем, отличным от Rules, не задано, файлы конфигурации приложения в средстве "RuleSet" и проекты UsageSample следует редактировать, используя одинаковые сведения.

  3. После запуска скрипта "Setup.sql" можно построить решение ExternalRuleSetToolkit, а затем запустить средство "RuleSet" из проекта "ExternalRuleSetTool".

  4. Решение консольного приложения последовательного рабочего процесса RuleSetToolkitUsageSample включает образец рабочего процесса. Рабочий процесс включает действие PolicyFromService и две переменные: orderValue и discount, для которых выполняется запуск конечного набора правил.

  5. Чтобы использовать этот образец, необходимо построить решение RuleSetToolkitUsageSample. Затем в главном меню средства RuleSet щелкните "Импорт данных" и наведите указатель на файл DiscountRuleSet.rules в папке RuleSet набор средств UsageSample. Выберите пункт меню "Сохранить хранилище правил", чтобы сохранить импортированный набор правил в базу данных.

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

    • Щелкните правой кнопкой мыши панель элементов и выберите пункт " Выбрать элементы " (это может занять некоторое время).

    • Когда появится диалоговое окно "Выбор элементов панели элементов", перейдите на вкладку "Действия ".

    • Перейдите к сборке PolicyActivitiesExternalRuleSetToolkit в решении и нажмите кнопку "Открыть".

    • Убедитесь, что PolicyFromService действие выбрано в диалоговом окне "Выбор элементов панели элементов" и нажмите кнопку "ОК".

    • Теперь действие должно отображаться на панели элементов в категории "Набор правил набор средств UsageSample Components.

  7. Служба "RuleSet" уже настроена на узле консольного приложения с помощью приведенного ниже оператора в файле "Program.cs".

    workflowRuntime.AddService(new RuleSetService());
    
  8. Можно также настроить службу на узле с помощью файла конфигурации. Дополнительные сведения см. в документации по пакету SDK.

  9. Файл конфигурации приложения добавляется в проект рабочего процесса, чтобы указать строку подключения для базы данных, которая будет использоваться службой. Средством "RuleSet" должна использоваться та же строка подключения, что указывает на базу данных, содержащую таблицу набора правил.

  10. Теперь можно выполнить проект RuleSetToolkitUsageSample, а также остальные консольные приложения рабочего процесса. Нажмите клавишу F5 или CTRL+F5 в Visual Studio или запустите файл RuleSet набор средств UsageSample.exe напрямую.

    Примечание.

    Чтобы повторную скомпилировать выборку использования, необходимо закрыть средство "RuleSet", поскольку средство загружает сборку выборки использования.