Выполнение фрагментов кода в рабочих процессах с помощью операций встроенного кода в Azure Logic Apps

Область применения: Azure Logic Apps (Потребление + Стандартный)

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

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

Действие Язык Версия языка Длительность выполнения Размер данных Другие примечания
Execute JavaScript Code JavaScript Стандартный:
Node.js 16.x.x

Потребление:
Node.js 8.11.1

Дополнительные сведения см. в статье Стандартные встроенные объекты.
Завершается через 5 секунд или меньше. Обрабатывает данные до 50 МБ. Не требует работы с действиями Переменных, так как они пока не поддерживаются.

— Не поддерживает функцию require() для запуска JavaScript.

Чтобы запустить код, который не соответствует этим атрибутам, можно создать и вызвать функцию с помощью Функций Azure.

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

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

Предварительные требования

Добавление действия "Выполнение кода JavaScript"

  1. На портале Azure откройте рабочий процесс приложения логики уровня "Потребление" в конструкторе.

  2. В конструкторе выполните следующие общие действия, чтобы добавить в рабочий процесс действие Встроенный кодс именем Выполнение кода JavaScript.

    В следующем примере добавляется действие с триггером Office 365 Outlook. По умолчанию действие содержит пример кода, включая инструкцию return .

    Снимок экрана: действие

  3. В поле Код удалите образец кода и введите свой код. Напишите код, который вы поместили в метод, но без сигнатуры метода.

    Совет

    Когда курсор находится в поле Код, появляется список динамического содержимого. Хотя вы будете использовать этот список позже, вы можете проигнорировать его и пока оставить открытым. Не выбирайте Скрыть.

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

    Снимок экрана: рабочий процесс потребления, действие

    В следующем примере фрагмента кода сначала создается переменная с именем myResult, в которой хранится регулярное выражение, которое представляет собой шаблон для сопоставления текста входных данных. Затем код создает переменную с именем email, в которой хранится основной контент сообщения электронной почты из выходных данных триггера.

    Снимок экрана: рабочий процесс потребления, действие

  4. Если курсор по-прежнему находится в поле Код, в открытом списке динамического содержимого найдите раздел При поступлении нового сообщения электронной почты и выберите свойство Текст сообщения, которое ссылается на текст сообщения электронной почты.

    Снимок экрана: рабочий процесс потребления, действие

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

    После выбора свойства Body действие Выполнить код JavaScript разрешает маркер в объект JSON, доступный только workflowContext для чтения, который фрагмент кода может использовать в качестве входных данных. Объект workflowContext включает свойства, которые предоставляют вашему коду доступ к выходным данным триггера и предшествующим действиям в вашем рабочем процессе, например свойство body триггера, которое отличается от свойства Текста сообщения электронной почты. Дополнительные сведения об объекте workflowContext см. далее в разделе Ссылка на выходные данные триггера и действия с помощью объекта workflowContext.

    Важно!

    Если фрагмент кода ссылается на имена действий, которые включают оператора dot (.), эти ссылки должны заключать эти имена действий в квадратные скобки ([]) и кавычки (""), например:

    // Correct
    workflowContext.actions["my.action.name"].body

    // Incorrect
    workflowContext.actions.my.action.name.body

    Кроме того, в действии Выполнить код JavaScript необходимо добавить параметр Actions, а затем добавить эти имена действий в этот параметр. Дополнительные сведения см. в разделе Добавление зависимостей в качестве параметров в действие "Выполнение кода JavaScript " далее в этой статье.

  5. Чтобы отличить свойство Текста сообщения электронной почты, выбранное из свойства триггера body, переименуйте второе body свойство на Body. Добавьте точку с запятой (;) в конце, чтобы завершить инструкцию кода.

    Снимок экрана: рабочий процесс приложения логики

    Действие "Выполнить код JavaScript " не требует синтаксически инструкции return . Однако, включив инструкцию return, можно ссылаться на результаты действия в рабочем процессе с помощью маркера Результат в последующих действиях.

    В этом примере фрагмент кода возвращает результат, вызывая функцию match(), которая находит все совпадения в тексте сообщения электронной почты с указанным регулярным выражением. Затем действие Создать таблицу HTML использует маркер Result для ссылки на результаты действия Выполнить код JavaScript и создает один результат.

    Снимок экрана: завершенный рабочий процесс приложения логики потребления.

  6. Закончив работу, сохраните свой рабочий процесс.

Ссылка на выходные данные триггера и действия с помощью объекта workflowContext

В фрагменте кода конструктора можно использовать список динамического содержимого для выбора маркера, который ссылается на выходные данные триггера или любое предыдущее действие. При выборе маркера действие Выполнить код JavaScript разрешает этот маркер в объект JSON, доступный только workflowContext для чтения. Этот объект предоставляет коду доступ к выходным данным триггера, любым предыдущим действиям и рабочему процессу. Объект использует следующую структуру и включает actions, trigger, и workflowсвойства, которые также являются объектами:

{
   "workflowContext": {
      "actions": {
         "<action-name-1>": @actions('<action-name-1>'),
         "<action-name-2>": @actions('<action-name-2>')
      },
      "trigger": {
         @trigger()
      },
      "workflow": {
         @workflow()
      }
   }
}

В следующей таблице содержатся дополнительные сведения об этих свойствах:

Свойство Тип Описание
actions Коллекция объектов Объекты результата любых предыдущих действий, которые выполняются до запуска вашего фрагмента кода. Каждый объект имеет пару ключ-значение, где ключ — это имя действия, а значение эквивалентно результату вызова функции действий() с выражением @actions('<action-name>').

В имени действия используется то же имя действия, что и в базовом определении рабочего процесса, в котором пробелы (" ") в имени действия заменяются символами подчеркивания (_). Эта коллекция объектов обеспечивает доступ к значениям свойств действия из текущего запуска экземпляра рабочего процесса.
trigger Объект Объект результата из триггера, где результат эквивалентен вызову функции триггер(). Этот объект обеспечивает доступ к значениям свойств триггера из текущего запуска экземпляра рабочего процесса.
workflow Объект Объект рабочего процесса, эквивалентный вызову функции рабочий процесс(). Этот объект обеспечивает доступ к таким значениям свойств, как имя рабочего процесса, идентификатор запуска и т. д., из текущего запуска экземпляра рабочего процесса.

В этом примере workflowContext объект JSON может иметь следующие примеры свойств и значений из триггера Outlook:

{
   "workflowContext": {
      "trigger": {
         "name": "When_a_new_email_arrives",
         "inputs": {
            "host": {
               "connection": {
                  "name": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Web/connections/office365"
               }
            },
            "method": "get",
            "path": "/Mail/OnNewEmail",
            "queries": {
               "includeAttachments": "False"
            }
         },
         "outputs": {
            "headers": {
               "Pragma": "no-cache",
               "Content-Type": "application/json; charset=utf-8",
               "Expires": "-1",
               "Content-Length": "962095"
            },
            "body": {
               "Id": "AAMkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgBGAAAAAABmZwxUQtCGTqSPpjjMQeD",
               "DateTimeReceived": "2019-03-28T19:42:16+00:00",
               "HasAttachment": false,
               "Subject": "Hello World",
               "BodyPreview": "Hello World",
               "Importance": 1,
               "ConversationId": "AAQkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgAQ",
               "IsRead": false,
               "IsHtml": true,
               "Body": "Hello World",
               "From": "<sender>@<domain>.com",
               "To": "<recipient-2>@<domain>.com;<recipient-2>@<domain>.com",
               "Cc": null,
               "Bcc": null,
               "Attachments": []
            }
         },
         "startTime": "2019-05-03T14:30:45.971564Z",
         "endTime": "2019-05-03T14:30:50.1746874Z",
         "scheduledTime": "2019-05-03T14:30:45.8778117Z",
         "trackingId": "1cd5ffbd-f989-4df5-a96a-6e9ce31d03c5",
         "clientTrackingId": "08586447130394969981639729333CU06",
         "originHistoryName": "08586447130394969981639729333CU06",
         "code": "OK",
         "status": "Succeeded"
      },
      "workflow": {
         "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>",
         "name": "<logic-app-workflow-name>",
         "type": "Microsoft.Logic/workflows",
         "location": "<Azure-region>",
         "run": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>/runs/08586453954668694173655267965CU00",
            "name": "08586453954668694173655267965CU00",
            "type": "Microsoft.Logic/workflows/runs"
         }
      }
   }
}

Добавление зависимостей в качестве параметров в действие "Выполнение кода JavaScript"

В некоторых сценариях может потребоваться явное требование, чтобы действие Выполнить код JavaScript включает выходные данные триггера или действий, на которые ссылается ваш код в качестве зависимостей. Например, необходимо выполнить этот дополнительный шаг, если код ссылается на выходные данные, недоступные во время выполнения рабочего процесса. Во время создания рабочего процесса обработчик Azure Logic Apps анализирует фрагмент кода, чтобы определить, ссылается ли код на какие-либо выходные данные триггера или действия. Если эти ссылки существуют, обработчик автоматически включает эти выходные данные. Во время выполнения рабочего процесса, если указанный триггер или выходные данные действия не найдены в объекте workflowContext, обработчик создает ошибку. Чтобы устранить эту ошибку, необходимо добавить этот триггер или действие в качестве явной зависимости для действия Выполнение кода JavaScript . Другой сценарий, требующий выполнения этого шага, заключается в том, что workflowContext объект ссылается на имя триггера или действия, использующего оператор dot (.).

Чтобы добавить триггер или действие в качестве зависимости, добавьте параметры Триггер или Действия , применимые к действию Выполнение кода JavaScript . Затем добавьте имена триггеров или действий, как они отображаются в базовом определении JSON рабочего процесса.

Примечание

Нельзя добавлять операции Переменных, циклы, такие как Для каждого или До, и индексы итерации в виде явных зависимостей.

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

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

В этом примере необходимо добавить только параметр Действия, а затем добавить имя Send_approval_emailJSON действия в параметр. Таким образом, вы указываете, что действие Выполнить код JavaScript явно включает выходные данные действия Отправить утверждение по электронной почте .

Поиск имени триггера или действия в формате JSON

Перед началом работы вам потребуется имя JSON для триггера или действия в определении базового рабочего процесса.

  • Имена в определении рабочего процесса содержат символы подчеркивания (_) вместо пробелов.

  • Если имя действия использует оператор dot (.), включите этот оператор, например:

    My.Action.Name

  1. На панели инструментов конструктора рабочего процесса щелкните Представление кода. В объекте actions найдите имя действия.

    Например, Send_approval_email — имя JSON для действия Отправить утверждение по электронной почте.

    Снимок экрана: имя действия в ФОРМАТЕ JSON.

  2. Чтобы вернуться в представление конструктора, на панели инструментов представления кода выберите Конструктор.

  3. Теперь добавьте имя JSON в действие Выполнить код JavaScript .

Добавление имени триггера или действия в действие Выполнение кода JavaScript

  1. В действии Выполнить код JavaScript откройте список Добавить новый параметр .

  2. В списке параметров выберите следующие параметры, которые требуются вашему сценарию.

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

    Снимок экрана: действие

  4. В поле Элемент действия — 1 введите имя действия JSON.

    Снимок экрана: поле Actions Item -1 и имя действия в формате JSON.

  5. Чтобы добавить еще одно имя действия, выберите Добавить новый элемент.

  6. Закончив работу, сохраните свой рабочий процесс.

Справочник по действиям

Дополнительные сведения о структуре и синтаксисе действия Выполнить код JavaScript в базовом определении рабочего процесса с помощью языка определения рабочего процесса см. справочный раздел этого действия.

Дальнейшие действия