Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Обычно при использовании правил в приложении рабочего процесса правила являются частью сборки. В некоторых сценариях может потребоваться поддерживать наборы правил отдельно от сборки, чтобы их можно было обновлять без перестроения и развертывания сборки рабочего процесса. Этот пример позволяет управлять и изменять наборы правил в базе данных и получать доступ к этим наборам правил из рабочего процесса во время выполнения. Это позволяет запускать экземпляры рабочих процессов для автоматического включения изменений RuleSet.
Пример набора средств внешнего набора правил содержит средство на основе Windows Forms, которое можно использовать для управления версиями RuleSet и редактирования их в базе данных. Он также включает активность и службу хоста для исполнения этих правил.
Замечание
Для этого примера требуется Microsoft SQL Server.
Visual Studio предоставляет редактор RuleSet в составе Windows Workflow Foundation (WF). Этот редактор можно запустить, дважды щелкнув Policy действие в рабочем процессе; он сериализует определенный объект RuleSet в файл правил, связанный с рабочим процессом ( Policy действие запускает экземпляр RuleSet для рабочего процесса). Файл .rules компилируется в сборку как ресурс при сборке проекта рабочего процесса.
К компонентам этого примера относятся следующие компоненты:
Средство графического пользовательского интерфейса RuleSet, которое можно использовать для редактирования версий RuleSet и управления ими в базе данных.
Служба RuleSet, настроенная в приложении-хосте, загружает RuleSets из базы данных.
Действие
ExternalPolicy, запрашивающее набор правил из службы RuleSet и запускающее набор правил для рабочего процесса.
Взаимодействие компонентов показано на следующем рисунке. В разделах, приведенных ниже, описаны все компоненты.
Средство RuleSet
На следующем рисунке показан снимок экрана средства RuleSet. В меню хранилища правил можно загрузить доступные наборы правил из базы данных и сохранить измененные наборы правил обратно в хранилище. Файл конфигурации приложения предоставляет строку подключения базы данных для базы данных RuleSet. При запуске средства он автоматически загружает наборы правил из настроенной базы данных.
Средство RuleSet применяет основные и незначительные номера версий к наборам правил, позволяя одновременно поддерживать и хранить несколько версий (средство не обеспечивает блокировку или другие функции управления конфигурациями в дополнение к возможностям управления версиями). С помощью средства можно создать новые версии RuleSet или удалить существующие версии. При нажатии кнопки "Создать" средство создает новое имя набора правил и применяет версию 1.0. При копировании версии средство создает копию выбранной версии RuleSet, включая содержащиеся правила, и назначает новые уникальные номера версий. Эти номера версий основаны на номерах версий существующих наборов правил. Имя и номера версий набора правил можно изменить с помощью связанных полей в форме.
При нажатии кнопки "Изменить правила" запускается редактор RuleSet, как показано на следующем рисунке:
Это повторное размещение диалогового окна редактора, которое входит в надстройку Windows Workflow Foundation Visual Studio. Он предоставляет те же функции, в том числе поддержку Intellisense. Правила создаются для целевого типа (например, рабочего процесса), связанного с набором правил в средстве; при нажатии кнопки "Обзор" в главном диалоговом окне появится диалоговое окно "Селектор рабочего процесса или типа", как показано на рис. 4.
Рис. 4. Селектор процессов/типов
Диалоговое окно выбора рабочего процесса и типа можно использовать для указания сборки и определенного типа в этой сборке. Этот тип является целевым типом, для которого создаются правила (и выполняются). Во многих случаях целевой тип — это рабочий процесс или другой тип действия. Однако можно запустить набор правил для любого типа .NET.
Путь к файлу сборки и набору правил типа name are stored with the в базе данных, чтобы при извлечении набора правил из базы данных средство пытается автоматически загрузить целевой тип.
При нажатии «ОК» в диалоговом окне «Выбор рабочего процесса или типа» проверяется соответствие выбранного типа набору правил, чтобы убедиться, что целевой тип содержит все элементы, на которые ссылаются правила. Ошибки отображаются в диалоговом окне ошибки проверки. Вы можете продолжить изменение, несмотря на ошибки, или нажмите кнопку "Отмена". В меню "Сервис" в диалоговом окне основного инструмента можно щелкнуть "Проверить ", чтобы повторно проверить версию RuleSet для целевого действия.
В меню "Данные " в средстве можно импортировать и экспортировать наборы правил. При нажатии кнопки "Импорт" появится диалоговое окно выбора файлов, из которого можно выбрать файл правил. Это может быть или не может быть файлом, изначально созданным в Visual Studio. Файл .rules должен содержать сериализованный RuleDefinitions экземпляр, который включает коллекцию условий и коллекцию наборов правил. Средство не использует коллекцию условий, но использует RuleDefinitions формат .rules, чтобы разрешить взаимодействие с средой Visual Studio.
После выбора файла .rules появится диалоговое окно выбора набора правил . Диалоговое окно можно использовать для выбора наборов правил из файла, который требуется импортировать (по умолчанию указывается все наборы правил). Наборы правил в файле правил не имеют номеров версий, так как их управление версиями в проекте WF совпадает с версией сборки. Во время импорта средство автоматически назначает следующий доступный основной номер версии (который можно изменить после импорта); Номера назначенных версий можно просмотреть в списке селектора набора правил .
Для каждого импортируемого набора правил средство пытается найти связанный тип из папки bin\Debug в расположении файла правил .rules (если он существует), на основе элементов, используемых в RuleSet. Если средство находит несколько совпадающих типов, он пытается выбрать тип на основе совпадения между именем файла .rules и именем типа (например, Workflow1 тип соответствует Workflow1.rules). Если существует несколько совпадений, вам будет предложено выбрать тип. Если этому механизму автоидентификации не удается найти соответствующую сборку или тип, то после импорта можно нажать кнопку "Обзор" в диалоговом окне основного инструмента, чтобы перейти к связанному типу. На следующем рисунке показан селектор набора правил:
При нажатии кнопки "Экспорт данных" в главном меню инструментов появится диалоговое окно выбора набора правил , из которого можно определить наборы правил из базы данных, которую следует экспортировать. При нажатии кнопки "ОК" появится диалоговое окно "Сохранить файл ", в котором можно указать имя и расположение результирующего файла правил .rules. Так как файл .rules не содержит сведения о версии, можно выбрать только одну версию RuleSet с заданным именем RuleSet.
Действие PolicyFromService
Код действия PolicyFromService прост. Он работает так же, как Policy активность, предоставленная WF, но вместо получения целевого набора правил из файла .rules, он вызывает хост-сервис для получения экземпляра RuleSet. Затем он запускает RuleSet в корневом экземпляре действия рабочего процесса.
Чтобы использовать действие в рабочем процессе, добавьте ссылку на сборки PolicyActivities и RuleSetService из своего проекта рабочего процесса. См. процедуру в конце этого раздела, чтобы ознакомиться с тем, как добавить действие на инструментальную панель.
После размещения действия в рабочем процессе необходимо указать имя набора правил для запуска. Имя можно ввести как литеральное значение или привязать к переменной рабочего процесса или свойству другого действия. При необходимости можно ввести номера версий для конкретного набора правил, который должен быть запущен. Если вы оставите значение по умолчанию 0 для основных и минорных номеров версий, последний номер версии в базе данных автоматически предоставляется для операции.
Служба RuleSet
Сервис отвечает за извлечение указанной версии RuleSet из базы данных и возврат ее в вызывающую активность. Как упоминалось ранее, если значения основных и дополнительных версий, переданные в GetRuleSet вызове, имеют значение 0, служба получает последнюю версию. На данном этапе нет кэширования определений или экземпляров RuleSet; аналогичным образом, отсутствуют функции для обозначения версий RuleSet как «развернутые», чтобы отличить их от находящихся в разработке RuleSets.
Доступ к базе данных службой должен быть настроен на узле с помощью файла конфигурации приложения.
Чтобы запустить средство
Папка, которая настраивает таблицу RuleSet, используемую инструментом и сервисом, содержит файл Setup.sql. Можно запустить пакетный файл Setup.cmd, чтобы создать базу данных Правил в SQL Express и настроить таблицу RuleSet.
Если вы измените пакетный файл или Setup.sql и укажете, что не следует использовать SQL Express или разместите таблицу в базе данных с именем, отличным от
Rules, то файлы конфигурации приложения в средстве RuleSet иUsageSampleпроектах должны быть изменены с той же информацией.После запуска скрипта Setup.sql можно создать
ExternalRuleSetToolkitрешение, а затем запустить средство RuleSet из проекта ExternalRuleSetTool.Решение
RuleSetToolkitUsageSampleконсольного приложения последовательного рабочего процесса включает пример рабочего процесса. Рабочий процессPolicyFromServiceсостоит из активности и двух переменных,orderValueиdiscount, по которым выполняется целевой набор правил.Чтобы использовать пример, создайте
RuleSetToolkitUsageSampleрешение. Затем в главном меню средства RuleSet щелкните "Импорт данных " и наведите указатель на файл DiscountRuleSet.rules в папке RuleSetToolkitUsageSample. Выберите пункт меню "Сохранить хранилище правил" , чтобы сохранить импортированный набор правил в базу данных.PolicyActivitiesТак как сборка ссылается на пример проекта рабочего процесса,PolicyFromServiceдействие отображается в рабочем процессе. Однако он не отображается на панели элементов по умолчанию. Чтобы добавить его на панель элементов, сделайте следующее:Щелкните правой кнопкой мыши панель элементов и выберите пункт "Выбрать элементы " (это может занять некоторое время).
Когда появится диалоговое окно "Выбор элементов панели элементов" , перейдите на вкладку "Действия ".
Перейдите к сборке
PolicyActivitiesв решенииExternalRuleSetToolkitи нажмите Открыть.Убедитесь, что
PolicyFromServiceдействие выбрано в диалоговом окне "Выбор элементов панели элементов" и нажмите кнопку "ОК".Действие теперь должно появиться в категории Компоненты RuleSetToolkitUsageSample в наборе инструментов.
Служба RuleSet уже настроена на узле консольного приложения с помощью следующей инструкции в Program.cs.
workflowRuntime.AddService(new RuleSetService());Вы также можете настроить службу на узле с помощью файла конфигурации; Дополнительные сведения см. в документации по пакету SDK.
Файл конфигурации приложения добавляется в проект рабочего процесса, чтобы указать строку подключения для базы данных, используемой службой. Это должна быть та же строка подключения, используемая средством RuleSet, которая указывает на базу данных, содержащую таблицу RuleSet.
Теперь вы можете запустить
RuleSetToolkitUsageSampleпроект так же, как и любое другое консольное приложение рабочего процесса. Нажмите клавишу F5 или CTRL+F5 в Visual Studio или запустите файл RuleSetToolkitUsageSample.exe напрямую.Замечание
Для повторной компиляции примера использования необходимо закрыть средство RuleSet, так как средство загружает сборку примера использования.