Skapa, redigera eller utöka JSON för logikappars definitioner av arbetsflöden i Azure Logic Apps

Gäller för: Azure Logic Apps (förbrukning)

När du skapar företagsintegreringslösningar med automatiserade arbetsflöden i Azure Logic Apps använder de underliggande arbetsflödesdefinitionerna enkel och deklarativ JavaScript Object Notation (JSON) tillsammans med WDL-schemat (Workflow Definition Language) för deras beskrivning och validering. Dessa format gör arbetsflödesdefinitioner enklare att läsa och förstå utan att veta mycket om kod. När du vill automatisera skapande och distribution av logikappresurser kan du inkludera arbetsflödesdefinitioner som Azure-resurser i Azure Resource Manager mallar. Om du vill skapa, hantera och distribuera logikappar kan du sedan använda Azure PowerShell, Azure CLI eller REST-API:er för Azure Logic Apps.

Om du vill arbeta med arbetsflödesdefinitioner i JSON öppnar du Kodvyredigeraren när du arbetar i Azure Portal eller i Visual Studio eller kopierar definitionen till valfri redigerare. Om du inte har använt Azure Logic Apps tidigare läser du Skapa ett exempel på arbetsflödet för förbrukningslogikappen.

Anteckning

Vissa Azure Logic Apps-funktioner, till exempel att definiera parametrar och flera utlösare i arbetsflödesdefinitioner, är endast tillgängliga i JSON, inte arbetsflödesdesignern. För dessa uppgifter måste du alltså arbeta i kodvyn eller i en annan redigerare.

Redigera JSON – Azure Portal

  1. Logga in på Azure-portalen.

  2. Välj Alla tjänster på den vänstra menyn. Leta upp "logikappar" i sökrutan och välj sedan logikappen i resultatet.

  3. På logikappens meny går du till Utvecklingsverktyg och väljer Logikappkodvy.

    Kodvyredigeraren öppnas och visar arbetsflödesdefinitionen i JSON-format.

Redigera JSON – Visual Studio

Innan du kan arbeta med arbetsflödesdefinitionen i Visual Studio kontrollerar du att du har installerat de verktyg som krävs. Om du vill skapa en logikapp med Visual Studio läser du Snabbstart: Automatisera uppgifter och processer med Azure Logic Apps – Visual Studio.

I Visual Studio kan du öppna logikappar som har skapats och distribuerats antingen direkt från Azure Portal eller som Azure Resource Manager-projekt från Visual Studio.

  1. Öppna Visual Studio-lösningen eller Azure Resource Group-projektet som innehåller logikappen.

  2. Hitta och öppna arbetsflödesdefinitionen, som som standard visas i en Resource Manager mall med namnet LogicApp.json. Du kan använda och anpassa den här mallen för distribution till olika miljöer.

  3. Öppna snabbmenyn för arbetsflödesdefinitionen och mallen. Välj Öppna med Logic App Designer.

    Öppna logikappen i en Visual Studio-lösning

    Tips

    Om du inte har det här kommandot i Visual Studio 2019 kontrollerar du att du har de senaste uppdateringarna för Visual Studio.

  4. Längst ned i arbetsflödesdesignern väljer du Kodvy.

    Kodvyredigeraren öppnas och visar arbetsflödesdefinitionen i JSON-format.

  5. Om du vill återgå till designervyn väljer du Design längst ned i kodvyredigeraren.

Parametrar

Distributionslivscykeln har vanligtvis olika miljöer för utveckling, testning, mellanlagring och produktion. När du har värden som du vill återanvända i logikappen utan hårdkodning eller som varierar beroende på dina distributionsbehov kan du skapa en Azure-Resource Manager mall för arbetsflödesdefinitionen så att du även kan automatisera distributionen av logikappar.

Följ dessa allmänna steg för att parametrisera eller definiera och använda parametrar för dessa värden i stället. Du kan sedan ange värdena i en separat parameterfil som skickar dessa värden till mallen. På så sätt kan du enkelt ändra dessa värden utan att behöva uppdatera och distribuera om logikappen. Fullständig information finns i Översikt: Automatisera distribution för logikappar med Azure Resource Manager mallar.

  1. I mallen definierar du mallparametrar och parametrar för arbetsflödesdefinitioner för att acceptera de värden som ska användas vid distribution respektive körning.

    Mallparametrar definieras i ett parameteravsnitt som ligger utanför arbetsflödesdefinitionen, medan parametrar för arbetsflödesdefinition definieras i ett parameteravsnitt som finns i arbetsflödesdefinitionen.

  2. Ersätt de hårdkodade värdena med uttryck som refererar till dessa parametrar. Malluttryck använder syntax som skiljer sig från arbetsflödesdefinitionsuttryck.

    Undvik att komplicera koden genom att inte använda malluttryck, som utvärderas vid distributionen, i arbetsflödesdefinitionsuttryck som utvärderas vid körning. Använd endast malluttryck utanför arbetsflödesdefinitionen. Använd endast arbetsflödesdefinitionsuttryck i arbetsflödesdefinitionen.

    När du anger värdena för parametrarna för arbetsflödesdefinitionen kan du referera till mallparametrar med hjälp av avsnittet parametrar som är utanför arbetsflödesdefinitionen men som fortfarande finns i resursdefinitionen för logikappen. På så sätt kan du skicka mallparametervärden till parametrarna för arbetsflödesdefinitionen.

  3. Lagra värdena för dina parametrar i en separat parameterfil och inkludera filen med distributionen.

Bearbeta strängar med funktioner

Azure Logic Apps har olika funktioner för att arbeta med strängar. Anta till exempel att du vill skicka ett företagsnamn från en order till ett annat system. Du är dock inte säker på korrekt hantering av teckenkodning. Du kan utföra base64-kodning på den här strängen, men för att undvika escapes i URL:en kan du ersätta flera tecken i stället. Dessutom behöver du bara en delsträng för företagsnamnet eftersom de fem första tecknen inte används.

{
  "$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": {}
}

De här stegen beskriver hur det här exemplet bearbetar den här strängen och arbetar inifrån och ut:

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
  1. length() Hämta för företagsnamnet så att du får det totala antalet tecken.

  2. Om du vill få en kortare sträng subtraherar du 5.

  3. Hämta nu en substring(). Börja vid index 5och gå till resten av strängen.

  4. Konvertera den här delsträngen till en base64() sträng.

  5. Nu replace() alla + tecken med - tecken.

  6. Slutligen replace() alla / tecken med _ tecken.

Mappa listobjekt till egenskapsvärden och använd sedan kartor som parametrar

Om du vill få olika resultat baserat på en egenskaps värde kan du skapa en karta som matchar varje egenskapsvärde till ett resultat och sedan använda den kartan som en parameter.

Det här arbetsflödet definierar till exempel vissa kategorier som parametrar och en karta som matchar dessa kategorier med en specifik URL. Först hämtar arbetsflödet en lista med artiklar. Arbetsflödet använder sedan kartan för att hitta URL:en som matchar kategorin för varje artikel.

  • Funktionen intersection() kontrollerar om kategorin matchar en känd definierad kategori.

  • När du har fått en matchande kategori hämtar exemplet objektet från kartan med hakparenteser: 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"
        ]
      }
    }
  }
}

Hämta data med datumfunktioner

Om du vill hämta data från en datakälla som inte har inbyggt stöd för utlösare kan du använda Date-funktioner för att arbeta med tider och datum i stället. Det här uttrycket hittar till exempel hur lång tid arbetsflödets steg tar och arbetar inifrån och ut:

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. Från åtgärden order extraherar du startTime.

  2. Hämta aktuell tid med utcNow().

  3. Subtrahera en sekund:

    addseconds(..., -1)

    Du kan använda andra tidsenheter, till exempel minutes eller hours.

  4. Nu kan du jämföra dessa två värden.

    Om det första värdet är mindre än det andra värdet har mer än en sekund passerat sedan ordern först placerades.

Om du vill formatera datum kan du använda strängformaterare. Om du till exempel vill hämta RFC1123 använder du utcnow('r'). Läs mer om datumformatering.

{
  "$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": {}
}

Nästa steg