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


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

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

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

Действие Язык Версия языка Длительность выполнения Размер данных Другие примечания
Выполнение кода JavaScript 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. В меню боковой панели ресурсов в разделе "Средства разработки" выберите конструктор, чтобы открыть рабочий процесс.

    В этих шагах предполагается, что рабочий процесс уже имеет триггер.

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

  3. Добавьте действие встроенного кода с именем Execute JavaScript Code в рабочий процесс, выполнив общие действия, чтобы добавить действие.

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

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

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

    Совет

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

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

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

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

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

  5. С помощью курсора в поле "Код " выберите значок молнии, чтобы открыть список динамического содержимого.

  6. В списке в разделе " При поступлении нового сообщения электронной почты " выберите свойство Body , которое ссылается на выходные данные триггера с текстом сообщения электронной почты.

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

    В списке динамического содержимого отображаются выходные данные триггера и любые предыдущие действия, когда эти выходные данные соответствуют входному формату для поля редактирования, который находится в данный момент в фокусе. Этот список упрощает использование этих выходных данных и ссылки на них в рабочем процессе. В этом примере в списке показаны выходные данные триггера 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" далее в этой статье.

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

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

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

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

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

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

Ссылка на выходные данные триггера и действия с помощью объекта 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()
      }
   }
}

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

Свойство Тип Описание
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"

В некоторых сценариях может потребоваться явное требование, чтобы действие 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. В меню рабочего процесса в разделе "Сервис" выберите "Код ", чтобы просмотреть определение JSON рабочего процесса. В объекте actions найдите имя действия.

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

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

  2. Чтобы вернуться к представлению конструктора, в меню рабочего процесса в разделе "Сервис" выберите "Конструктор".

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

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

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

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

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

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

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

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

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

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

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

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