Создание, редактирование и расширение JSON для определений рабочего процесса приложений логики в Azure Logic Apps

Область применения: Azure Logic Apps (потребление)

При создании корпоративных решений по интеграции с автоматизированными рабочими процессами на основе Azure Logic Apps для описания и проверки определений рабочих процессов используется простой декларативный язык JSON (нотация объектов JavaScript) и схема WDL (язык определения рабочего процесса). Эти форматы позволяют легко читать и понимать определения рабочих процессов даже без глубоких знаний о программировании. Если вы хотите автоматизировать создание и развертывание ресурсов приложений логики, включите определения рабочих процессов в шаблоны Azure Resource Manager в качестве ресурсов Azure. Тогда вы сможете создавать приложения логики, управлять ими и развертывать их с помощью Azure PowerShell, Azure CLI или интерфейсов API REST для Azure Logic Apps.

Вы можете открыть определения рабочих процессов в формате JSON, используя редактор представления кода на портале Azure или в Visual Studio, или любой другой текстовый редактор. Если вы не знакомы с Azure Logic Apps, см. статью Создание примера рабочего процесса приложения логики для потребления.

Примечание

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

Редактирование JSON на портале Azure

  1. Войдите на портал Azure.

  2. В меню слева выберите Все службы. В поле поиска введите строку "приложения логики" и выберите нужное приложение в результатах поиска.

  3. В меню для этого приложения логики откройте раздел Средства разработки и выберите Представление кода приложения логики.

    Откроется окно представления кода, в котором вы увидите определение рабочего процесса в формате JSON.

Редактирование JSON в Visual Studio

Прежде чем редактировать определение рабочего процесса в Visual Studio, следует установить все необходимые средства. Чтобы создать приложение логики в Visual Studio, воспользуйтесь кратким руководством по автоматизации задач и процессов с помощью Azure Logic Apps.

Visual Studio позволяет открыть приложения логики, которые были созданы и развернуты напрямую через портал Azure или из Visual Studio в виде проектов Azure Resource Manager.

  1. Откройте решение Visual Studio или проект группы ресурсов Azure, который содержит нужное приложение логики.

  2. Найдите и откройте определение рабочего процесса. По умолчанию они содержатся в шаблоне Resource Manager под названием LogicApp.json. Вы можете применять и корректировать этот шаблон для развертывания в разных средах.

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

    Открытие приложения логики в решении Visual Studio

    Совет

    Если у вас нет этой команды в Visual Studio 2019, убедитесь, что установлены последние обновления для Visual Studio.

  4. В нижней части конструктора рабочего процесса выберите Представление кода.

    Откроется окно представления кода, в котором вы увидите определение рабочего процесса в формате JSON.

  5. Чтобы вернуться в представление конструктора, в нижней части редактора представления кода, выберите Конструктор.

Параметры

Жизненный цикл развертывания обычно имеет различные среды для разработки, тестирования, промежуточного хранения и производства. При наличии значений, которые вы хотите повторно использовать в приложении логики без жесткого программирования или которые меняются в зависимости от потребностей развертывания, можно создать шаблон Azure Resource Manager для определения рабочего процесса, чтобы можно было автоматизировать развертывание приложений логики.

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

  1. В шаблоне определите параметры шаблона и определения рабочего процесса, чтобы принимать значения, которые должны использоваться в развертывании и среде выполнения соответственно.

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

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

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

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

  3. Сохраните значения параметров в отдельном файле параметров и включите его в развертывание.

Обработка строк с помощью функций

Azure Logic Apps имеет различные функции для работы со строками. Например, предположим, что вам требуется передать имя компании из заказа в другую систему. Однако вы не уверены, как правильно обработать кодировку символов. К этой строке можно применить кодировку base64, однако чтобы избежать символов экранирования в URL-адресе, можно заменить несколько символов. Кроме того, вам нужна только функция substring для названия компании, так как первые пять символов не используются.

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder1",
        "companyName": "NAME=Contoso"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "request": {
      "type": "Request",
      "kind": "Http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
      }
    }
  },
  "outputs": {}
}

Ниже показано, как этот пример обрабатывает строку, работая "наизнанку":

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
  1. Запросите length() для названия компании, и будет возвращено общее количество знаков.

  2. Чтобы получить более короткую строку, вычтите 5.

  3. Вы получите substring(). Начнем с индекса 5 и перейдем к оставшейся части строки.

  4. Преобразуйте эту подстроку в строку base64().

  5. Теперь замените (replace()) все знаки + на -.

  6. Наконец замените (replace()) все знаки / на _.

Сопоставление элементов списка со значениями свойств с последующим использованием сопоставления в качестве параметра

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

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

  • Функция intersection() проверяет, соответствует ли категория известной определенной категории.

  • После получения соответствующей категории пример извлекает элемент из схемы, используя квадратные скобки: parameters[...].

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "specialCategories": {
      "defaultValue": [
        "science",
        "google",
        "microsoft",
        "robots",
        "NSA"
      ],
      "type": "Array"
    },
    "destinationMap": {
      "defaultValue": {
        "science": "https://www.nasa.gov",
        "microsoft": "https://www.microsoft.com/en-us/default.aspx",
        "google": "https://www.google.com",
        "robots": "https://en.wikipedia.org/wiki/Robot",
        "NSA": "https://www.nsa.gov/"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "Request",
      "kind": "http"
    }
  },
  "actions": {
    "getArticles": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=https://feeds.wired.com/wired/index"
      }
    },
    "forEachArticle": {
      "type": "foreach",
      "foreach": "@body('getArticles').responseData.feed.entries",
      "actions": {
        "ifGreater": {
          "type": "if",
          "expression": "@greater(length(intersection(item().categories, parameters('specialCategories'))), 0)",
          "actions": {
            "getSpecialPage": {
              "type": "Http",
              "inputs": {
                "method": "GET",
                "uri": "@parameters('destinationMap')[first(intersection(item().categories, parameters('specialCategories')))]"
              }
            }
          }
        }
      },
      "runAfter": {
        "getArticles": [
          "Succeeded"
        ]
      }
    }
  }
}

Получение данных с помощью функций данных

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

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. Из действия order извлеките startTime.

  2. Получите текущее время с помощью utcNow().

  3. Вычтите одну секунду:

    addseconds(..., -1)

    Вы можете использовать другие единицы времени, например minutes или hours.

  4. Теперь вы можете сравнить эти два значения.

    Если первое значение меньше второго, то это значит, что с момента первоначального размещения заказа прошло больше секунды.

Для форматирования дат можно использовать модули форматирования строк. Например, чтобы получить RFC1123, используйте utcnow('r'). См. дополнительные сведения о форматировании даты.

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder-id"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "request",
      "kind": "http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{parameters('order').id}"
      }
    },
    "ifTimingWarning": {
      "type": "If",
      "expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
      "actions": {
        "timingWarning": {
          "type": "Http",
          "inputs": {
            "method": "GET",
            "uri": "https://www.example.com/?recordLongOrderTime=@{parameters('order').id}&currentTime=@{utcNow('r')}"
          }
        }
      },
      "runAfter": {
        "order": [
          "Succeeded"
        ]
      }
    }
  },
  "outputs": {}
}

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