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

Slutförd

Du definierar ett Azure Logic App-arbetsflödes struktur och 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 Portal och sedan visa logikappens JSON-beskrivning.

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 som visar översikt över arbetsflödesdesignern.

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 triggers innehåller beskrivningen av typen av utlösare 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 manualutlösarens standardnamn , 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 körs som svar på en HTTP-begäran. Andra utlösartyper som är tillgängliga:

    • Recurrence för att skapa en utlösare som körs enligt ett återkommande schema.

    • HttpWebhook för att lyssna på händelser på en slutpunkt.

    • ApiConnection för att svara på händelser som utlöses av andra Azure-tjänster, till exempel ett meddelande som kommer till en meddelandekö, ett e-postmeddelande och så vidare. Utlösartypen ApiConnection är generaliserad och du anger ytterligare information som anger vilken typ av tjänst och eventuell anslutningsinformation som krävs.

  • Avsnittet inputs . Det här avsnittet anger de data som definierar utlösarens beteende. För en begärandeutlösare method anger den typ av HTTP-begäran som gör att utlösaren körs. För en ApiConnection utlösare inputs innehåller avsnittet information om hur du ansluter till resursen som utlöser händelsen (till exempel en meddelandekö anslutningssträng). Om utlösaren är en Request utlösare anger indatadefinitionens schema avsnitt det schema som nyttolasten för begärandetexten ska överensstämma med. HTTP GET-begäranden har ingen begärandetext, så är schema tom i föregående exempel.

I följande exempel visas definitionen av en annan Request utlösare som startar ett arbetsflöde och tar emot HTTP POST-begäranden. En POST-begäran innehå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). Du kanske till exempel vill köra mypostrequest utlösaren (visas i föregående exempel), endast om begärandetexten anger en stad New Yorki :

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

Avsnittet Åtgärder

I avsnittet för en logikapp definieras arbetsflödets actions logik och struktur. Avsnittet innehåller en serie åtgärder. En åtgärd är ett grundläggande byggblock för att skapa arbetsflöden. Åtgärder tar indata och skapar utdata som skickas till nästa åtgärd i arbetsflödet. I följande tabell visas olika tillgängliga åtgärdstyper:

Åtgärd 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.
Function 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 Tar en matris med dataobjekt som indata och genererar sträng som innehåller dessa objekt avgränsade med en angiven avgränsare.
Parse Parsar ett JSON-dokument i en uppsättning token med hjälp av ett angivet schema.
Query Filtrerar objekten i en indatamatris med ett angivet villkor.
Response Skapar ett svar för en HTTP-begäran.
Table 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.
Workflow Kör ett annat arbetsflöde för logikappen.
Condition En uppsättning åtgärdstyper (Foreach, If, Switchoch Until) som gör att du kan implementera programmatiskt flöde av kontroll 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 Responsestandardåtgärdsnamnet , men du kan använda en giltig och mer meningsfull identifierare. En åtgärd måste ha ett inputs avsnitt som anger de data som åtgärden fungerar 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. mySecondAction Åtgärden körs efter myFirstAction, men endast om myFirstAction avslutas med statusen Succeeded:

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

Avsnittet Utdata

Använd avsnittet outputs för att definiera de data som arbetsflödet kan returnera när det har slutförts. 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 Portal eller arbetsflödets REST API.

Formatet för avsnittet outputs 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 också placera ett uttryck var som helst i ett JSON-strängvärde genom att prefixera uttrycket med at-tecknet (@). 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.
  • Logiska 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, divoch 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. Funktionen (som tidigare visades) hämtar till exempel parameter värdet för en namngiven body parameter och funktionen (visas 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 i inputs 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 variables av funktionen . I följande exempel används en InitializeVariable åtgärd för att skapa en heltalsvariabel med namnet myIntegerVariable och initiera den till 99. Det här exemplet visar också en Condition åtgärd med If typen . Villkoret använder ett uttryck för att testa myIntegerVariable variabelvärdet, och om det matchar värdet 100anvä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

I parameters avsnittet 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. Standardparametervärdet ä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"
            }
        }
    }
}

Kontrollera 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?