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


Справка по схеме языка определения рабочих процессов в Azure Logic Apps

При создании рабочего процесса приложения логики в Azure Logic Apps рабочий процесс содержит базовое определение нотации объектов JavaScript (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>" }
}
Attribute Required Description
definition Yes Начальный элемент определения рабочего процесса.
$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 рабочего процесса можно определить или изменить параметры для значений, которые использует рабочий процесс во время выполнения. Прежде чем можно будет ссылаться на эти параметры в любом расположении в определении рабочего процесса, необходимо сначала определить эти параметры.

Ниже приведена общая структура определения параметров:

"parameters": {
   "<parameter-name>": {
      "type": "<parameter-type>",
      "defaultValue": <default-parameter-value>,
      "allowedValues": [ <array-with-permitted-parameter-values> ],
      "metadata": {
         "description": "<parameter-description>"
      }
   }
},
Attribute Required Type Description
< имя параметра> Yes String Имя параметра, который требуется определить
< тип параметра> Yes int, float, string, bool, array, object, securestring, secureobject



Примечание. Для всех паролей, ключей и секретов используйте securestring или secureobject типы, так как GET операция не возвращает эти типы. Дополнительные сведения о защите параметров см. в разделе Рекомендации по безопасности для действий и входных параметров.
Тип параметра.
< default-parameter-value> Yes То же, что и type Значение параметра по умолчанию, если значение не задано при создании экземпляра рабочего процесса. Атрибут defaultValue необходим, чтобы конструктор рабочих процессов правильно отображал параметр, но можно указать пустое значение.
< массив с разрешенными значениями параметров> No Array Массив со значениями, которые может принимать параметр.
< описание параметра> 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": { "<...>" }
}
Attribute Required Type Description
< статическая результирующий определение-имя> Yes String Имя для статического определения результата, на которое может ссылаться определение действия через объект runtimeConfiguration.staticResult. Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.

Можно использовать любое уникальное имя. По умолчанию к этому уникальному имени добавляется номер, который увеличивается при необходимости.
< возвращаемые выходные атрибуты и значения> Yes Varies Требования к этим атрибутам зависят от различных условий. Например, если status имеет значение Succeeded, атрибут outputs содержит атрибуты и значения, возвращаемые действием в качестве фиктивных выходных данных. Если status имеет значение Failed, атрибут outputs содержит атрибут errors, который является массивом с одним или несколькими объектами message, содержащими сведения об ошибках.
< значения заголовка> No JSON Все значения заголовка, возвращаемые действием
< status-code-returned> Yes String Код состояния, возвращаемый действием
< состояние действия> Yes String Статус действия, например 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": { "<...>" }
},

Expressions

При работе с 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 Result
"София Оуэн" Возвращаются символы: "Sophia Owen".
"array[1]" Верните эти символы: «array[1]».
"@@" Верните этот символ в виде строки с одним символом: '@'.
" @" Эти символы возвращаются в виде строки с двумя символами: \" \@\".

Для этих примеров предположим, что вы определяете "myBirthMonth" равным "January", а "myAge" равным числу 42:

"myBirthMonth": "January",
"myAge": 42

В примерах ниже показано, как вычисляются выражения.

Выражение JSON Result
"@parameters('myBirthMonth')" Возвращается строка: "Январь".
"@{parameters('myBirthMonth')}" Возвращается строка: "Январь".
"@parameters('myAge')" Верните это число: 42.
"@{parameters('myAge')}" Верните это число как строку: "42".
"Мой возраст @{parameters('myAge')}" Возвращается строка: "Мне 42 года".
"@concat('Мой возраст - ', string(parameters('myAge')))" Возвращается строка: "Мне 42 года".
Мой возраст @@{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

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

Note

При реагировании на входящие запросы из 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>"
  }
}
Attribute Required Type Description
< key-name> Yes String Имя ключа для возвращаемого выходного значения.
< тип ключа> Yes int, float, string, securestring, bool, массив, объект JSON Тип возвращаемого значения в выходных данных.
< key-value> Yes То же, что и <тип ключа> Возвращаемое значение в выходных данных.

Чтобы получить результат выполнения рабочего процесса, просмотрите журнал выполнения и подробности приложения логики на портале Azure или используйте REST API рабочих процессов. Также можно передать выходные данные во внешние системы, например Power BI, для создания панели мониторинга.

Operators

В выражениях и функциях операторы выполняют определенные задачи, такие как ссылка на свойство или значение в массиве.

Operator Task
' Чтобы использовать строковый литерал в качестве входных данных или в выражениях и функциях, оберните строку в одинарные кавычки, например, '<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 ignore, предшествующий свойству. Этот оператор позволяет безопасно получить доступ к элементу свойства или массива, если родительский объект или указанное свойство может содержать null или отсутствует.

— Если родительский объект, который отображается перед ? оператором null или отсутствует указанное свойство, все выражение возвращается null, а не рабочий процесс сбоем.

— Если объект или свойство существует, выражение возвращает значение свойства.

Например, предположим, что у вас есть следующее выражение:

triggerBody()?['ContentData']

— Если triggerBody() объект возвращается из ContentData свойства, возвращается значение объекта.

— Если triggerBody()null свойство отсутствует или отсутствуетContentData, функция возвращается, а не завершается null ошибкой "Не удается обработать выражения языка шаблона".

Оператор ? также позволяет безопасно использовать свойства доступа к цепочке и полезен в следующих сценариях:

— Управление выражениями, которые работают с необязательными полями JSON.
— обработка выходных данных соединителя, которые могут опустить определенные свойства.
— Избегайте хрупких выражений в условной логике.

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

coalesce(trigger().outputs?.body?['<property-name>'], '<property-default-value>')

Functions

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