Een Azure Logic Apps-werkstroom beschrijven met behulp van de werkstroomdefinitietaal

Voltooid

U definieert de structuur en werkstroom voor een Azure Logic App-werkstroom met behulp van een JSON-document. Dit document bevat een JSON-beschrijving van de elementen waaruit de werkstroom van de logische app bestaat en het schema workflowdefinitietaal valideert dit. De eenvoudigste manier om het schema uit te leggen, is door een bestaande werkstroom te onderzoeken die is gemaakt met behulp van de werkstroomontwerper in Azure Portal en vervolgens de JSON-beschrijving van deze logische app weer te geven.

In het voorbeeldscenario wilt u uw consultants algemene werkstromen bieden die ze kunnen aanpassen aan de specifieke behoeften van de universiteiten waarmee ze werken. U wilt het aanpassen en implementeren van elke werkstroom zo makkelijk mogelijk maken, dus u besluit naar de code achter de werkstroom te kijken, dus de JSON- van de werkstroomdefinitie.

Werkstroomontwerper

Met de werkstroomontwerper kunt u de werkstroom voor een werkstroom van een logische app grafisch maken en er fouten in opsporen. Met de ontwerpfunctie kunnen ontwikkelaars ook kijken onder de schermen van een werkstroom om te zien hoe deze wordt geïmplementeerd. In de volgende afbeelding ziet u een voorbeeld van een eenvoudige werkstroom, die wordt geactiveerd door een HTTP GET-aanvraag naar een opgegeven URL te verzenden. Het resultaat wordt in het HTTP-antwoord geretourneerd. In dit voorbeeld stuurt de werkstroom een eenvoudig hello Logic Apps-sjabloon! terug.

Diagram showing workflow designer overview.

Laten we nu eens kijken naar de definitietaal van de werkstroom, zoals wordt gebruikt door de JSON-sjabloon.

Codeweergave

In het venster Codeweergave ziet u het JSON-document waarin de werkstroom wordt beschreven. In de voorbeeld-app ziet de JSON er als volgt uit:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Response": {
                "inputs": {
                    "body": "Hello Azure Logic Apps Template!",
                    "statusCode": 200
                },
                "kind": "Http",
                "runAfter": {},
                "type": "Response"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "method": "GET",
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

Let op de secties in het definition bereik die betrekking hebben op de acties en triggers die worden weergegeven in de ontwerpfunctie. U kunt de JSON-code in dit document bewerken om alle wijzigingen weer te geven die nodig zijn in de functionaliteit van de werkstroom van de logische app. U kunt ook verdere acties toevoegen en opgeven hoe de logica in de werkstroom wordt uitgevoerd van de ene actie naar de volgende.

Sectie Triggers

De sectie triggers bevat een beschrijving van het type trigger en hoe een trigger wordt aangeroepen. In dit voorbeeld is de trigger een eenvoudige HTTP-trigger die wordt uitgevoerd als reactie op een HTTP GET-aanvraag.

"triggers": {
    "manual": {
        "inputs": {
            "method": "GET",
            "schema": {}
        },
        "kind": "Http",
        "type": "Request"
    }
}

Een trigger moet de volgende elementen bevatten:

  • Een unieke naam binnen de werkstroom. In het vorige voorbeeld is de standaardnaam van de trigger handmatig, maar u kunt de standaardnaam vervangen door een zinvollere id.

  • Het triggertype. Het type geeft de gebeurtenis aan waardoor de trigger wordt uitgevoerd. Een Aanvraag-trigger wordt uitgevoerd als reactie op een HTTP-aanvraag. Andere triggertypen zijn:

    • Terugkerend, om een trigger te maken die wordt uitgevoerd volgens een terugkerend schema.

    • HttpWebhook, om te luisteren naar gebeurtenissen op een eindpunt.

    • Api Verbinding maken ion voor het reageren op gebeurtenissen die worden geactiveerd door andere Azure-services, zoals een bericht dat binnenkomt in een berichtenwachtrij, een e-mailbericht enzovoort. Het triggertype ApiConnection is gegeneraliseerd en u geeft nadere details op die het type service aangeeft, en eventuele vereiste verbindingsgegevens.

  • De sectie inputs. In deze sectie worden de gegevens opgegeven waarmee het gedrag van de trigger wordt gedefinieerd. Voor een Aanvraag-trigger geeft method het type HTTP-aanvraag aan die ervoor zorgt dat de trigger wordt uitgevoerd. Voor een ApiConnection-trigger bevat de sectie inputs informatie over hoe verbinding moet worden gemaakt met de resource die de trigger activeert (bijvoorbeeld een verbindingsreeks voor een berichtenwachtrij). Als de trigger een Aanvraag-trigger is, bepaalt de sectie schema van de invoerdefinitie het schema waaraan de payload van de aanvraagbody moet voldoen. HTTP GET-aanvragen hebben geen aanvraagbody, dus schema in het vorige voorbeeld is leeg.

In het volgende voorbeeld ziet u de definitie van een andere aanvraagtrigger waarmee een werkstroom wordt gestart en HTTP POST-aanvragen worden ontvangen. Een POST-aanvraag voorziet gewoonlijk in een aanvraagbody, met de gegevens die moeten worden gepost. De aanvraagbody in dit voorbeeld bevat de naam en het adres (waarin straat en plaats) van een klant.

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "POST",
      "schema": {
         "type": "object",
         "properties": {
            "customerName": {
               "type": "String"
            },
            "customerAddress": { 
               "type": "Object",
               "properties": {
                  "streetAddress": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}

Een trigger kan ook voorwaarden opgeven. De trigger wordt alleen gestart als aan deze voorwaarden wordt voldaan. U definieert voorwaarden in een optionele sectie, conditions. U kunt bijvoorbeeld de trigger mypostrequest (uit het vorige voorbeeld) alleen uitvoeren wanneer met de aanvraagbody een stad in New York is opgegeven:

"mypostrequest": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      ...
   }
   "conditions": [
      {
        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], 'New York')"
      }
   ]
}

Sectie Acties

De sectie actions van een logische app definieert de logica en structuur van de werkstroom. Deze sectie bevat een reeks actie-items. Een actie-item is een eenvoudige bouwsteen voor het maken van werkstromen. Actie-items ontvangen invoer en produceren uitvoer, die vervolgens naar het volgende actie-item in de werkstroom wordt doorgegeven. De volgende tabel bevat verschillende beschikbare actietypen:

Actie-item Beschrijving
ApiConnection Verzendt een HTTP-aanvraag naar een specifieke service. Met dit actietype kunt u een werkstroom voor logische apps integreren met Azure-functies zoals Azure Service Bus, Azure Event Grid en andere. Voor de actie is invoer vereist die een verbindingsreeks voor toegang tot de service bevat en eventuele aanvullende gegevens en parameters om de service aan te roepen.
Compose Combineert meerdere invoergegevens en expressies in één uitvoer.
Functie Stelt u in staat om een Azure-functie aan te roepen.
HTTP Verzendt een HTTP-aanvraag naar een HTTP-eindpunt in plaats van naar een Azure-service.
Join Gebruikt een matrix met gegevensitems als invoer, en genereert een tekenreeks met deze items, gescheiden door een opgegeven scheidingsteken.
Parse Parseert een JSON-document in een set tokens, volgens een opgegeven schema.
Query Filtert de items in een invoermatrix, met behulp van een opgegeven voorwaarde.
Respons Maakt een reactie op een HTTP-aanvraag.
Tabel Genereert een HTML-tabel uit een matrix met JSON-objecten.
Terminate Annuleert een werkstroom onmiddellijk.
Wait Onderbreekt de werkstroom gedurende een opgegeven interval of totdat er een time-out optreedt.
Werkstroom Voert een andere werkstroom voor logische apps uit.
Condition Een set actietypen (Foreach, If, Switch en Until), waarmee u een programmatische besturingsstroom in een werkstroom kunt implementeren. U kunt de items in een verzameling doorlopen, beslissingen nemen op basis van de waarden van invoerparameters en herhalen totdat aan een bepaalde voorwaarde is voldaan.
InitializeVariable,
IncrementVariable,
DecrementVariable,
en SetVariable
Hiermee kunt u variabelen definiëren, toewijzen en wijzigen die u tussen actie-items in een werkstroom kunt doorgeven.

Net zoals een trigger moet een actie een unieke naam in de werkstroom hebben. In het volgende voorbeeld is de standaardactienaam Antwoord, maar u kunt een geldige en zinvollere id gebruiken. Een actie moet een sectie inputs bevatten die de gegevens bevat waarop de actie reageert. In de actie Antwoord kunt u de gegevens opgeven voor een expressie die moet worden geretourneerd in het antwoordbericht, samen met een HTTP-statuscode.

In onze basiswerkstroomdefinitie genereert de actie een HTTP-antwoord waarin de hoofdtekst een kort bericht is.

"actions": {
    "Response": {
        "inputs": {
            "body": "Hello Azure Logic Apps Template!",
            "statusCode": 200
        },
        "kind": "Http",
        "runAfter": {},
        "type": "Response"
    }
}

De sectie runAfter geeft aan waar de actie in de werkstoomvolgorde wordt uitgevoerd. In het vorige voorbeeld is er slechts één actie, dus deze wordt altijd uitgevoerd als de trigger is geactiveerd. Als de werkstroom meerdere acties heeft, kunt u de naam van een actie en een status voor die actie in deze sectie opgeven. De actie wordt uitgevoerd als de actie RunAfter is voltooid met de opgegeven status. De volgende code laat een voorbeeld zien. De actie mySecondAction wordt uitgevoerd na myFirstAction, maar alleen als myFirstAction wordt voltooid met de status Geslaagd:

"actions": {
    "mySecondAction": {
        "inputs": {
            ...
        },
        "runAfter": {
            "myFirstAction": [
                "Succeeded"
            ]
        },
        "type": ...
    },
    "myFirstAction": {
        "inputs": {
            ...
        },
        "runAfter": {},
        "type": ...
    }
}

Sectie Uitvoer

Met de sectie outputs kunt u gegevens definiëren die door de werkstroom kunnen worden geretourneerd als de uitvoering ervan is gestopt. U kunt een specifieke status of specifieke gegevens bijhouden voor elke uitvoering van de werkstroom. U kunt de uitvoer van elke uitvoering van een werkstroom bekijken met behulp van de Azure Logic Apps-uitvoeringsgeschiedenis, die beschikbaar is in Azure Portal of de REST API voor werkstromen.

De indeling van de sectie outputs ziet er als volgt uit:

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}

Werkstroomexpressies

U kunt een werkstroomexpressie gebruiken in plaats van een vaste waarde, variabele of constante. U kunt ook een expressie ergens in een JSON-tekenreekswaarde plaatsen door de expressie vooraf te laten gaan door het @-teken. U kunt bijvoorbeeld de functie @parameters in een expressie gebruiken om de waarde van een benoemde parameter op te halen (parameters worden beschreven in de volgende sectie).

"customerFullName": "Bill Frost",
"accountName": "@parameters('customerName')"

Azure Logic Apps biedt ingebouwde functies die u kunt gebruiken om complexe expressies te maken:

  • Tekenreeksfuncties: Voor het samenvoegen of splitsen van tekenreeksen, het converteren van tekens tussen hoofdletters en kleine letters en het zoeken naar subtekenreeksen.
  • Verzamelingsfuncties: voor het detecteren of een verzameling items bevat die overeenkomen met een specifiek patroon, ophalen van items uit een verzameling en het combineren van verzamelingen.
  • Logical vergelijkingsfuncties: voor het detecteren of operanden hetzelfde, verschillend, numeriek groter of numeriek kleiner zijn dan elkaar.
  • Conversiefuncties: Voor het wijzigen van het type of de indeling van gegevens.
  • Wiskundige functies: zoals toevoegen, sub, div en mul, plus verschillende andere.
  • Datum- en tijdfuncties: voor het parseren en verwerken van datums en tijden.
  • Werkstroomfuncties: voor het ophalen van informatie over de gegevens die zijn doorgegeven aan een werkstroomactie. Met de functie parameter (eerder weergegeven) haalt u bijvoorbeeld de waarde van een benoemde parameter op, en de functie body (eerder weergegeven) retourneert de gegevens die met een actie worden gegenereerd.
  • JSON- en XML-bewerkingsfuncties: voor het parseren en verwerken van JSON- en XML-documenten.

U kunt variabelen definiëren in de sectie inputs van een InitializeVariable-actie en u kunt deze variabelen manipuleren door middel van expressies. Lees de waarde van een variabele met behulp van de functie variabelen . In het volgende voorbeeld wordt gebruikgemaakt van een InitializeVariable-actie om een uit een geheel getal bestaande variabele te maken met de naam myIntegerVariable en deze te initialiseren op 99. In het voorbeeld wordt ook een Condition-actie getoond met het type If. De voorwaarde gebruikt een expressie om devariabele myIntegerVariable te testen en als deze overeenkomt met de waarde 100, gebruikt de voorwaarde een HTTP-actie om een GET-aanvraag uit te voeren.

"actions": {
    "Condition": {
        "actions": {
            "HTTP": {
                "inputs": {
                    "method": "GET",
                    "uri": "http://dummyurl.com"
                },
                "runAfter": {},
                "type": "Http"
            }
        },
        "expression": {
            "equals": [
                "@variables('myIntegerVariable')",
                100
            ]
        }        ,
        "runAfter": {
            "Initialize": [
                "Succeeded"
            ]
        },
        "type": "If"
    },
    "Initialize": {
        "inputs": {
            "variables": [
                {
                    "name": "myIntegerVariable",
                    "type": "Integer",
                    "value": 99
                }
            ]
        },
        "runAfter": {},
        "type": "InitializeVariable"
    }
}

De sectie Parameters

Met de sectie parameters kunt u een werkstroom van parameters voorzien. Tijdens runtime kunt u waarden opgeven voor elk van deze parameters. U kunt overal in de werkstroom verwijzen naar de parameters waar u een constante of expressie kunt gebruiken.

U kunt een parameterdefinitie met een standaardwaarde toevoegen. De standaardwaarde wordt gebruikt als u geen waarde opgeeft voor de parameter tijdens runtime. In het volgende voorbeeld ziet u hoe u een parameter met de naam cityParam definieert. De parameter wordt gebruikt in de voorwaarde voor de mypostrequest-actie. De actie wordt alleen uitgevoerd als het aanvraagdocument een plaats bevat die overeenkomt met de parameterwaarde. De standaardwaarde voor de parameter is New York:


    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            ...
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "cityParam": {
                "defaultValue": "New York",
                "type": "String"
            }
        },
        "triggers": {
            "mypostrequest": {
                "conditions": [
                    {
                        "expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], parameters('cityParam'))"
                    }
                ],
                "inputs": {
                    ...
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}

Test uw kennis

1.

U wilt dat uw Azure Logic Apps-werkstroom elke drie minuten wordt uitgevoerd. In welke van de volgende secties van de werkstroomdefinitie zou u dit terugkerend gedrag definiëren?

2.

In welke sectie van een werkstroomdefinitie kunt u een antwoord verzenden naar een HTTP-aanvraag, waarmee een berichtbody, statuscode en berichtkoppen worden geretourneerd?

3.

In welke sectie van de werkstroomdefinitie geeft u een waarde op die moet worden geretourneerd als een werkstroom wordt voltooid?