Popis pracovního postupu Azure Logic Apps pomocí jazyka definice pracovního postupu
Pomocí dokumentu JSON definujete strukturu a pracovní postup pracovního postupu aplikace logiky Azure. Tento dokument obsahuje popis JSON prvků, které tvoří pracovní postup aplikace logiky a schéma jazyka definice pracovního postupu. Nejjednodušší způsob, jak schéma vysvětlit, je prozkoumat existující pracovní postup vytvořený pomocí návrháře pracovního postupu na webu Azure Portal a pak zobrazit popis JSON aplikace logiky.
V ukázkovém scénáři chcete svým konzultantům poskytnout běžné pracovní postupy, které se můžou přizpůsobit konkrétním potřebám univerzit, se kterými pracují. Chcete přizpůsobení a nasazení každého pracovního postupu co nejvíce zjednodušit, a proto se rozhodnete zaměřit se na kód v pracovním postupu, konkrétně na soubor JSON definice pracovního postupu.
Návrhář pracovních postupů
Návrhář pracovního postupu umožňuje vytvořit a ladit pracovní postup pro pracovní postup aplikace logiky graficky. Návrhář také umožňuje vývojářům podívat se pod pokličku pracovního postupu, aby viděli, jak je implementovaný. Následující obrázek ukazuje příklad jednoduchého pracovního postupu, který se aktivuje odesláním požadavku HTTP GET na zadanou adresu URL. Výsledek se vrátí v odpovědi HTTP. V tomto příkladu pracovní postup odesílá zpět jednoduchou zprávu Hello Logic Apps Template! .
Teď se podíváme na jazyk definice pracovního postupu, který používá šablona JSON.
Zobrazení kódu
V okně Zobrazení kódu se zobrazí dokument JSON popisující pracovní postup. V ukázkové aplikaci vypadá JSON takto:
{
"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"
}
}
}
}
Všimněte si oddílů v definition
oboru, které se týkají akcí a triggerů zobrazených v návrháři. Kód JSON v tomto dokumentu můžete upravit tak, aby odrážel všechny změny požadované ve funkcích pracovního postupu aplikace logiky. Můžete také přidat další akce a určit, jak se logika v pracovním postupu spouští z jedné akce na další.
Oddíl triggerů
Část triggers
obsahuje popis typu triggeru a způsob jeho vyvolání. Trigger v tomto příkladu je jednoduchý trigger HTTP, který se spouští jako odpověď na požadavek HTTP GET.
"triggers": {
"manual": {
"inputs": {
"method": "GET",
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
Trigger musí obsahovat následující prvky:
Jedinečný název v pracovním postupu. V předchozím příkladu je
manual
výchozí název triggeru , ale výchozí název můžete nahradit smysluplnějším identifikátorem.Typ triggeru. Typ určuje událost, která způsobí spuštění triggeru.
Request
Trigger se spustí v reakci na požadavek HTTP. Mezi další typy triggerů, které jsou k dispozici, patří:Recurrence
pro vytvoření triggeru, který se spouští podle plánu opakování.HttpWebhook
pro naslouchání událostem v koncovém bodu.ApiConnection
pro reakci na události aktivované jinými službami Azure, jako je například zpráva přicházející do fronty zpráv, e-mailová zpráva atd. Typ triggeru ApiConnection se zobecní a zadáte další podrobnosti o typu služby a všechny požadované informace o připojení.
Oddíl
inputs
. Tato část určuje data, která definují chování triggeru. U triggeru požadavku označuje typ požadavku HTTP,method
který způsobí spuštění triggeru.ApiConnection
Část obsahuje informace o tom,inputs
jak se připojit k prostředku, který událost aktivuje (například fronta zpráv připojovací řetězec). Pokud jeRequest
aktivační událost aktivační událostí, část definice vstupuschema
určuje schéma, které by datová část textu požadavku měla odpovídat. Požadavky HTTP GET nemají text požadavku, takžeschema
je prázdný v předchozím příkladu.
Následující příklad ukazuje definici jiného Request
triggeru, který spouští pracovní postup a přijímá požadavky HTTP POST. Požadavek POST obvykle poskytuje text požadavku obsahující data, která se mají publikovat. Text požadavku v tomto příkladu obsahuje jméno zákazníka a adresu, kterou tvoří ulice a město.
"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"
}
}
}
}
}
}
}
Trigger může určovat také podmínky. Daný trigger se aktivuje jenom při splnění těchto podmínek. Podmínky můžete definovat v nepovinném oddílu podmínek. Například můžete chtít spustit mypostrequest
trigger (zobrazený v předchozím příkladu), pouze pokud text požadavku určuje město New York
:
"mypostrequest": {
"type": "Request",
"kind": "Http",
"inputs": {
...
}
"conditions": [
{
"expression": "@equals(triggerOutputs()['body']['customerAddress']['city'], 'New York')"
}
]
}
Oddíl akcí
Oddíl aplikace actions
logiky definuje logiku a strukturu pracovního postupu. Oddíl obsahuje řadu akcí. Akce je základní stavební blok pro vytváření pracovních postupů. Akce provádějí vstupy a vytvářejí výstupy, které se předávají další akci v pracovním postupu. Následující tabulka uvádí různé dostupné typy akcí:
Akce | Popis |
---|---|
ApiConnection |
Odešle požadavek HTTP konkrétní službě. Tento typ akce umožňuje integrovat pracovní postup aplikace logiky s funkcemi Azure, jako jsou Azure Service Bus, Azure Event Grid a další. Tato akce vyžaduje vstupy, které zahrnují připojovací řetězec pro přístup ke službě a případné další informace a parametry vyžadované k vyvolání služby. |
Compose |
Zkombinuje více vstupů a výrazů do jediného výstupu. |
Function |
Umožňuje volání funkce Azure. |
HTTP |
Odešle požadavek HTTP do koncového bodu HTTP místo služby Azure. |
Join |
Vezme pole datových položek jako vstup a vygeneruje řetězec obsahující tyto položky oddělené zadaným oddělovačem. |
Parse |
Parsuje dokument JSON do sady tokenů pomocí zadaného schématu. |
Query |
Filtruje položky ve vstupním poli pomocí zadané podmínky. |
Response |
Vytvoří odpověď na požadavek HTTP. |
Table |
Vygeneruje z pole objektů JSON tabulku HTML. |
Terminate |
Okamžitě zruší pracovní postup. |
Wait |
Pozastaví pracovní postup pro zadaný interval nebo dokud nedojde k vypršení časového limitu. |
Workflow |
Spustí jiný pracovní postup aplikace logiky. |
Condition |
Sada typů akcí (Foreach , If , Switch a Until ) umožňující implementovat programový tok řízení v pracovním postupu. Můžete iterovat pomocí položek v kolekci, rozhodovat se na základě hodnot vstupních parametrů a provádět smyčku tak dlouho, dokud se nesplní nějaká podmínka. |
InitializeVariable ,IncrementVariable ,DecrementVariable ,SetVariable |
Definuje, inicializuje, přiřazuje a upravuje proměnné, které lze předávat mezi položkami akcí v pracovním postupu. |
Podobně jako trigger musí mít i každá akce v pracovním postupu jedinečný název. V následujícím příkladu je Response
výchozí název akce , ale můžete použít platný a smysluplnější identifikátor. Akce musí mít inputs
oddíl, který určuje data, na kterých akce funguje. V akci Odpověď můžete zadat data výrazu, který se má vrátit ve zprávě odpovědi, spolu se stavovým kódem HTTP.
V naší základní definici pracovního postupu akce vygeneruje odpověď HTTP, kde text je krátká zpráva.
"actions": {
"Response": {
"inputs": {
"body": "Hello Azure Logic Apps Template!",
"statusCode": 200
},
"kind": "Http",
"runAfter": {},
"type": "Response"
}
}
Část runAfter
označuje, kde se akce spouští v pořadí pracovního postupu. V předchozím příkladu je jenom jedna akce, která se tedy spustí vždy při aktivaci triggeru. Pokud měl pracovní postup více akcí, můžete zadat název akce a stav této akce v této části. Akce se spustí, pokud runAfter
se akce dokončí se zadaným stavem. Následující kód znázorňuje příklad. Akce mySecondAction
se spustí po myFirstAction
, ale pouze v případě, že myFirstAction
skončí se stavem Succeeded
:
"actions": {
"mySecondAction": {
"inputs": {
...
},
"runAfter": {
"myFirstAction": [
"Succeeded"
]
},
"type": ...
},
"myFirstAction": {
"inputs": {
...
},
"runAfter": {},
"type": ...
}
}
Oddíl výstupů
Pomocí oddílu outputs
definujte data, která pracovní postup může vrátit po dokončení spuštění. Můžete sledovat určitý stav nebo data pro každé spuštění pracovního postupu. Výstup z každého spuštění pracovního postupu můžete prozkoumat pomocí historie spuštění Azure Logic Apps, která je k dispozici na webu Azure Portal nebo v rozhraní REST API pracovního postupu.
Formát oddílu outputs
vypadá takto:
"outputs": {
"<key-name>": {
"type": "<key-type>",
"value": "<key-value>"
}
}
Výrazy pracovního postupu
Místo libovolné pevné hodnoty, proměnné nebo konstanty můžete použít výraz pracovního postupu. Výraz můžete také umístit kdekoli v řetězcové hodnotě JSON tak, že předponu výrazu předponou znaku at (@). Můžete například k načtení hodnoty pojmenovaného parametru ve výrazu použít funkci @parameters
(parametry jsou popsané v další části).
"customerFullName": "Bill Frost",
"accountName": "@parameters('customerName')"
Azure Logic Apps poskytuje integrované funkce, které můžete použít k vytváření složitých výrazů:
- Řetězcové funkce: Pro zřetězení nebo rozdělení řetězců, převod znaků mezi velkými a dolními písmeny a hledání podřetězců.
- Funkce kolekce: Pro detekci, zda kolekce obsahuje položky, které odpovídají určitému vzoru, načítání položek z kolekce a kombinování kolekcí.
- Logické porovnávací funkce: Pro zjištění, zda jsou operandy stejné, odlišné, číselně větší nebo numericky menší než navzájem.
- Převodní funkce: Změna typu nebo formátu dat
- Matematické funkce: například
add
,sub
,div
amul
, plus několik dalších. - Funkce data a času: Pro parsování a zpracování dat a časů.
- Funkce pracovního postupu: Pro načtení informací o datech předaných akci pracovního postupu.
parameter
Například funkce (dříve zobrazená) načte hodnotu pojmenovaného parametru abody
funkce (zobrazená dříve) vrátí data vygenerovaná akcí. - Funkce pro manipulaci s JSON a XML: Pro analýzu a zpracování dokumentů JSON a XML.
Proměnné můžete definovat v inputs
části InitializeVariable
akce a tyto proměnné můžete manipulovat pomocí výrazů. Načtěte hodnotu proměnné pomocí variables
funkce. Následující příklad používá InitializeVariable
akci k vytvoření celočíselné proměnné s názvem myIntegerVariable
a inicializace do 99
. Tento příklad také ukazuje Condition
akci s typem If
. Podmínka používá výraz k otestování myIntegerVariable
hodnoty proměnné a pokud odpovídá hodnotě 100
, podmínka použije akci HTTP k provedení požadavku GET.
"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"
}
}
Část Parametry
Tato parameters
část umožňuje parametrizovat pracovní postup. Hodnoty pro každý z těchto parametrů můžete určovat za běhu. Na parametry můžete odkazovat kdekoli v pracovním postupu, kde můžete použít konstantu nebo výraz.
Můžete přidat definici parametrů s výchozí hodnotou. Výchozí hodnota se použije, pokud nezadáte hodnotu parametru za běhu. Následující příklad ukazuje, jak definovat parametr s názvem cityParam
. Parametr se použije uvnitř podmínky akce mypostrequest
. Tato akce se provede jenom v případě, že dokument požadavku obsahuje město odpovídající hodnotě tohoto parametru. Výchozí hodnota parametru je 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"
}
}
}
}