Beskriva ett Azure Logic Apps-arbetsflöde med hjälp av arbetsflödesdefinitionsspråket

Slutförd

Du definierar strukturen och arbetsflödet för ett Azure Logic App-arbetsflöde med hjälp av ett JSON-dokument. Det här dokumentet innehåller en JSON-beskrivning av de element som utgör logikappens arbetsflöde och schemat Arbetsflödesdefinitionsspråk validerar det. Det enklaste sättet att förklara schemat är att undersöka ett befintligt arbetsflöde som skapats med hjälp av arbetsflödesdesignern i Azure-portalen och sedan visa JSON-beskrivningen för den här logikappen.

I exempelscenariot vill du förse dina konsulter med vanliga arbetsflöden som de kan anpassa till de specifika behoven hos de universitet som de arbetar med. Du vill göra det så enkelt som möjligt att anpassa och distribuera varje arbetsflöde, så du väljer att titta på koden bakom arbetsflödet, närmare bestämd JSON för arbetsflödesdefinition.

Arbetsflödesdesigner

Med arbetsflödesdesignern kan du skapa och felsöka arbetsflödet för ett logikappsarbetsflöde grafiskt. Designern låter också utvecklare titta under huven på ett arbetsflöde för att se hur det implementeras. Följande bild visar ett exempel på ett enkelt arbetsflöde som utlöses genom att skicka en HTTP GET-begäran till en angiven URL. Resultatet returneras i HTTP-svaret. I det här exemplet skickar arbetsflödet tillbaka ett enkelt Hello Logic Apps-mall! -meddelande.

Diagram showing workflow designer overview.

Nu ska vi titta på arbetsflödesdefinitionsspråket som används av JSON-mallen.

Kodvy

Fönstret Kodvy visar JSON-dokumentet som beskriver arbetsflödet. I exempelappen ser JSON ut så här:

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

Observera avsnitten i omfånget definition som relaterar till de åtgärder och utlösare som visas i designern. Du kan redigera JSON-koden i det här dokumentet för att återspegla eventuella ändringar som krävs i logikappens arbetsflödesfunktioner. Du kan också lägga till ytterligare åtgärder och ange hur logiken i arbetsflödet körs från en åtgärd till en annan.

Avsnittet Utlösare

Avsnittet för utlösare innehåller beskrivningen utlösartypen och hur den kan anropas. I det här exemplet är utlösaren en enkel HTTP-utlösare som körs som svar på en HTTP GET-begäran.

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

En utlösare måste innehålla följande element:

  • Ett unikt namn i arbetsflödet. I föregående exempel är utlösarens standardnamn manuellt, men du kan ersätta standardnamnet med en mer meningsfull identifierare.

  • Utlösartypen. Typen anger den händelse som gör att utlösaren körs. En Request-utlösare (Begäran) körs som svar på en HTTP-begäran. Andra utlösartyper som är tillgängliga:

    • Recurrence skapar en utlösare som körs enligt ett återkommande schema.

    • HttpWebhook lyssnar på händelser på en slutpunkt.

    • Api Anslut ion för att svara på händelser som utlöses av andra Azure-tjänster, till exempel ett meddelande som anländer till en meddelandekö, ett e-postmeddelande och så vidare. Utlösartypen ApiConnection är generaliserad, och du anger ytterligare detaljer som indikerar typen av tjänst samt eventuell anslutningsinformation som krävs.

  • Avsnittet inputs (indata). Det här avsnittet anger de data som definierar utlösarens beteende. För en Request-utlösare indikerar metoden vilken typ av HTTP-begäran som gör att utlösaren körs. För en ApiConnection-utlösaren innehåller avsnittet inputs information om hur anslutning ska ske till den resurs som utlöser händelsen (till exempel en anslutningssträng för meddelandekö). Om utlösaren är en Request-utlösare anger avsnittet schema i indatadefinitionen det schema begärandetextens nyttolast ska följa. HTTP GET-begäranden har inte någon begärandetext, så schemat är tomt i föregående exempel.

I följande exempel visas definitionen av en annan utlösare för begäran som startar ett arbetsflöde och tar emot HTTP POST-begäranden. En POST-begäran tillhandahåller vanligtvis en begärandetext som innehåller de data som ska publiceras. Begärandetexten i det här exemplet innehåller namn och adress för en kund, vilket utgör gata och ort.

"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"
                  }
               }
            }
         }
      }
   }
}

En utlösare kan även ange villkor. Utlösaren utlöses endast om dessa villkor uppfylls. Du definierar villkor i det valfria avsnittet conditions (villkor). Till exempel vill du kanske endast köra mypostrequest-utlösaren (från föregående exempel) om begärandetexten anger en stad i New York:

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

Avsnittet Åtgärder

Avsnittet för åtgärder i en logikapp definierar logiken och strukturen för arbetsflödet. Det innehåller en serie åtgärdsobjekt. Ett åtgärdsobjekt är ett grundläggande byggblock för skapande av arbetsflöden. Åtgärdsuppgifter tar indata och producerar utdata som skickas till nästa åtgärdsuppgift i arbetsflödet. I följande tabell visas olika tillgängliga åtgärdstyper:

Åtgärdsobjekt beskrivning
ApiConnection Skickar en HTTP-begäran till en specifik tjänst. Med den här åtgärdstypen kan du integrera ett logikapparbetsflöde med Azure-funktioner som Azure Service Bus, Azure Event Grid och andra. Åtgärden kräver indata som innehåller en anslutningssträng för åtkomst till tjänsten samt eventuell ytterligare information och parametrar som krävs för att anropa tjänsten.
Compose Kombinerar flera indata och uttryck i ett enda stycke utdata.
Funktion Låter dig anropa en Azure-funktion.
HTTP Skickar en HTTP-begäran till en HTTP-slutpunkt i stället för en Azure-tjänst.
Join Använder en matris med dataobjekt som indata och genererar en sträng med objekten, åtskilda av en angiven avgränsare.
Parse Parsar ett JSON-dokument till en tokenuppsättning med hjälp av ett angivet schema.
Fråga Filtrerar objekten i en indatamatris med hjälp av ett angivet villkor.
Response Skapar ett svar för en HTTP-begäran.
Tabell Genererar en HTML-tabell från en matris med JSON-objekt.
Terminate Avbryter ett arbetsflöde omedelbart.
Wait Pausar arbetsflödet under ett angivet intervall, eller tills en tidsgräns uppnås.
Arbetsflöde Kör ett annat arbetsflöde för logikappen.
Condition En uppsättning med åtgärdstyper (Foreach, If, Switch och Until) där du kan implementera en programmatisk flödeskontroll i ett arbetsflöde. Du kan iterera igenom objekten i en samling, fatta beslut baserat på värdena av indataparametrar och loopa tills ett visst villkor uppfylls.
InitializeVariable,
IncrementVariable,
DecrementVariable
och SetVariable
Definierar, initierar, tilldelar och ändrar variabler som du kan skicka mellan åtgärdsobjekt i ett arbetsflöde.

Liksom en utlösare måste varje åtgärd ha ett unikt namn i arbetsflödet. I följande exempel är standardåtgärdsnamnet Svar, men du kan använda en giltig och mer meningsfull identifierare. En åtgärd måste ha ett indataavsnitt anger de data som åtgärden arbetar på. I åtgärden Svar kan du ange data för ett uttryck som ska returneras i svarsmeddelandet, tillsammans med en HTTP-statuskod.

I vår grundläggande arbetsflödesdefinition genererar åtgärden ett HTTP-svar där brödtexten är ett kort meddelande.

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

Avsnittet runAfter anger var åtgärden körs i arbetsflödessekvensen. I föregående exempel finns det bara en enda åtgärd, så den körs alltid när utlösaren utlöses. Om arbetsflödet hade flera åtgärder kan du ange namnet på en åtgärd och status för åtgärden i det här avsnittet. Åtgärden körs om åtgärden runAfter slutförs med angiven status. Följande kod visar ett exempel. Åtgärden mySecondAction körs efter myFirstAction, men bara om myFirstAction slutförs med statusen ”Succeeded” (Lyckades):

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

Avsnittet Utdata

Använd avsnittet outputs (utdata) för att definiera de data som ditt arbetsflöde kan returnera när det har körts klart. Du kan spåra en viss status eller data för varje körning av arbetsflödet. Du kan undersöka utdata från varje körning av ett arbetsflöde med hjälp av Azure Logic Apps-körningshistoriken, som är tillgänglig i Azure-portalen eller arbetsflödets REST API.

Formatet för avsnittet outputs (utdata) ser ut så här:

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

Arbetsflödesuttryck

Du kan använda ett arbetsflödesuttryck i stället för ett fast värde, en variabel eller en konstant. Du kan även placera ett uttryck var som helst i ett JSON-strängvärde genom att prefigera uttrycket med snabel-a (@). Du kan till exempel använda funktionen @parameters i ett uttryck för att hämta värdet för en namngiven parameter (parametrar beskrivs i nästa avsnitt).

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

Azure Logic Apps innehåller inbyggda funktioner som du kan använda för att skapa komplexa uttryck:

  • Strängfunktioner: För att sammanfoga eller dela upp strängar, konvertera tecken mellan versaler och gemener och söka efter delsträngar.
  • Samlingsfunktioner: För att identifiera om en samling innehåller objekt som matchar ett visst mönster, hämtar objekt från en samling och kombinerar samlingar.
  • Logical jämförelsefunktioner: För att identifiera om operander är samma, olika, numeriskt större eller numeriskt mindre än varandra.
  • Konverteringsfunktioner: För att ändra typ eller format för data.
  • Matematiska funktioner: Till exempel add, sub, div och mul, plus flera andra.
  • Datum- och tidsfunktioner: För parsning och bearbetning av datum och tider.
  • Arbetsflödesfunktioner: För att hämta information om data som skickas till en arbetsflödesåtgärd. Till exempel hämtar funktionen parameter (visades tidigare) värdet för en namngiven parameter, och funktionen body (visades tidigare) returnerar de data som genereras av en åtgärd.
  • JSON- och XML-manipulationsfunktioner: För parsning och bearbetning av JSON- och XML-dokument.

Du kan definiera variabler i avsnittet inputs i en InitializeVariable-åtgärd, och du kan ändra dessa variabler med hjälp av uttryck. Läs värdet för en variabel med hjälp av variabelfunktionen . I följande exempel används en InitializeVariable-åtgärd för att skapa en heltalsvariabel som heter myIntegerVariable och initiera den till 99. Exemplet visar även en Condition-åtgärd med typen If. Villkoret använder ett uttryck för att testavariabelvärdet myIntegerVariable , och om det matchar värdet 100 använder villkoret en HTTP-åtgärd för att utföra en GET-begäran.

"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"
    }
}

Avsnittet Parametrar

Med parameteravsnittet kan du parametrisera ett arbetsflöde. Vid körning kan du ange värden för var och en av dessa parametrar. Du kan referera till parametrarna var som helst i arbetsflödet där du kan använda en konstant eller ett uttryck.

Du kan lägga till en definition för parametrar med ett standardvärde. Standardvärdet används om du inte anger ett värde för parametern vid körning. I följande exempel visas hur du definierar en parameter med namnet cityParam. Parametern används i villkoret för åtgärden mypostrequest. Den utför bara åtgärden om förfrågningsdokumentet innehåller en stad som matchar parametervärdet. Standardvärdet för parametern är 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"
            }
        }
    }
}

Testa dina kunskaper

1.

Du vill att ditt Azure Logic Apps-arbetsflöde ska köras var tredje minut. I vilket av följande avsnitt för arbetsflödesdefinitionen skulle du definiera det här återkommande beteendet?

2.

I vilken del av en arbetsflödesdefinition kan du skicka ett svar på en HTTP-begäran som returnerar en meddelandetext, statuskod och meddelandehuvuden?

3.

I vilket avsnitt av arbetsflödesdefinitionen anger du ett värde som ska returneras när ett arbetsflöde slutförs?