Добавление и запуск кода JavaScript вместе с рабочими процессами для Azure Logic Apps

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

Чтобы выполнять пользовательские задачи интеграции, встроенные в рабочий процесс в Azure Logic Apps, можно напрямую добавлять и запускать простые фрагменты кода JavaScript из рабочего процесса в портал Azure. Для этой задачи используйте действие встроенного кода с именем Execute JavaScript Code. Это действие возвращает результат из фрагмента кода, чтобы можно было использовать эти выходные данные в последующих действиях рабочего процесса. Это действие также имеет разные ограничения на основе того, имеет ли рабочий процесс потребления или стандарта и лучше подходит для фрагментов кода со следующими атрибутами:

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

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

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

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

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

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

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

Необходимые компоненты

  • Учетная запись и подписка Azure. Если у вас нет ее, вы можете зарегистрироваться для получения бесплатной учетной записи Azure.

  • Рабочий процесс приложения логики, куда нужно добавить фрагмент кода. Рабочий процесс уже должен начинаться с триггера.

    В этом примере используется триггер Outlook Office 365, который называется при поступлении нового сообщения электронной почты.

    Если у вас нет рабочего процесса, см. следующую документацию:

  • В зависимости от того, есть ли рабочий процесс приложения логики "Потребление" или "Стандартный", ознакомьтесь со следующими требованиями:

    • Рабочий процесс потребления

      • Node.js версии 8.11.10

      • Ссылка на учетную запись интеграции, пустую или иначе, из ресурса приложения логики.

        Внимание

        Убедитесь, что используется учетная запись интеграции, соответствующая вашему случаю или сценарию использования.

        Например, учетные записи интеграции Бесплатного уровня предназначены только для пробного использования и не предназначены для рабочих нагрузок. Они ограничены в ресурсах и пропускной способности и не поддерживаются соглашением об уровне обслуживания (SLA).

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

    • Стандартный рабочий процесс

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

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

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

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

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

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

    Совет

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

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

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

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

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

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

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

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

    После выбора свойства Body действие Execute JavaScript Code разрешает маркер объекту 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. Добавьте точку с запятой (;) в конце, чтобы завершить инструкцию кода.

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

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

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

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

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

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

В фрагменте кода конструктора можно использовать список динамического содержимого для выбора маркера, который ссылается на выходные данные триггера или любое предыдущее действие. При выборе маркера действие Execute JavaScript Code разрешает этот маркер объекту 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()
      }
   }
}

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

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

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

В этом примере 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"

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

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

Примечание.

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

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

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

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

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

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

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

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

    My.Action.Name

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

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

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

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

  3. Теперь добавьте имя JSON в действие Execute JavaScript Code .

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

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

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

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

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

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

    Снимок экрана: поле

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

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

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

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

Следующие шаги