Delen via


JSON maken, bewerken of uitbreiden voor werkstroomdefinities voor logische apps in Azure Logic Apps

Van toepassing op: Azure Logic Apps (verbruik)

Wanneer u oplossingen voor bedrijfsintegratie maakt met geautomatiseerde werkstromen in Azure Logic Apps, gebruiken de onderliggende werkstroomdefinities eenvoudige en declaratieve JavaScript Object Notation (JSON) samen met het WDL-schema (Workflow Definition Language) voor hun beschrijving en validatie. Deze indelingen maken werkstroomdefinities gemakkelijker te lezen en te begrijpen zonder veel te weten over code. Wanneer u het maken en implementeren van logische app-resources wilt automatiseren, kunt u werkstroomdefinities opnemen als Azure-resources in Azure Resource Manager-sjablonen. Als u logische apps wilt maken, beheren en implementeren, kunt u vervolgens Azure PowerShell, Azure CLI of de REST API's van Azure Logic Apps gebruiken.

Als u wilt werken met werkstroomdefinities in JSON, opent u de codeweergave-editor wanneer u in Azure Portal of in Visual Studio werkt, of kopieert u de definitie naar een gewenste editor. Als u geen toegang hebt tot Azure Logic Apps, raadpleegt u Een voorbeeldwerkstroom voor logische apps voor verbruik maken.

Notitie

Sommige mogelijkheden van Azure Logic Apps, zoals het definiëren van parameters en meerdere triggers in werkstroomdefinities, zijn alleen beschikbaar in JSON, niet in de werkstroomontwerper. Voor deze taken moet u dus werken in codeweergave of een andere editor.

JSON bewerken - Azure Portal

  1. Meld u aan bij het Azure-portaal.

  2. Kies Alle services in het linkermenu. Zoek in het zoekvak 'logische apps' en selecteer vervolgens uw logische app in de resultaten.

  3. Selecteer in het menu van uw logische app onder Ontwikkelhulpprogramma's de weergave Code van logische app.

    De codeweergave-editor wordt geopend en toont uw werkstroomdefinitie in JSON-indeling.

JSON bewerken - Visual Studio

Voordat u aan uw werkstroomdefinitie in Visual Studio kunt werken, moet u ervoor zorgen dat u de vereiste hulpprogramma's hebt geïnstalleerd. Als u een logische app wilt maken met Visual Studio, raadpleegt u de quickstart: Taken en processen automatiseren met Azure Logic Apps - Visual Studio.

In Visual Studio kunt u logische apps openen die rechtstreeks vanuit Azure Portal of als Azure Resource Manager-projecten vanuit Visual Studio zijn gemaakt en geïmplementeerd.

  1. Open de Visual Studio-oplossing of het Azure Resource Group-project dat uw logische app bevat.

  2. Zoek en open uw werkstroomdefinitie, die standaard wordt weergegeven in een Resource Manager-sjabloon met de naam LogicApp.json. U kunt deze sjabloon gebruiken en aanpassen voor implementatie in verschillende omgevingen.

  3. Open het snelmenu voor uw werkstroomdefinitie en -sjabloon. Selecteer Openen met Logic App-ontwerpfunctie.

    Logische app openen in een Visual Studio-oplossing

    Tip

    Als u deze opdracht niet hebt in Visual Studio 2019, controleert u of u de nieuwste updates voor Visual Studio hebt.

  4. Kies onder aan de werkstroomontwerper de optie Codeweergave.

    De codeweergave-editor wordt geopend en toont uw werkstroomdefinitie in JSON-indeling.

  5. Als u wilt terugkeren naar de ontwerpweergave, kiest u onder aan de codeweergave-editor ontwerp.

Parameters

De levenscyclus van de implementatie heeft meestal verschillende omgevingen voor ontwikkeling, test, fasering en productie. Wanneer u waarden hebt die u wilt hergebruiken in uw logische app zonder hardcoding of die variëren op basis van uw implementatiebehoeften, kunt u een Azure Resource Manager-sjabloon maken voor uw werkstroomdefinitie, zodat u ook de implementatie van logische apps kunt automatiseren.

Volg deze algemene stappen voor het parameteriseren of definiëren en gebruiken van parameters voor deze waarden. Vervolgens kunt u de waarden opgeven in een afzonderlijk parameterbestand dat deze waarden doorgeeft aan uw sjabloon. Op die manier kunt u deze waarden eenvoudiger wijzigen zonder dat u uw logische app hoeft bij te werken en opnieuw te implementeren. Zie Overzicht: Implementatie automatiseren voor logische apps met Azure Resource Manager-sjablonen voor meer informatie.

  1. Definieer in uw sjabloon sjabloonparameters en werkstroomdefinitieparameters om respectievelijk de waarden te accepteren die tijdens de implementatie en runtime moeten worden gebruikt.

    Sjabloonparameters worden gedefinieerd in een sectie met parameters die zich buiten uw werkstroomdefinitie bevinden, terwijl parameters voor werkstroomdefinities worden gedefinieerd in een sectie met parameters in uw werkstroomdefinitie.

  2. Vervang de vastgelegde waarden door expressies die naar deze parameters verwijzen. Sjabloonexpressies gebruiken syntaxis die verschilt van expressies voor werkstroomdefinities.

    Vermijd het compliceren van uw code door geen sjabloonexpressies te gebruiken, die tijdens de implementatie worden geëvalueerd, binnen werkstroomdefinitieexpressies, die tijdens runtime worden geëvalueerd. Gebruik alleen sjabloonexpressies buiten uw werkstroomdefinitie. Gebruik alleen expressies voor werkstroomdefinities in uw werkstroomdefinitie.

    Wanneer u de waarden voor uw werkstroomdefinitieparameters opgeeft, kunt u verwijzen naar sjabloonparameters met behulp van de sectie parameters buiten uw werkstroomdefinitie, maar nog steeds binnen de resourcedefinitie voor uw logische app. Op die manier kunt u sjabloonparameterwaarden doorgeven aan de parameters van uw werkstroomdefinitie.

  3. Sla de waarden voor uw parameters op in een afzonderlijk parameterbestand en neem dat bestand op bij uw implementatie.

Tekenreeksen verwerken met functies

Azure Logic Apps heeft verschillende functies voor het werken met tekenreeksen. Stel dat u een bedrijfsnaam van een order wilt doorgeven aan een ander systeem. U weet echter niet zeker wat de juiste verwerking is voor tekencodering. U kunt base64-codering uitvoeren op deze tekenreeks, maar om escapes in de URL te voorkomen, kunt u in plaats daarvan meerdere tekens vervangen. U hebt ook alleen een subtekenreeks nodig voor de bedrijfsnaam, omdat de eerste vijf tekens niet worden gebruikt.

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

In deze stappen wordt beschreven hoe in dit voorbeeld deze tekenreeks wordt verwerkt, die van binnen naar buiten werkt:

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
  1. Haal de length() naam van het bedrijf op, dus u krijgt het totale aantal tekens.

  2. Als u een kortere tekenreeks wilt ophalen, trekt u 5af.

  3. Haal nu een substring(). Begin bij de index 5en ga naar de rest van de tekenreeks.

  4. Converteer deze subtekenreeks naar een base64() tekenreeks.

  5. Nu replace() alle + tekens met - tekens.

  6. Ten slotte replace() alle / tekens met _ tekens.

Lijstitems toewijzen aan eigenschapswaarden en vervolgens kaarten gebruiken als parameters

Als u verschillende resultaten wilt ophalen op basis van de waarde van een eigenschap, kunt u een kaart maken die overeenkomt met elke eigenschapswaarde in een resultaat en die kaart vervolgens als parameter gebruiken.

Deze werkstroom definieert bijvoorbeeld bepaalde categorieën als parameters en een kaart die overeenkomt met die categorieën met een specifieke URL. Eerst haalt de werkstroom een lijst met artikelen op. Vervolgens gebruikt de werkstroom de kaart om de URL te vinden die overeenkomt met de categorie voor elk artikel.

  • De intersection() functie controleert of de categorie overeenkomt met een bekende gedefinieerde categorie.

  • Nadat een overeenkomende categorie is opgehaald, haalt het voorbeeld het item uit de kaart met vierkante haken: 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"
        ]
      }
    }
  }
}

Gegevens ophalen met datumfuncties

Als u gegevens wilt ophalen uit een gegevensbron die geen systeemeigen ondersteuning biedt voor triggers, kunt u datumfuncties gebruiken voor het werken met tijden en datums. Met deze expressie wordt bijvoorbeeld bepaald hoelang de stappen van deze werkstroom worden uitgevoerd, waarbij van binnen naar buiten wordt gewerkt:

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. Pak uit de order actie de startTime.

  2. De huidige tijd ophalen met utcNow().

  3. Eén seconde aftrekken:

    addseconds(..., -1)

    U kunt andere tijdseenheden gebruiken, zoals minutes of hours.

  4. Nu kunt u deze twee waarden vergelijken.

    Als de eerste waarde kleiner is dan de tweede waarde, is er meer dan één seconde verstreken sinds de bestelling voor het eerst is geplaatst.

Als u datums wilt opmaken, kunt u tekenreeksopmaakers gebruiken. Als u bijvoorbeeld de RFC1123 wilt ophalen, gebruikt u utcnow('r'). Meer informatie over datumopmaak.

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

Volgende stappen