Dela via


Schemareferensguide för arbetsflödesdefinitionsspråket i Azure Logic Apps

När du skapar ett logikapparbetsflöde i Azure Logic Apps har arbetsflödet en underliggande JSON-definition (JavaScript Object Notation) som beskriver den faktiska logiken som kör arbetsflödet. Arbetsflödesdefinitionen följer en struktur som verifieras mot schemat arbetsflödesdefinitionsspråk. Den här referensen ger en översikt över den här strukturen och hur schemat definierar attribut i arbetsflödesdefinitionen.

Arbetsflödesdefinitionsstruktur

En arbetsflödesdefinition innehåller alltid en utlösare som instansierar arbetsflödet, plus en eller flera åtgärder som körs när utlösaren utlöses.

Här är den övergripande strukturen för en arbetsflödesdefinition:

"definition": {
  "$schema": "<workflow-definition-language-schema-version>",
  "actions": { "<workflow-action-definitions>" },
  "contentVersion": "<workflow-definition-version-number>",
  "outputs": { "<workflow-output-definitions>" },
  "parameters": { "<workflow-parameter-definitions>" },
  "staticResults": { "<static-results-definitions>" },
  "triggers": { "<workflow-trigger-definitions>" }
}
Attribute Required Description
definition Yes Startelementet för arbetsflödesdefinitionen
$schema Endast när du refererar till en arbetsflödesdefinition externt Platsen för JSON-schemafilen som beskriver versionen av arbetsflödesdefinitionsspråket, som du hittar här:

https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json
actions No Definitionerna för en eller flera åtgärder som ska köras vid arbetsflödeskörning. Mer information finns i Utlösare och åtgärder.



Maximalt antal åtgärder: 250
contentVersion No Versionsnumret för arbetsflödesdefinitionen, som är "1.0.0.0" som standard. Ange ett värde som ska användas för att identifiera och bekräfta rätt definition när du distribuerar ett arbetsflöde.
outputs No Definitionerna för utdata som ska returneras från en arbetsflödeskörning. Mer information finns i Utdata.



Maximalt antal utdata: 10
parameters No Definitionerna för en eller flera parametrar som skickar de värden som ska användas vid logikappens körning. Mer information finns i Parametrar.



Maximala parametrar: 50
staticResults No Definitionerna för ett eller flera statiska resultat som returneras av åtgärder som testutdata när statiska resultat är aktiverade för dessa åtgärder. I varje åtgärdsdefinition runtimeConfiguration.staticResult.name refererar attributet till motsvarande definition i staticResults. Mer information finns i Statiska resultat.
triggers No Definitionerna för en eller flera utlösare som instansierar arbetsflödet. Du kan definiera mer än en utlösare, men bara med arbetsflödesdefinitionsspråket, inte visuellt via arbetsflödesdesignern. Mer information finns i Utlösare och åtgärder.



Maximalt antal utlösare: 10

Utlösare och åtgärder

I en arbetsflödesdefinition definierar avsnitten triggers och actions de anrop som inträffar under arbetsflödets körning. Syntax och mer information om dessa avsnitt finns i Arbetsflödesutlösare och åtgärder.

Parameters

Distributionens livscykel har vanligtvis olika miljöer för utveckling, testning, mellanlagring och produktion. När du distribuerar logikappar till olika miljöer vill du förmodligen använda olika värden, till exempel anslutningssträng, baserat på dina distributionsbehov. Eller så kan du ha värden som du vill återanvända i hela arbetsflödet utan hårdkodning eller som ändras ofta. I avsnittet för arbetsflödesdefinitionen parameters kan du definiera eller redigera parametrar för de värden som arbetsflödet använder vid körning. Du måste definiera dessa parametrar först innan du kan referera till dessa parametrar någon annanstans i arbetsflödesdefinitionen.

Här är den allmänna strukturen för en parameterdefinition:

"parameters": {
   "<parameter-name>": {
      "type": "<parameter-type>",
      "defaultValue": <default-parameter-value>,
      "allowedValues": [ <array-with-permitted-parameter-values> ],
      "metadata": {
         "description": "<parameter-description>"
      }
   }
},
Attribute Required Type Description
< parameter-name> Yes String Namnet på parametern som du vill definiera
< parametertyp> Yes int, float, string, bool, array, object, securestring, secureobject



Obs! För alla lösenord, nycklar och hemligheter använder du typerna securestring eller secureobject eftersom åtgärden GET inte returnerar dessa typer. Mer information om hur du skyddar parametrar finns i Säkerhetsrekommendationer för åtgärds- och indataparametrar.
Typ för parametern
< default-parameter-value> Yes Samma som type Standardparametervärdet som ska användas om inget värde anges när arbetsflödet instansierar. Attributet defaultValue krävs så att arbetsflödesdesignern kan visa parametern korrekt, men du kan ange ett tomt värde.
< array-with-permitted-parameter-values> No Array En matris med värden som parametern kan acceptera
< parameterbeskrivning> No JSON-objekt Annan parameterinformation, till exempel en beskrivning av parametern

Skapa sedan en Azure Resource Manager-mall för arbetsflödesdefinitionen, definiera mallparametrar som accepterar de värden du vill använda vid distributionen, ersätt hårdkodade värden med referenser till mall- eller arbetsflödesdefinitionsparametrar efter behov och lagra de värden som ska användas vid distributionen i en separat parameterfil. På så sätt kan du enkelt ändra dessa värden via parameterfilen utan att behöva uppdatera och distribuera om logikappen. För information som är känslig eller måste skyddas, till exempel användarnamn, lösenord och hemligheter, kan du lagra dessa värden i Azure Key Vault och låta parameterfilen hämta dessa värden från nyckelvalvet. Mer information och exempel om hur du definierar parametrar på mall- och arbetsflödesdefinitionsnivåer finns i Översikt: Automatisera distribution för logikappar med Azure Resource Manager-mallar.

Statiska resultat

staticResults I attributet definierar du en åtgärds mock outputs och status att åtgärden returnerar när åtgärdens statiska resultatinställning är aktiverad. I åtgärdens definition runtimeConfiguration.staticResult.name refererar attributet till namnet på den statiska resultatdefinitionen i staticResults. Lär dig hur du kan testa logikapparbetsflöden med falska data genom att konfigurera statiska resultat.

"definition": {
   "$schema": "<...>",
   "actions": { "<...>" },
   "contentVersion": "<...>",
   "outputs": { "<...>" },
   "parameters": { "<...>" },
   "staticResults": {
      "<static-result-definition-name>": {
         "outputs": {
            <output-attributes-and-values-returned>,
            "headers": { <header-values> },
            "statusCode": "<status-code-returned>"
         },
         "status": "<action-status>"
      }
   },
   "triggers": { "<...>" }
}
Attribute Required Type Description
< static-result-definition-name> Yes String Namnet på en statisk resultatdefinition som en åtgärdsdefinition kan referera till via ett runtimeConfiguration.staticResult objekt. För mer information, se Körningskonfigurationsinställningar.

Du kan använda valfritt unikt namn. Som standard läggs det här unika namnet till med ett tal som ökas efter behov.
< output-attributes-and-values-returned> Yes Varies Kraven för dessa attribut varierar beroende på olika villkor. När status är Succeeded, innehåller attributet outputs till exempel attribut och värden som returneras som mock-resultat av åtgärden. Om status är Failed, innehåller outputserrors-attributet, som är en matris med ett eller flera message-felobjekt som har felinformation.
< header-values> No JSON Alla rubrikvärden som returneras av åtgärden
< status-code-returned> Yes String Statuskoden som returneras av åtgärden
< åtgärdsstatus> Yes String Åtgärdens status, till exempel, Succeeded eller Failed

I den här HTTP-åtgärdsdefinitionen refererar attributet runtimeConfiguration.staticResult.name till HTTP0 inuti attributet staticResults, där mock-utdata för åtgärden definieras. Attributet runtimeConfiguration.staticResult.staticResultOptions anger att inställningen för statiskt resultat finns Enabled på HTTP-åtgärden.

"actions": {
   "HTTP": {
      "inputs": {
         "method": "GET",
         "uri": "https://www.microsoft.com"
      },
      "runAfter": {},
      "runtimeConfiguration": {
         "staticResult": {
            "name": "HTTP0",
            "staticResultOptions": "Enabled"
         }
      },
      "type": "Http"
   }
},

HTTP-åtgärden returnerar utdata i HTTP0 definitionen i staticResults. I det här exemplet för statuskoden är OK exempelutdata. För rubrikvärden är mock-utdata "Content-Type": "application/JSON". För statusen för åtgärden är mockoutputen Succeeded.

"definition": {
   "$schema": "<...>",
   "actions": { "<...>" },
   "contentVersion": "<...>",
   "outputs": { "<...>" },
   "parameters": { "<...>" },
   "staticResults": {
      "HTTP0": {
         "outputs": {
            "headers": {
               "Content-Type": "application/JSON"
            },
            "statusCode": "OK"
         },
         "status": "Succeeded"
      }
   },
   "triggers": { "<...>" }
},

Expressions

Med JSON kan du ha literalvärden som finns vid designtillfället, till exempel:

"customerName": "Sophia Owen",
"rainbowColors": ["red", "orange", "yellow", "green", "blue", "indigo", "violet"],
"rainbowColorsCount": 7

Det kan också finnas värden som inte existerar förrän körningstid. För att representera dessa värden kan du använda uttryck som utvärderas vid körning. Ett uttryck är en sekvens som kan innehålla en eller flera funktioner, operatorer, variabler, explicita värden eller konstanter. I arbetsflödesdefinitionen kan du använda ett uttryck var som helst i ett JSON-strängvärde genom att prefixa uttrycket med at-sign (@). När du utvärderar ett uttryck som representerar ett JSON-värde extraheras uttryckstexten genom att @-tecknet tas bort och resulterar alltid i ett annat JSON-värde.

För den tidigare definierade customerName egenskapen kan du till exempel hämta egenskapsvärdet med hjälp av funktionen parameters() i ett uttryck och tilldela värdet till accountName egenskapen:

"customerName": "Sophia Owen",
"accountName": "@parameters('customerName')"

Med stränginterpolation kan du också använda flera uttryck inuti strängar som omsluts av @-tecknet och klammerparenteser ({}). Här är syntaxen:

@{ "<expression1>", "<expression2>" }

Resultatet är alltid en sträng, vilket gör den här funktionen liknande concat(), till exempel:

"customerName": "First name: @{parameters('firstName')} Last name: @{parameters('lastName')}"

Om du har en literalsträng som börjar med @-tecknet prefixar du @-tecknet med ett annat @-tecken som ett escape-tecken: @@

De här exemplen visar hur uttryck utvärderas:

JSON-värde Result
"Sophia Owen" Återge dessa tecken: 'Sophia Owen'
"array[1]" Returnera följande tecken: 'array[1]'
"@@" Returnera dessa tecken som en sträng med ett tecken: '@'
" @" Returnera dessa tecken som en sträng med två tecken: ' @'

I de här exemplen antar vi att du definierar "myBirthMonth" lika med "Januari" och "myAge" som är lika med talet 42:

"myBirthMonth": "January",
"myAge": 42

De här exemplen visar hur följande uttryck utvärderas:

JSON-uttryck Result
"@parameters('myBirthMonth')" Returnera den här strängen: "Januari"
"@{parameters('myBirthMonth')}" Returnera den här strängen: "Januari"
"@parameters('myAge')" Returnera det här numret: 42
"@{parameters('myAge')}" Returnera det här talet som en sträng: "42"
"Min ålder är @{parameters('myAge')}" Returnera den här strängen: "Min ålder är 42"
"@concat('Min ålder är ', string(parameters('myAge')))" Returnera den här strängen: "Min ålder är 42"
"Min ålder är @@{parameters('myAge')}" Returnera den här strängen, som innehåller uttrycket : "Min ålder är @{parameters('myAge')}'

När du arbetar visuellt i arbetsflödesdesignern kan du skapa uttryck med hjälp av uttrycksredigeraren, till exempel:

Skärmbild som visar arbetsflödesdesignern och uttrycksredigeraren.

När du är klar visas uttrycket för motsvarande egenskap i arbetsflödesdefinitionen searchQuery , till exempel egenskapen här:

"Search_tweets": {
  "inputs": {
    "host": {
      "connection": {
        "name": "@parameters('$connections')['x']['connectionId']"
      }
    }
  },
  "method": "get",
  "path": "/searchtweets",
  "queries": {
    "maxResults": 20,
    "searchQuery": "Azure @{concat('firstName','', 'LastName')}"
  }
},

Outputs

I avsnittet outputs definierar du de data som ditt arbetsflöde kan returnera när det har slutförts. Om du till exempel vill spåra en specifik status eller ett visst värde från varje körning anger du att arbetsflödets utdata returnerar dessa data.

Note

När du svarar på inkommande begäranden från en tjänsts REST-API ska du inte använda outputs. Använd i stället åtgärdstypen Response . Mer information finns i Arbetsflödesutlösare och åtgärder.

Här är den allmänna strukturen för en utdatadefinition:

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}
Attribute Required Type Description
< nyckelnamn> Yes String Nyckelnamnet för returvärdet för utdata
< nyckeltyp> Yes int, float, string, securestring, bool, array, JSON object Typ för returvärdet för utdata
< nyckelvärde> Yes Samma som <nyckeltyp> Utdatareturvärdet

Om du vill hämta utdata från en arbetsflödeskörning granskar du logikappens körningshistorik och information i Azure Portal eller använder REST-API:et för arbetsflöde. Du kan också skicka utdata till externa system, till exempel Power BI så att du kan skapa instrumentpaneler.

Operators

I uttryck och funktioner utför operatorerna specifika uppgifter, till exempel referens till en egenskap eller ett värde i en matris.

Operator Task
' För att använda en strängliteral som indata eller i uttryck och funktioner, omslut strängen endast med enkla citattecken, till exempel '<myString>'. Använd inte dubbla citattecken (""), som står i konflikt med JSON-formateringen runt ett helt uttryck. Till exempel:

Ja: length('Hello')
No: length("Hello")

När du skickar matriser eller siffror behöver du inte omsluta skiljetecken. Till exempel:

Ja: längd([1, 2, 3])
Nej: längd("[1, 2, 3]")
[] Om du vill referera till ett värde vid en specifik position (index) i en matris eller inuti ett JSON-objekt använder du hakparenteser, till exempel:

– Så här hämtar du det andra objektet i en matris:

myArray[1]

– Så här kommer du åt egenskaperna i ett JSON-objekt:

Exempel 1:
setProperty(<object>, '<parent-property>', addProperty(<object>['<parent-property>'], '<child-property>', <value>)

Exempel 2:
lastIndexOf(triggerBody()?['subject'],'some string')
. Om du vill referera till en egenskap i ett objekt använder du punktoperatorn. Om du till exempel vill hämta name egenskapen för ett customer JSON-objekt:

"parameters('customer').name"
? Om du vill referera till ett objekts egenskap utan att riskera ett körningsfel eller om arbetsflödet misslyckas använder du frågeteckenoperatorn (?), även kallad null ignore-operatorn, före egenskapen. Med den här operatorn kan du på ett säkert sätt komma åt en egenskap eller ett matriselement när det överordnade objektet eller den refererade egenskapen kan innehålla null eller saknas.

– Om det överordnade objektet som visas innan operatorn ? är null eller saknar den refererade egenskapen returnerar nullhela uttrycket , i stället för att arbetsflödet misslyckas.

– Om objektet eller egenskapen finns returnerar uttrycket egenskapens värde.

Anta till exempel att du har följande uttryck:

triggerBody()?['ContentData']

– Om triggerBody() returnerar ett objekt från ContentData egenskapen får du objektets värde.

– Om triggerBody() är null eller saknar ContentData egenskapen returnerar null funktionen i stället för att misslyckas med felet "Det går inte att bearbeta mallspråkuttryck".

Med ? operatorn kan du också länka åtkomstegenskaper på ett säkert sätt och är användbar i följande scenarier:

– Hantera uttryck som fungerar med valfria JSON-fält.
– Hantera anslutningsutdata som kan utelämna vissa egenskaper.
– Undvik sköra uttryck i villkorsstyrd logik.

Om du till exempel vill länka egenskapsåtkomst och hantera null-utdata från en utlösare kan du använda följande uttryck:

coalesce(trigger().outputs?.body?['<property-name>'], '<property-default-value>')

Functions

Vissa uttryck får sina värden från körningsåtgärder som kanske inte finns ännu när arbetsflödesdefinitionen börjar köras. Om du vill referera till eller arbeta med dessa värden i uttryck kan du använda funktioner som arbetsflödesdefinitionsspråket tillhandahåller.