Azure Logic Apps-munkafolyamat leírása a munkafolyamat-definíciós nyelv használatával
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.
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, |
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"
}
}
}
}