Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Azure Logic Apps (стандартная версия)
Если вы хотите интегрировать бизнес-логику со стандартными рабочими процессами в Azure Logic Apps, можно создать и создать проект обработчика правил Azure Logic Apps с помощью Visual Studio Code. Правила управляют бизнес-логикой для работы бизнес-процессов.
В этом руководстве показано, как создать проект движка правил Azure Logic Apps.
Предварительные требования и настройка для создания проекта подсистемы правил Azure Logic Apps, включая создание бизнес-правил для проекта с помощью Microsoft Rules Composer.
Экспортируйте существующие правила из Microsoft BizTalk Server, если у вас есть.
Создайте проект приложений логики уровня "Стандартный" для обработчика правил Azure Logic Apps с помощью Visual Studio Code.
Предварительные требования
Скачайте и установите Microsoft Rules Composer, который используется для создания наборов правил, бизнес-правил и словарей.
Чтобы создать бизнес для проекта подсистемы правил, ознакомьтесь со следующей документацией:
В этом выпуске только Visual Studio Code поддерживает среду разработки при создании проекта с движком правил для Azure Logic Apps. Сведения о необходимых требованиях для использования Visual Studio Code см. в статье "Создание рабочего процесса стандартного логического приложения в одиночном экземпляре Azure Logic Apps с помощью Visual Studio Code.
Движок правил Azure Logic Apps использует функцию пользовательского кода в Visual Studio Code. Дополнительные сведения об использовании этой возможности см. в статье "Создание и запуск кода платформа .NET Framework из стандартных рабочих процессов в Azure Logic Apps".
Перед созданием проекта
Чтобы обеспечить успешный проект подсистемы правил, просмотрите и выполните следующие общие задачи и рекомендации.
Определите, как бизнес-правила соответствуют бизнес-процессам.
Планирование внедрения бизнес-правил в приложение.
Определите бизнес-логику, которую вы хотите представить с помощью правил в приложении.
Термин "бизнес-логика" может ссылаться на многие вещи. Например, бизнес-логика может быть "Заказы на покупку, превышающие 500 долларов, требуют утверждения руководителя".
Определите источники данных для элементов правила. При необходимости можно определить словари, которые представляют базовые привязки для конкретного домена.
Определите правила для использования из определений словаря или непосредственно из привязок данных. Из этих правил создайте набор правил, представляющий бизнес-логику.
Экспорт правил из Microsoft BizTalk Server
Чтобы повторно использовать существующие правила из Microsoft BizTalk Server, их можно экспортировать. Однако в настоящее время фактические данные базы данных не поддерживаются. Перед экспортом этих правил удалите их или рефакторизуйте в другие типы фактов с помощью Microsoft BizTalk Rules Composer.
На сервере Microsoft BizTalk Server запустите Мастер развертывания механизма бизнес-правил.
На странице «Добро пожаловать в мастер развертывания движка правил» нажмите кнопку «Далее».
На странице "Задача развертывания" выберите "Экспорт политики или словаря в файл" из базы данных и нажмите кнопку "Далее".
На странице "Хранилище политик" в списке SQL Server Name выберите ваш SQL Server. В списке серверов базы данных конфигурации выберите BizTalkRuleEngineDb и нажмите кнопку "Далее".
На странице экспорта политики или словаря в списке политик выберите нужную политику. Чтобы найти и выбрать файл определения, нажмите кнопку Обзор.
Затем нажмите кнопку Далее.
Подтвердите сведения о сервере, базе данных и политике или словаре и нажмите кнопку "Далее".
После завершения импорта или экспорта нажмите кнопку "Далее".
Просмотрите состояние завершения импорта или экспорта и нажмите кнопку "Готово".
Создание проекта с движком правил в Azure Logic Apps
В Visual Studio Code на панели действий выберите значок Azure. (Клавиатура: SHIFT+ALT+A)
В открывающемся окне Azure на панели инструментов раздела "Рабочая область" в меню Azure Logic Apps выберите "Создать рабочую область приложения логики".
В поле "Выбор папки" перейдите в папку и выберите локальную папку, созданную для вашего проекта.
Когда появится окно запроса "Создать рабочую область приложения логики", укажите имя рабочей области:
Этот пример продолжается с MyLogicAppRulesWorkspace.
Когда появится окно запроса "Выбор шаблона проекта для рабочей области приложения логики ", выберите приложение логики с проектом обработчика правил.
Следуйте последующим запросам, чтобы указать следующие примеры значений:
Товар Пример значения Имя функции для проекта функций ФункцияПравила Имя пространства имен для проекта с функциями Contoso Приложение логики: Logic App Шаблон рабочего процесса:
- Рабочий процесс с отслеживанием состояния
- Рабочий процесс без отслеживания состоянияСостояние рабочего процесса Имя рабочего процесса MyRulesWorkflow Выберите "Открыть" в текущем окне.
После завершения этого шага Visual Studio Code создает рабочую область, которая включает проект функций и проект обработчика правил приложения логики, например:
Узел Описание < имя рабочей области> Содержит как проект функции, так и проект потока рабочей логики приложения. Функция Содержит объекты для вашего функционального проекта. Например, файл <function-name>.cs — это файл кода, в котором вы можете написать свой код. Logic App Содержит артефакты для проекта подсистемы правил приложения логики, включая рабочий процесс.
Написание кода обработчика правил
В рабочей области разверните узел "Функции", если он еще не развернут.
< Откройте файл function-name>.cs, который называется RulesFunction.cs в этом примере.
По умолчанию этот файл содержит пример кода, содержащий следующие элементы кода, а также приведенные ранее примеры значений, где это необходимо:
- Имя пространства имен
- Имя класса
- Имя функции
- Параметры функции
- Возвращаемый тип
- Сложный тип
В следующем примере показан полный пример кода для функции с именем
RulesFunction://------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace Contoso { using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Azure.Functions.Extensions.Workflows; using Microsoft.Azure.WebJobs; using Microsoft.Azure.Workflows.RuleEngine; using Microsoft.Azure.Workflows.RuleEngine.Common; using Microsoft.Extensions.Logging; using System.Xml; using System.Text; /// <summary> /// Represents the RulesFunction flow invoked function. /// </summary> public class RulesFunction { private readonly ILogger<RulesFunction> logger; private FileStoreRuleExplorer ruleExplorer; public RulesFunction(ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger<RulesFunction>(); this.ruleExplorer = new FileStoreRuleExplorer(loggerFactory); } /// <summary> /// Executes the logic app workflow. /// </summary> /// <param name="ruleSetName">The rule set name.</param> /// <param name="documentType">document type of input xml.</param> /// <param name="inputXml">input xml type fact</param> /// <param name="purchaseAmount">purchase amount, value used to create .NET fact </param> /// <param name="zipCode">zip code value used to create .NET fact .</param> [FunctionName("RulesFunction")] public Task<RuleExecutionResult> RunRules( [WorkflowActionTrigger] string ruleSetName, string documentType, string inputXml, int purchaseAmount, string zipCode) { /***** Summary of steps below ***** * 1. Get the rule set to Execute * 2. Check if the rule set was retrieved successfully * 3. create the rule engine object * 4. Create TypedXmlDocument facts for all xml document facts * 5. Initialize .NET facts * 6. Execute rule engine * 7. Retrieve relevant updates facts and send them back */ try { var ruleSet = this.ruleExplorer.GetRuleSet(ruleSetName); // Check if ruleset exists if(ruleSet == null) { // Log an error in finding the rule set this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)"); throw new Exception($"RuleSet instance for '{ruleSetName}' was not found."); } // Create rule engine instance var ruleEngine = new RuleEngine(ruleSet: ruleSet); // Create a typedXml Fact(s) from input xml(s) XmlDocument doc = new XmlDocument(); doc.LoadXml(inputXml); var typedXmlDocument = new TypedXmlDocument(documentType, doc); // Initialize .NET facts var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode); // Provide facts to rule engine and run it ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase }); // Send the relevant results(facts) back var updatedDoc = typedXmlDocument.Document as XmlDocument; var ruleExectionOutput = new RuleExecutionResult() { XmlDoc = updatedDoc.OuterXml, PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax() }; return Task.FromResult(ruleExectionOutput); } catch(RuleEngineException ruleEngineException) { // Log any rule engine exceptions this.logger.LogCritical(ruleEngineException.ToString()); throw; } catch(XmlException xmlException) { // Log any xml exceptions this.logger.LogCritical("Encountered exception while handling xml. " + xmlException.ToString()); throw; } catch(Exception ex) { // Log any other exceptions this.logger.LogCritical(ex.ToString()); throw; } } /// <summary> /// Results of the rule execution /// </summary> public class RuleExecutionResult { /// <summary> /// rules updated xml document /// </summary> public string XmlDoc { get; set;} /// <summary> /// Purchase amount post tax /// </summary> public int PurchaseAmountPostTax { get; set;} } } }Определение функции для
RulesFunctionвключает методRunRulesпо умолчанию, который можно использовать, чтобы начать работу. В этом примере методаRunRulesпоказано, как передать параметры в обработчик правил Azure Logic Apps. В этом примере метод передает имя набора правил, тип входного документа, факт XML и другие значения для дальнейшей обработки.Файл <function-name>.cs также включает
ILoggerинтерфейс, который обеспечивает поддержку ведения журнала событий в ресурс «Application Insights». Вы можете отправлять данные трассировки в Application Insights и хранить эти сведения вместе с данными трассировки из рабочих процессов. Файл <function-name>.cs также включает объект, который обращаетсяFileStoreRuleExplorerк набору правил. Как видно, конструктор дляFileStoreRuleExplorerиспользуетloggerFactoryдля отправки данных телеметрии также в Application Insights.private readonly ILogger<RulesFunction> logger; private FileStoreRuleExplorer ruleExplorer; public RulesFunction(ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger<RulesFunction>(); this.ruleExplorer = new FileStoreRuleExplorer(loggerFactory); } <...>Обработчик правил Azure Logic Apps работает, как описано в следующих шагах:
Модуль использует
FileStoreRuleExplorerобъект для доступа к набору правил. Файл набора правил хранится в каталоге Правила для приложения логики "Стандартный".В этом примере файл набора правил
SampleRuleSet.xml, был создан с помощью Microsoft Rules Composer или экспортирован с помощью Microsoft BizTalk Server.
var ruleSet = this.ruleExplorer.GetRuleSet(ruleSetName); // Check if ruleset exists if(ruleSet == null) { // Log an error in finding the rule set this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)"); throw new Exception($"RuleSet instance for '{ruleSetName}' was not found."); }Внимание
Наборы правил содержат ссылки на их факты. Microsoft Rules Composer ищет сборки фактов для проверки набора правил в целях редактирования. Чтобы открыть наборы правил, например
SampleRuleSet.xmlв Microsoft Rules Composer, необходимо разместить их с соответствующими сборками фактов .NET. В противном случае вы получите исключение.Модуль использует
ruleSetобъект для создания экземпляраRuleEngineобъекта.Объект
RuleEngineполучает факты правила с помощьюExecuteметода.В этом примере метод
Executeполучает два факта: XML-факт с именемtypedXmlDocumentи .NET-факт с именемcurrentPurchase.После запуска механизма значения фактов перезаписываются значениями, полученными в результате работы механизма.
// Create rule engine instance var ruleEngine = new RuleEngine(ruleSet: ruleSet); // Create a typedXml Fact(s) from input xml(s) XmlDocument doc = new XmlDocument(); doc.LoadXml(inputXml); var typedXmlDocument = new TypedXmlDocument(documentType, doc); // Initialize .NET facts var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode); // Provide facts to rule engine and run it ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase }); // Send the relevant results(facts) back var updatedDoc = typedXmlDocument.Document as XmlDocument;- Движок использует
RuleExecutionResultпользовательский класс для возврата значений методуRunRules.
var ruleExectionOutput = new RuleExecutionResult() { XmlDoc = updatedDoc.OuterXml, PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax() }; return Task.FromResult(ruleExectionOutput);Замените пример кода функции собственным и измените метод по умолчанию
RunRulesдля собственных сценариев.Этот пример продолжает использовать пример кода без каких-либо изменений.
Компиляция и сборка кода
Завершив написание кода, выполните компиляцию, чтобы убедиться, что ошибки сборки отсутствуют. Проект функции автоматически включает задачи сборки, которые компилируют и добавляют любые пользовательские библиотеки кода, включая сборки фактов .NET, в папку lib\custom в проекте приложения логики, где рабочие процессы ищут пользовательские функции для выполнения. Эти задачи помещают сборки в папку lib\custom\net472 .
В Visual Studio Code в меню терминала выберите новый терминал.
В появившемся списке рабочих каталогов выберите "Функции " в качестве текущего рабочего каталога для нового терминала.
Visual Studio Code открывает окно терминала с командной строкой.
В окне терминала в командной строке введите dotnet restore .\RulesFunction.csproj.
После появления приглашения командной строки введите dotnet build .\RulesFunction.csproj.
Если сборка выполнена успешно, окно терминала сообщает, что сборка выполнена успешно.
Убедитесь, что в проекте приложения логики существуют следующие элементы:
В рабочей области разверните следующие папки: LogicApp, lib\custom, net472. Убедитесь, что вложенная папка с именем net472 содержит несколько сборок, необходимых для запуска кода, включая файл с именем <function-name>.dll.
В рабочей среде разверните следующие папки: LogicApp>lib\custom><function-name>. Убедитесь, что вложенная папка с именем <function-name> содержит файл function.json, который включает метаданные о коде функции, который вы написали. Конструктор рабочих процессов использует этот файл для определения необходимых входных и выходных данных при вызове кода.
В следующем примере показаны примеры созданных сборок и других файлов в проекте приложения логики:
Вызов правил из рабочего процесса
Убедившись, что код компилируется и что проект обработчика правил логики содержит необходимые файлы для выполнения кода, откройте рабочий процесс по умолчанию, включенный в проект приложения логики.
В рабочей области в разделе LogicApp разверните узел <workflow-name>, откройте контекстное меню файла workflow.json и выберите Открыть конструктор.
В открываемом конструкторе рабочих процессов рабочий процесс по умолчанию, включенный в проект приложения логики, отображается со следующим триггером и действиями:
- Встроенный триггер запроса с именем "При получении HTTP-запроса".
- Встроенное действие с именем Вызов функции локальных правил в этом приложении Logic Apps.
- Встроенное действие ответа с именем Response, которое используется для ответа звонящему только при использовании триггера запроса.
Выберите действие с именем Вызов функции локальных правил в этом логическом приложении.
Откроется панель сведений действия с правой стороны.
Проверьте и убедитесь, что значение параметра "Имя функции" задано для функции правил, которую требуется запустить. Просмотрите или измените другие значения параметров, которые использует ваша функция.
Отладка кода и рабочего процесса
Повторите следующие действия, чтобы запустить эмулятор Azurite три раза: по одному разу для следующих служб хранилища Azure.
- Служба BLOB-объектов Azure
- Служба очередей Azure
- Служба таблиц Azure
В меню представления Visual Studio Code выберите палитру команд.
В появившемся запросе найдите и выберите Azurite: Запуск службы BLOB-объектов.
В появившемся списке рабочих каталогов выберите LogicApp.
Повторите эти действия для Azurite: запуск службы очередей и Azurite: запуск службы таблиц.
Если панель задач Visual Studio Code в нижней части экрана отображает три службы хранилища, запущенные, например:
На панели действий Visual Studio Code выберите "Запуск и отладка". (Клавиатура: CTRL+SHIFT+D)
В списке «Запуск и отладка» выберите «Присоединиться к логическому приложению (LogicApp)», если он еще не выбран, и затем выберите «Воспроизвести» (зеленая стрелка).
Откроется окно терминала и отображается процесс отладки. Откроется окно консоли отладки и отображается состояние отладки. В нижней части Visual Studio Code панель задач становится оранжевым, указывая, что отладчик .NET загружается.
Чтобы задать любые точки останова, в определении функции (имя< функции.cs) или определении рабочего процесса (>workflow.json), найдите номер строки, в котором требуется точка останова, и выберите столбец слева, например:
Чтобы вручную запустить триггер запроса в рабочем процессе, откройте страницу обзора рабочего процесса.
В проекте приложения логики откройте контекстное меню файла workflow.json и выберите "Обзор".
На странице обзора рабочего процесса кнопка запуска триггера доступна, если вы хотите вручную запустить рабочий процесс. В разделе "Свойства рабочего процесса" значение URL-адреса обратного вызова — это URL-адрес вызываемой конечной точки, созданной триггером запроса в рабочем процессе. Вы можете отправлять запросы на этот URL-адрес, чтобы инициировать рабочий процесс из других приложений, включая другие рабочие процессы в среде Logic Apps.
На панели инструментов "Обзор" выберите "Запустить триггер".
После запуска рабочего процесса отладчик активирует первую точку останова.
В меню "Запуск" или на панели инструментов отладчика выберите действие отладки.
После завершения выполнения рабочего процесса на странице обзора отображаются завершенный запуск и основные сведения об этом выполнении.
Чтобы просмотреть дополнительные сведения о выполнении рабочего процесса, выберите завершенный запуск. Или в списке рядом с столбцом "Длительность " выберите "Показать запуск".
Чтобы развернуть приложения логики с помощью проекта обработчика правил в Azure Logic Apps, выполните действия, описанные в статье "Подготовка к развертыванию".