Справка по схеме языка определения рабочих процессов в Azure Logic Apps
При создании приложения логики в Azure Logic Apps приложение логики имеет базовое определение рабочего процесса, описывающее реальную логику, выполняемую в приложении логики. Определение рабочего процесса использует JSON и соответствует структуре, проверенной схемой языка определения рабочих процессов. Этот справочник содержит общие сведения об этой структуре и о том, как схема определяет атрибуты в определении рабочего процесса.
Структура определения рабочего процесса
Определение рабочего процесса всегда включает триггер для создания экземпляра приложения логики, а также одно или несколько действий, которые выполняются после срабатывания триггера.
Ниже приведена высокоуровневая структура определения рабочего процесса.
"definition": {
"$schema": "<workflow-definition-language-schema-version>",
"actions": { "<workflow-action-definitions>" },
"contentVersion": "<workflow-definition-version-number>",
"outputs": { "<workflow-output-definitions>" },
"parameters": { "<workflow-parameter-definitions>" },
"staticResults": { "<static-results-definitions>" },
"triggers": { "<workflow-trigger-definitions>" }
}
Атрибут | Обязательное поле | Описание: |
---|---|---|
definition |
Да | Начальный элемент определения рабочего процесса. |
$schema |
Только в случае использования внешней ссылки на определение рабочего процесса | Расположение файла схемы JSON, описывающего версию языка определения рабочего процесса, которую можно найти здесь: https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json |
actions |
No | Определения для одного или нескольких действий, которые будут запущены во время выполнения рабочего процесса. Дополнительные сведения см. в статье Триггеры и действия. Максимальное количество действий: 250. |
contentVersion |
No | Номер версии для вашего определения рабочего процесса (по умолчанию — 1.0.0.0). Чтобы помочь определить и подтвердить правильное определение при развертывании рабочего процесса, укажите значение для использования. |
outputs |
No | Определения для выходных данных, которые возвращаются из рабочего процесса. Дополнительные сведения: Выходные данные. Максимальное количество типов выходных данных: 10. |
parameters |
No | Определения для одного или нескольких параметров, которые передают значения для использования в среде выполнения приложения логики. Дополнительные сведения см. в разделе Параметры. Максимальное количество параметров: 50. |
staticResults |
No | Определения для одного или нескольких статических результатов, возвращаемых действиями в качестве макетных выходных данных, когда для этих действий включены статические результаты. В определении каждого действия атрибут runtimeConfiguration.staticResult.name ссылается на соответствующее определение внутри staticResults . Дополнительные сведения см. в разделе Статические результаты. |
triggers |
No | Определения для одного или нескольких триггеров, которые создают рабочий процесс Можно определить несколько триггеров, но только с помощью языка определения рабочего процесса, а не визуально с помощью конструктора рабочих процессов. Дополнительные сведения см. в статье Триггеры и действия. Максимальное количество триггеров: 10. |
Триггеры и действия
В определении рабочего процесса разделы triggers
и actions
определяют вызовы, которые происходят во время выполнения рабочего процесса. Синтаксис и дополнительные сведения об этих разделах см. в статье Triggers and actions for workflow definitions in Azure Logic Apps (Триггеры и действия для определений рабочих процессов в Azure Logic Apps).
Параметры
Жизненный цикл развертывания обычно имеет различные среды для разработки, тестирования, промежуточного хранения и производства. При развертывании приложений логики в различных средах, скорее всего, потребуется использовать разные значения, например строки подключения, в зависимости от потребностей развертывания. Вы также можете иметь значения, которые нужно повторно использовать в приложении логики без жесткой фиксации или частого изменения. В разделе parameters
определения рабочего процесса можно определить или изменить параметры для значений, которые приложение логики использует во время выполнения. Прежде чем можно будет ссылаться на эти параметры в любом расположении в определении рабочего процесса, необходимо сначала определить эти параметры.
Ниже приведена общая структура определения параметров:
"parameters": {
"<parameter-name>": {
"type": "<parameter-type>",
"defaultValue": <default-parameter-value>,
"allowedValues": [ <array-with-permitted-parameter-values> ],
"metadata": {
"description": "<parameter-description>"
}
}
},
Атрибут | Обязательное поле | Type | Описание |
---|---|---|---|
<parameter-name> | Да | Строка | Имя параметра, который требуется определить |
<parameter-type> | Да | int, float, string, bool, array, object, securestring, secureobject Примечание. Для всех паролей, ключей и секретов используйте типы securestring или secureobject , потому что операция GET не возвращает эти типы. Дополнительные сведения о защите параметров см. в разделе Рекомендации по безопасности для действий и входных параметров. |
Тип параметра. |
<default-parameter-value> | Да | То же, что type |
Значение параметра по умолчанию, если значение не задано при создании экземпляра рабочего процесса. Атрибут defaultValue является обязательным, чтобы конструктор приложений логики мог правильно отобразить параметр, но можно указать пустое значение. |
<array-with-permitted-parameter-values> | No | Массив | Массив со значениями, которые может принимать параметр. |
<parameter-description> | No | Объект JSON | Любые другие сведения о параметрах, например описание параметра. |
Затем создайте шаблон Azure Resource Manager для определения рабочего процесса, определите параметры шаблона, которые принимают значения, необходимые при развертывании, замените жестко зафиксированные значения ссылками на параметры определения шаблона или рабочего процесса и сохраните значения для использования при развертывании в отдельном файле параметров. Таким образом, вы сможете легко изменить эти значения с помощью файла параметров без необходимости обновлять и повторно развертывать приложение логики. Для получения конфиденциальной информации или защиты, например имен пользователей, паролей и секретов, можно сохранить эти значения в Azure Key Vault и получить эти значения из хранилища ключей. Дополнительные сведения и примеры определения параметров на уровнях определения шаблона и рабочего процесса см. в разделе Обзор. Автоматизация развертывания приложений логики с помощью шаблонов Azure Resource Manager.
Статические результаты
В атрибуте staticResults
определите макет действия outputs
и status
, который будет возвращен при включении статического параметра результата действия. В определении действия атрибут runtimeConfiguration.staticResult.name
ссылается на имя статического определения результата в staticResults
. Узнайте, как протестировать рабочие процессы приложения логики с помощью макетных данных, настроив статические результаты.
"definition": {
"$schema": "<...>",
"actions": { "<...>" },
"contentVersion": "<...>",
"outputs": { "<...>" },
"parameters": { "<...>" },
"staticResults": {
"<static-result-definition-name>": {
"outputs": {
<output-attributes-and-values-returned>,
"headers": { <header-values> },
"statusCode": "<status-code-returned>"
},
"status": "<action-status>"
}
},
"triggers": { "<...>" }
}
Атрибут | Обязательное поле | Type | Описание |
---|---|---|---|
<static-result-definition-name> | Да | Строка | Имя статического определения результата, на которое может ссылаться на определение действия через объект runtimeConfiguration.staticResult . Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения. Можно использовать любое уникальное имя. По умолчанию к этому уникальному имени добавляется номер, который увеличивается при необходимости. |
<output-attributes-and-values-returned> | Да | Различается | Требования к этим атрибутам зависят от различных условий. Например, если status имеет значение Succeeded , атрибут outputs содержит атрибуты и значения, возвращаемые действием в качестве фиктивных выходных данных. Если status имеет значение Failed , атрибут outputs содержит атрибут errors , который является массивом с одним или несколькими объектами message , содержащими сведения об ошибках. |
<header-values> | No | JSON | Все значения заголовка, возвращаемые действием |
<status-code-returned> | Да | Строка | Код состояния, возвращаемый действием |
<action-status> | Да | Строка | Статус действия, например Succeeded или Failed |
Например, в этом определении HTTP-действия атрибут runtimeConfiguration.staticResult.name
ссылается на атрибут HTTP0
в атрибуте staticResults
, где определены макеты выходных данных для действия. runtimeConfiguration.staticResult.staticResultOptions
Атрибут указывает, что параметр статического результата имеет значение Enabled
в действии HTTP.
"actions": {
"HTTP": {
"inputs": {
"method": "GET",
"uri": "https://www.microsoft.com"
},
"runAfter": {},
"runtimeConfiguration": {
"staticResult": {
"name": "HTTP0",
"staticResultOptions": "Enabled"
}
},
"type": "Http"
}
},
Действие HTTP возвращает выходные данные в определении HTTP0
в staticResults
. В этом примере для кода состояния макетом выходных данных будет OK
. Для значений заголовков макетом выходных данных будет "Content-Type": "application/JSON"
. Для состояния действия макетом выходных данных будет Succeeded
.
"definition": {
"$schema": "<...>",
"actions": { "<...>" },
"contentVersion": "<...>",
"outputs": { "<...>" },
"parameters": { "<...>" },
"staticResults": {
"HTTP0": {
"outputs": {
"headers": {
"Content-Type": "application/JSON"
},
"statusCode": "OK"
},
"status": "Succeeded"
}
},
"triggers": { "<...>" }
},
Выражения
При работе с JSON вы можете иметь литеральные значения, которые существуют во время разработки, например:
"customerName": "Sophia Owen",
"rainbowColors": ["red", "orange", "yellow", "green", "blue", "indigo", "violet"],
"rainbowColorsCount": 7
Вы также можете использовать значения, которые не существуют до начала времени выполнения. Чтобы представить эти значения, можно использовать выражения, которые вычисляются во время выполнения. Выражение представляет собой последовательность, которая может содержать одну или несколько функций, операторов, переменных, явных значений или констант. В определении рабочего процесса вы можете использовать выражение в любом месте в строчном значении JSON, указав его вместе с префиксом "\@\". При вычислении выражения, представляющего значение JSON, тело выражения извлекается без символа @ и всегда приводит к другому значению JSON.
Например, вы можете получить значение для ранее определенного свойства customerName
, используя функцию parameters() в выражении, и присвоить это значение свойству accountName
:
"customerName": "Sophia Owen",
"accountName": "@parameters('customerName')"
Интерполяция строк также позволяет использовать несколько выражений внутри строк, которые начинаются символом @ и заключены в фигурные скобки ({}). Ниже приведен синтаксис.
@{ "<expression1>", "<expression2>" }
Результат всегда является строкой, что делает эту функцию аналогичной функции concat()
, например:
"customerName": "First name: @{parameters('firstName')} Last name: @{parameters('lastName')}"
Если у вас есть строковый литерал, начинающийся с символа @, добавьте перед символом @ другой символ @ в качестве escape-символа: @@.
В примерах ниже показано, как вычисляются выражения.
Значение JSON | Результат |
---|---|
"Sophia Owen" | Возвращаются символы: "Sophia Owen". |
"array[1]" | Возвращаются символы: "array[1]". |
"@@" | Эти символы возвращаются в виде строки с одним символом: \"\@\". |
" @" | Эти символы возвращаются в виде строки с двумя символами: \" \@\". |
Для этих примеров предположим, что вы определяете "myBirthMonth" равным "January", а "myAge" равным числу 42:
"myBirthMonth": "January",
"myAge": 42
В примерах ниже показано, как вычисляются выражения.
Выражение JSON | Результат |
---|---|
"@parameters('myBirthMonth')" | Возвращается строка: "January". |
"@{parameters('myBirthMonth')}" | Возвращается строка: "January". |
"@parameters('myAge')" | Возвращается число: 42. |
"@{parameters('myAge')}" | Возвращается число как строка: "42". |
"My age is @{parameters('myAge')}" | Возвращается строка: "My age is 42". |
"@concat('My age is ', string(parameters('myAge')))" | Возвращается строка: "My age is 42". |
"My age is @@{parameters('myAge')}" | Возвращается строка, содержащая выражение: "My age is @{parameters('myAge')}`. |
При визуальной работе в конструкторе рабочих процессов можно создавать выражения с помощью редактора выражений, например:
Когда вы закончите, выражение появится для соответствующего свойства в определении рабочего процесса, например свойства searchQuery
:
"Search_tweets": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['x']['connectionId']"
}
}
},
"method": "get",
"path": "/searchtweets",
"queries": {
"maxResults": 20,
"searchQuery": "Azure @{concat('firstName','', 'LastName')}"
}
},
Выходные данные
В разделе outputs
определите данные, которые ваш рабочий процесс может вернуть при завершении работы. Например, чтобы отслеживать определенное состояние или значение из каждого выполнения, укажите, что в возвращенных выходных данных рабочего процесса должны содержаться такие данные.
Примечание.
При реагировании на входящие запросы из REST API службы не используйте outputs
. Вместо этого используйте тип действия Response
.
Дополнительные сведения см. в статье Triggers and actions for workflow definitions in Azure Logic Apps (Триггеры и действия для определений рабочих процессов в Azure Logic Apps).
Ниже приведена общая структура определения выходных данных.
"outputs": {
"<key-name>": {
"type": "<key-type>",
"value": "<key-value>"
}
}
Атрибут | Обязательное поле | Type | Описание |
---|---|---|---|
<key-name> | Да | Строка | Имя ключа для возвращаемого значения в выходных данных. |
<key-type> | Да | int, float, string, securestring, bool, массив, объект JSON | Тип возвращаемого значения в выходных данных. |
<значение ключа> | Да | То же, что и <key-type> | Возвращаемое значение в выходных данных. |
Чтобы получить результат выполнения рабочего процесса, просмотрите журнал выполнения и подробности приложения логики на портале Azure или используйте REST API рабочих процессов. Также можно передать выходные данные во внешние системы, например Power BI, для создания панели мониторинга.
Операторы
В выражениях и функциях операторы выполняют определенные задачи, такие как ссылка на свойство или значение в массиве.
Оператор | Задача |
---|---|
' |
Чтобы использовать строковый литерал как входные данные или указать его в выражениях и функциях, поместите строку в одинарные кавычки, например '<myString>' . Не используйте двойные кавычки ("" ), которые конфликтуют с форматированием JSON вокруг всего выражения. Например: Да: length('Hello') No: length("Hello") Когда вы передаете массивы или числа, их не нужно заключать в какие-либо символы. Например: Да: длина ([1, 2, 3]) Нет: длина ("[1, 2, 3]") |
[] |
Чтобы ссылаться на значение по определенной позиции (индексу) в массиве или внутри объекта JSON, используйте квадратные скобки, например: — Чтобы получить второй элемент в массиве: myArray[1] — Для доступа к свойствам внутри объекта JSON: Пример 1. setProperty(<object>, '<parent-property>', addProperty(<object>['<parent-property>'], '<child-property>', <value>) Пример 2. lastIndexOf(triggerBody()?['subject'],'some string') |
. |
Для указания ссылки на свойство в объекте используйте оператор "точка". Например, чтобы получить name свойство для customer объекта JSON: "parameters('customer').name" |
? |
Чтобы ссылаться на свойства NULL в объекте без ошибки среды выполнения, используйте оператор NULL-ignore (?). Например, для обработки выходных данных NULL из триггера можно использовать следующее выражение: coalesce(trigger().outputs?.body?['<someProperty>'], '<property-default-value>') |
Функции
Некоторые выражения получают значения из действий среды выполнения, которые могут не существовать при запуске определения рабочего процесса. Чтобы работать с этими значениями или ссылаться на них в выражениях, можно использовать функции, предоставляемые языком определения рабочего процесса.
Следующие шаги
- Дополнительные сведения о действиях и триггерах языка определения рабочих процессов.
- Дополнительные сведения, о том как программным способом создавать приложения логики и управлять ими с помощью REST API рабочих процессов.