Azure Logic Apps-munkafolyamat leírása a munkafolyamat-definíciós nyelv használatával

Befejeződött

Egy Azure Logic App-munkafolyamat struktúráját és munkafolyamatát JSON-dokumentum használatával határozhatja meg. Ez a dokumentum a logikai alkalmazás munkafolyamatát alkotó elemek JSON-leírását tartalmazza, és a Workflow Definition Language séma érvényesíti azt. A séma magyarázatának legegyszerűbb módja, ha megvizsgálja a munkafolyamat-tervezővel létrehozott meglévő munkafolyamatot az Azure Portalon, majd megtekintheti ennek a logikai alkalmazásnak a JSON-leírását.

A mintaforgatókönyvben olyan gyakori munkafolyamatokat szeretne biztosítani a tanácsadóinak, amelyek képesek alkalmazkodni azoknak az egyetemeknek a konkrét igényeihez, amelyekkel dolgoznak. Szeretnénk minél könnyebben testreszabhatóvá és üzembe helyezhetővé tenni az egyes munkafolyamatokat, ezért megvizsgáljuk a munkafolyamatok mögötti kódot, azaz a munkafolyamat-definíció JSON-blokkját.

Munkafolyamat-tervező

A munkafolyamat-tervező lehetővé teszi a logikai alkalmazás munkafolyamatának grafikus létrehozását és hibakeresését. A tervező lehetővé teszi a fejlesztőknek, hogy a munkafolyamatok csuklyája alatt is megtekintse, hogyan implementálják. Az alábbi képen egy egyszerű munkafolyamat példája látható, amelyet egy HTTP GET-kérés megadott URL-címre való elküldésével vált ki. Az eredmény a HTTP-válaszban lesz visszaadva. Ebben a példában a munkafolyamat egy egyszerű Hello Logic Apps-sablont küld vissza.

Diagram showing workflow designer overview.

Most nézzük meg a JSON-sablon által használt munkafolyamat-definíciós nyelvet.

Kódnézet

A Kódnézet ablakban a munkafolyamatot leíró JSON-dokumentum látható. A mintaalkalmazásban a JSON a következőképpen néz ki:

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

Figyelje meg a definition hatókör azon szakaszait, amelyek a tervezőben megjelenített műveletekhez és eseményindítókhoz kapcsolódnak. A dokumentumban található JSON-kód szerkesztésével tükrözheti a logikai alkalmazás munkafolyamatának működéséhez szükséges módosításokat. További műveleteket is hozzáadhat, és megadhatja, hogyan fut a munkafolyamat logikája egyik műveletről a másikra.

Az eseményindítók szakasz

Az eseményindítók szakasz az eseményindító típusának és meghívási módjának a leírását tartalmazza. Ebben a példában az eseményindító egy egyszerű HTTP-eseményindító, amely egy HTTP GET-kérésre válaszul fut le.

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

Az eseményindítónak a következő elemeket kell tartalmaznia:

  • Egy, a munkafolyamaton belül egyedi nevet. Az előző példában az eseményindító alapértelmezett neve manuális, de az alapértelmezett nevet lecserélheti egy értelmesebb azonosítóra.

  • Az eseményindító típusát. A típus az eseményindító futtatását kiváltó eseményt jelzi. A Request eseményindító a HTTP-kérésre válaszul fut le. Az egyéb elérhető eseményindító-típusok:

    • Recurrence – olyan eseményindítók létrehozásához, amelyek egy ciklikus ütemezés szerint futnak.

    • HttpWebhook – a végpontokon bekövetkező események figyeléséhez.

    • Api Csatlakozás ion más Azure-szolgáltatások által aktivált eseményekre, például üzenetsorra érkező üzenetre, e-mailre stb. Az ApiConnection eseményindító-típus egy általános típus, és további részleteket kell megadni, például a szolgáltatás típusát és a szükséges kapcsolati információkat.

  • Az inputs szakaszt. Ez a szakasz az eseményindító viselkedését meghatározó adatokat határozza meg. A Request eseményindító esetében a method az eseményindító futtatását kiváltó HTTP-kérést jelöli. Az ApiConnection eseményindító esetében az inputs szakasz tartalmazza az eseményt kiváltó erőforráshoz való csatlakozással kapcsolatos információkat (például az üzenetsor kapcsolati sztringjét). Ha az eseményindító egy Request eseményindító, a bemenetdefiníció schema szakasza adja meg azt a sémát, amelynek a kérelemtörzs hasznos adatának meg kell felelnie. A HTTP GET-kérések nem rendelkeznek kérelemtörzzsel, ezért az előző példában üres a schema.

Az alábbi példa egy munkafolyamatot elindító és HTTP POST-kéréseket fogadó kérésindító definícióját mutatja be. A POST-kérések általában rendelkeznek kérelemtörzzsel, amely a továbbított adatokat tartalmazza. Ebben a példában a kérés törzse egy ügyfél nevét és címét (utca és város) tartalmazza.

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

Az eseményindító megadhat feltételeket is. Az eseményindító ilyenkor csak a feltételek teljesülése esetén aktiválódik. A feltételek az opcionális conditions szakaszban adhatók meg. Például előfordulhat, hogy az előző példában látható mypostrequest eseményindítót csak akkor szeretné futtatni, ha a kérelemtörzs New York városát tartalmazza:

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

A műveletek szakasz

A logikai alkalmazás műveletek szakasza határozza meg a munkafolyamat logikáját és szerkezetét. Ez a szakasz műveleti elemek sorát tartalmazza. A műveleti elemek a munkafolyamatok összeállításához használt alapvető építőelemek. A műveleti elemek bemeneteket vesznek fel, és kimeneteket állítanak elő, amelyeket aztán továbbadnak a munkafolyamatban soron következő műveleti elemnek. Az alábbi táblázat a különböző elérhető művelettípusokat sorolja fel:

Műveleti elem Leírás
ApiConnection HTTP-kérést küld egy adott szolgáltatásnak. Ez a művelettípus lehetővé teszi egy logikai alkalmazás munkafolyamatának integrálását olyan Azure-funkciókkal, mint az Azure Service Bus, az Azure Event Grid és mások. A művelet bemeneteiként meg kell adni a szolgáltatás elérésére szolgáló kapcsolati sztringet, valamint a szolgáltatás meghívásához szükséges további információkat és paramétereket.
Összeállítás Több bemenetet és kifejezést kombinálhat egyetlen kimenetté.
Függvény Egy Azure Functions-függvényt hívhat meg.
HTTP HTTP-kérést küld egy HTTP-végpontnak, nem pedig egy Azure-szolgáltatásnak.
Csatlakozás Egy adatelemtömböt fogad bemenetként, és azokból egy meghatározott elválasztó karakterrel tagolt sztringet állít elő.
Elemzés Egy megadott séma használatával kielemezhet egy JSON-dokumentumot, és abból egy jogkivonatkészletet állíthat elő.
Lekérdezés Egy bemeneti tömb elemeit szűrheti egy megadott feltétel alapján.
Válasz Egy választ adhat egy HTTP-kérésre.
Tábla Egy HTML-táblázatot állíthat elő JSON-objektumok egy tömbjéből.
Befejezés Azonnal megszakíthat egy munkafolyamatot.
Várakozás Felfüggeszti a munkafolyamatot egy megadott időtartamra, vagy amíg időtúllépés nem áll be.
Munkafolyamat Egy másik logikai alkalmazás munkafolyamatát futtatja.
Feltétel A művelettípusok egy csoportja (Foreach, If, Switch és Until), amelyekkel programozott vezérlésfolyamot valósíthat meg a munkafolyamatban. Végigléptetheti egy gyűjtemény elemeit, döntéseket hozhat a bemeneti paraméterek értékei alapján, valamint ismételtethet egy ciklust egy feltétel teljesüléséig.
InitializeVariable,
IncrementVariable,
DecrementVariable,
és SetVariable
Definiálhat, inicializálhat, hozzárendelhet és módosíthat változókat, amelyeket aztán továbbíthat a munkafolyamat egyes műveleti elemei között.

Az eseményindítókhoz hasonlóan a munkafolyamatban mindegyik műveletnek egyedi névvel kell rendelkeznie. Az alábbi példában az alapértelmezett műveletnév a Válasz, de használhat érvényes és értelmezhetőbb azonosítót. A műveletnek rendelkeznie kell egy inputs szakasszal, amely meghatározza azokat az adatokat, amelyekkel a művelet dolgozik. A Válasz műveletben megadhatja a válaszüzenetben visszaadni kívánt kifejezés adatait egy HTTP-állapotkóddal együtt.

Az alapszintű munkafolyamat-definícióban a művelet egy HTTP-választ hoz létre, amelyben a törzs egy rövid üzenet.

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

A runAfter szakasz jelzi, hogy a művelet hol fut a munkafolyamatban. Az előző példában csak egyetlen művelet van, így mindig ez fut, amikor az eseményindító aktiválódik. Ha a munkafolyamat több műveletből állt, ebben a szakaszban megadhatja egy művelet nevét és állapotát. A művelet akkor fut, ha a runAfter művelet befejeződött a megadott állapottal. Az alábbi kód erre mutat egy példát. A mySecondAction művelet a myFirstAction után fut, azonban csak akkor, ha a myFirstAction „Succeeded” (Sikerült) állapottal fejeződik be:

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

A kimenetek szakasz

A kimenetek szakaszában határozhatja meg a munkafolyamat által annak befejezését követően visszaadható adatokat. A munkafolyamat mindegyik futtatásához naplózhatja az adott állapotokat vagy adatokat. A munkafolyamatok minden egyes futtatásának kimenetét az Azure Logic Apps futtatási előzményei alapján vizsgálhatja meg, amely az Azure Portalon vagy a Workflow REST API-ban érhető el.

Az outputs szakasz formátuma a következőképpen néz ki:

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

Munkafolyamat-kifejezések

A munkafolyamat-kifejezéseket bármilyen rögzített érték, változó vagy állandó helyett használhatja. A JSON-sztringértékeken belül bárhol használhat kifejezéseket – a kifejezések elé ekkor egy @ karaktert kell írni. Használhatja például a @parameters függvényt egy kifejezésben egy elnevezett paraméter értékének lekéréséhez (a paramétereket a következő szakaszban ismertetjük).

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

Az Azure Logic Apps beépített függvényeket biztosít, amelyekkel összetett kifejezéseket hozhat létre:

  • Sztringfüggvények: Sztringek összefűzésével vagy felosztásával, a karakterek kis- és nagybetűk közötti konvertálásával és az alsztringek keresésével.
  • Gyűjteményfüggvények: Annak észleléséhez, hogy egy gyűjtemény tartalmaz-e egy adott mintának megfelelő elemeket, beolvassa az elemeket egy gyűjteményből, és kombinálja a gyűjteményeket.
  • Logikus összehasonlító függvények: Annak észlelésére, hogy az operandusok azonosak, eltérőek, numerikusan nagyobbak vagy numerikusan kisebbek-e egymásnál.
  • Konverziós függvények: Az adatok típusának vagy formátumának módosításához.
  • Matematikai függvények: Például hozzáadás, rész, div és mul, valamint több más.
  • Dátum- és időfüggvények: Dátumok és időpontok elemzése és feldolgozása.
  • Munkafolyamat-függvények: A munkafolyamat-műveletnek átadott adatokkal kapcsolatos információk lekéréséhez. Például a parameter (paraméter) függvény (lásd fent) egy nevesített paraméter értékét olvassa be, a body (törzs) függvény (feljebb) pedig egy művelet által előállított adatokat ad vissza.
  • JSON- és XML-kezelési függvények: JSON- és XML-dokumentumok elemzéséhez és feldolgozásához.

A változókat megadhatja egy InitializeVariable művelet inputs szakaszában, de kifejezésekkel is kezelheti ezeket a változókat. Olvassa el egy változó értékét a változók függvénnyel. Az alábbi példában egy InitializeVariable művelettel hozunk létre egy egész szám típusú változót myIntegerVariable néven, és inicializáljuk a 99-es értékkel. Ez a példa egy If típusú Condition műveletet is bemutat. A feltétel kifejezéssel teszteli amyIntegerVariable változó értékét, és ha megfelel a 100-as értéknek, a feltétel EGY HTTP-műveletet használ a GET kérés végrehajtásához.

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

Paraméterek szakasz

A paraméterek szakasszal parametrizálhatja a munkafolyamatot. A futás során megadhatja ezeknek a paramétereknek az értékét. A paraméterekre bárhol hivatkozhat a munkafolyamatban, ahol állandót vagy kifejezést használhat.

Alapértelmezett értékekkel rendelkező paraméterdefiníciókat is hozzáadhat. Ha nem ad meg értéket a paraméterhez a futás során, a rendszer az alapértelmezett értéket használja. A következő példa a cityParam paraméter definiálását mutatja be. A paraméter a mypostrequest művelethez tartozó feltételen belül használatos. A művelet csak akkor legyen végrehajtva, ha a kérelemdokumentum tartalmaz egy, a paraméter értékének megfelelő várost. Az alapértelmezett paraméterérték a 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"
            }
        }
    }
}

Tesztelje tudását

1.

Azt szeretné, hogy az Azure Logic Apps-munkafolyamat három percenként fusson. A munkafolyamat-definíció melyik alábbi szakaszában definiálhatja az ilyen ismétlődő működést?

2.

A munkafolyamat-definíció melyik szakaszában küldhet választ egy HTTP-kérésre, ami egy üzenettörzset, egy állapotkódot és üzenetfejléceket ad vissza?

3.

A munkafolyamat-definíció melyik szakaszában adhatja meg a munkafolyamat befejeződésekor visszaadandó értéket?