Köra kodfragment i arbetsflöden med infogade kodåtgärder i Azure Logic Apps
Gäller för: Azure Logic Apps (Förbrukning + Standard)
Om du vill skapa och köra ett kodfragment i logikappens arbetsflöde utan mycket konfiguration kan du använda den inbyggda anslutningsappen Infogad kod . Den här anslutningsappen har en åtgärd som returnerar resultatet från kodfragmentet så att du kan använda utdata i arbetsflödets efterföljande åtgärder.
För närvarande har anslutningsappen bara en enda åtgärd som fungerar bäst för ett kodfragment med följande attribut, men fler åtgärder är under utveckling. Den inbyggda anslutningsappen för infogad kod har också olika gränser, baserat på om logikappens arbetsflöde är Förbrukning eller Standard.
Åtgärd | Språk | Språkversion | Körningens varaktighet | Datastorlek | Andra anteckningar |
---|---|---|---|---|---|
Köra JavaScript-kod | JavaScript | Standard: Node.js 16.x.x Förbrukning: Node.js 8.11.1 Mer information finns i Standard inbyggda objekt. |
Avslutas om 5 sekunder eller färre. | Hanterar data upp till 50 MB. | – Kräver inte att du arbetar med variables-åtgärderna, som inte stöds av åtgärden. – Stöder require() inte funktionen för att köra JavaScript. |
Om du vill köra kod som inte passar dessa attribut kan du skapa och anropa en funktion via Azure Functions i stället.
Den här artikeln visar hur åtgärden fungerar i ett exempelarbetsflöde som börjar med en Office 365 Outlook-utlösare. Arbetsflödet körs när ett nytt e-postmeddelande kommer till det associerade Outlook-e-postkontot. Exempelkodfragmentet extraherar alla e-postadresser som finns i e-postmeddelandets brödtext och returnerar de adresser som utdata som du kan använda i en efterföljande åtgärd.
Följande diagram visar höjdpunkterna från exempelarbetsflödet:
Förutsättningar
Ett Azure-konto och prenumeration. Om du inte har någon prenumeration kan du registrera ett kostnadsfritt Azure-konto.
Logikappens arbetsflöde där du vill lägga till kodfragmentet. Arbetsflödet måste redan börja med en utlösare.
I den här artikeln används Office 365 Outlook-utlösare som heter When a new email arrives (När ett nytt e-postmeddelande tas emot).
Om du inte har något arbetsflöde kan du läsa följande dokumentation:
Baserat på om logikappen är Förbrukning eller Standard granskar du följande krav:
Förbrukning: Kräver Node.js version 8.11.10 och en länk till ett integrationskonto, tomt eller på annat sätt, från logikappresursen.
Viktigt
Se till att du använder ett integrationskonto som är lämpligt för ditt användningsfall eller scenario.
Till exempel är integreringskonton på den kostnadsfria nivån endast avsedda för undersökande scenarier och arbetsbelastningar, inte produktionsscenarier, är begränsade i användning och dataflöde och stöds inte av ett serviceavtal (SLA).
Andra integreringskontonivåer medför kostnader, men inkluderar SLA-support, erbjuder mer dataflöde och har högre gränser. Läs mer om integreringskontonivåer, gränser och priser.
Standard: Kräver Node.js version 16.x.x, men inget integrationskonto.
Lägg till åtgärden Execute JavaScript Code (Kör JavaScript Code)
Öppna arbetsflödet för logikappen Förbrukning i designern i Azure Portal.
-
Det här exemplet lägger till åtgärden under Office 365 Outlook-utlösaren. Som standard innehåller åtgärden en del exempelkod, inklusive en
return
-instruktion. Ta bort exempelkoden i rutan Kod och ange din kod. Skriv koden som du skulle placera i en metod, men utan metodsignaturen.
Tips
När markören finns i rutan Kod visas listan med dynamiskt innehåll. Även om du kommer att använda den här listan senare kan du ignorera och lämna listan öppen för tillfället. Välj inte Dölj.
Om du börjar skriva ett identifierat nyckelord visas listan komplettera automatiskt så att du kan välja bland tillgängliga nyckelord, till exempel:
I följande exempelkodfragment skapas först en variabel med namnet myResult som lagrar ett reguljärt uttryck, som anger ett mönster som ska matchas i indatatext. Koden skapar sedan en variabel med namnet e-post som lagrar e-postmeddelandets brödtextinnehåll från utlösarens utdata.
Med markören kvar i rutan Kod letar du reda på avsnittet När ett nytt e-postmeddelande kommer och väljer egenskapen Brödtext , som refererar till e-postmeddelandets brödtext.
Listan med dynamiskt innehåll visar utdata från utlösaren och eventuella föregående åtgärder när dessa utdata matchar indataformatet för redigeringsrutan som för närvarande är i fokus. Den här listan gör dessa utdata enklare att använda och referera till från arbetsflödet. I det här exemplet visar listan utdata från Outlook-utlösaren, inklusive e-postmeddelandets body-egenskap .
När du har valt egenskapen Brödtext löser åtgärden Kör JavaScript Code token till ett skrivskyddat
workflowContext
JSON-objekt, som kodfragmentet kan använda som indata. ObjektetworkflowContext
innehåller egenskaper som ger din kod åtkomst till utdata från utlösaren och föregående åtgärder i arbetsflödet, till exempel utlösarensbody
egenskap, som skiljer sig från e-postmeddelandets body-egenskap . Mer information om objektet finns iworkflowContext
Referensutlösare och åtgärdsutdata med hjälp av workflowContext-objektet senare i den här artikeln.Viktigt
Om kodfragmentet refererar till åtgärdsnamn som innehåller punktoperatorn (.) måste dessa referenser omsluta dessa åtgärdsnamn med hakparenteser ([]) och citattecken (""), till exempel:
// Correct
workflowContext.actions["my.action.name"].body
// Incorrect
workflowContext.actions.my.action.name.body
I åtgärden Execute JavaScript Code (Kör JavaScript Code) måste du också lägga till parametern Actions (Åtgärder) och sedan lägga till dessa åtgärdsnamn i parametern. Mer information finns i Lägga till beroenden som parametrar i en Execute JavaScript Code-åtgärd senare i den här artikeln.
Om du vill skilja e-postmeddelandets body-egenskap som du valde från utlösarens
body
egenskap byter du namn på den andrabody
egenskapen tillBody
i stället. Lägg till det avslutande semikolonet (;) i slutet för att slutföra kodsatsen.Åtgärden Execute JavaScript Code kräver inte syntaktiskt en
return
instruktion. Men genom att inkludera -instruktionenreturn
kan du enklare referera till åtgärdsresultaten senare i arbetsflödet med hjälp av resultattoken i senare åtgärder.I det här exemplet returnerar kodfragmentet resultatet genom att anropa
match()
funktionen, som hittar eventuella matchningar i e-postmeddelandets brödtext till det angivna reguljära uttrycket. Åtgärden Skapa HTML-tabell använder sedan resultattoken för att referera till resultaten från åtgärden Execute JavaScript Code (Kör JavaScript Code ) och skapar ett enda resultat.Spara arbetsflödet när du är klar.
Referensutlösare och åtgärdsutdata med hjälp av workflowContext-objektet
Inifrån kodfragmentet i designern kan du använda listan med dynamiskt innehåll för att välja en token som refererar till utdata från utlösaren eller någon föregående åtgärd. När du väljer token löser åtgärden Execute JavaScript Code den token till ett skrivskyddat JSON-objekt workflowContext
. Det här objektet ger din kod åtkomst till utdata från utlösaren, eventuella föregående åtgärder och arbetsflödet. Objektet använder följande struktur och innehåller actions
egenskaperna , trigger
och workflow
, som också är objekt:
{
"workflowContext": {
"actions": {
"<action-name-1>": @actions('<action-name-1>'),
"<action-name-2>": @actions('<action-name-2>')
},
"trigger": {
@trigger()
},
"workflow": {
@workflow()
}
}
}
Följande tabell innehåller mer information om dessa egenskaper:
Egenskap | Typ | Beskrivning |
---|---|---|
actions |
Objektsamling | Resultatobjekten från föregående åtgärder som körs innan kodfragmentet körs. Varje objekt har ett nyckel/värde-par där nyckeln är åtgärdsnamnet och värdet motsvarar resultatet från anropet av funktionen actions() med @actions('<action-name>') uttrycket. Åtgärdens namn använder samma åtgärdsnamn som visas i den underliggande arbetsflödesdefinitionen, som ersätter blanksteg (" ") i åtgärdsnamnet med understreck (_). Den här objektsamlingen ger åtkomst till åtgärdens egenskapsvärden från den aktuella arbetsflödesinstanskörningen. |
trigger |
Objekt | Resultatobjektet från utlösaren där resultatet motsvarar att anropa funktionen trigger(). Det här objektet ger åtkomst till utlösarens egenskapsvärden från den aktuella arbetsflödesinstanskörningen. |
workflow |
Objekt | Arbetsflödesobjektet som motsvarar anropet av funktionen workflow(). Det här objektet ger åtkomst till egenskapsvärdena, till exempel arbetsflödesnamnet, körnings-ID och så vidare, från den aktuella arbetsflödesinstanskörningen. |
I den här artikelns exempel workflowContext
kan JSON-objektet ha följande exempelegenskaper och värden från Outlook-utlösaren:
{
"workflowContext": {
"trigger": {
"name": "When_a_new_email_arrives",
"inputs": {
"host": {
"connection": {
"name": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Web/connections/office365"
}
},
"method": "get",
"path": "/Mail/OnNewEmail",
"queries": {
"includeAttachments": "False"
}
},
"outputs": {
"headers": {
"Pragma": "no-cache",
"Content-Type": "application/json; charset=utf-8",
"Expires": "-1",
"Content-Length": "962095"
},
"body": {
"Id": "AAMkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgBGAAAAAABmZwxUQtCGTqSPpjjMQeD",
"DateTimeReceived": "2019-03-28T19:42:16+00:00",
"HasAttachment": false,
"Subject": "Hello World",
"BodyPreview": "Hello World",
"Importance": 1,
"ConversationId": "AAQkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgAQ",
"IsRead": false,
"IsHtml": true,
"Body": "Hello World",
"From": "<sender>@<domain>.com",
"To": "<recipient-2>@<domain>.com;<recipient-2>@<domain>.com",
"Cc": null,
"Bcc": null,
"Attachments": []
}
},
"startTime": "2019-05-03T14:30:45.971564Z",
"endTime": "2019-05-03T14:30:50.1746874Z",
"scheduledTime": "2019-05-03T14:30:45.8778117Z",
"trackingId": "1cd5ffbd-f989-4df5-a96a-6e9ce31d03c5",
"clientTrackingId": "08586447130394969981639729333CU06",
"originHistoryName": "08586447130394969981639729333CU06",
"code": "OK",
"status": "Succeeded"
},
"workflow": {
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>",
"name": "<logic-app-workflow-name>",
"type": "Microsoft.Logic/workflows",
"location": "<Azure-region>",
"run": {
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>/runs/08586453954668694173655267965CU00",
"name": "08586453954668694173655267965CU00",
"type": "Microsoft.Logic/workflows/runs"
}
}
}
}
Lägga till beroenden som parametrar i en Köra JavaScript-kodåtgärd
I vissa fall kan du behöva kräva att åtgärden Kör JavaScript Code uttryckligen innehåller utdata från utlösaren eller åtgärder som koden refererar till som beroenden. Du måste till exempel ta det här extra steget när koden refererar till utdata som inte är tillgängliga vid arbetsflödets körningstid. När arbetsflödet skapas analyserar Azure Logic Apps-motorn kodfragmentet för att avgöra om koden refererar till utlösare eller åtgärdsutdata. Om dessa referenser finns inkluderar motorn dessa utdata automatiskt. Om den refererade utlösaren eller åtgärdsutdata inte hittas i workflowContext
objektet vid körningen av arbetsflödet genererar motorn ett fel. För att lösa det här felet måste du lägga till utlösaren eller åtgärden som ett explicit beroende för åtgärden Kör JavaScript Code . Ett annat scenario som kräver att du tar det här steget är när workflowContext
objektet refererar till en utlösare eller ett åtgärdsnamn som använder punktoperatorn (.).
Om du vill lägga till en utlösare eller åtgärd som ett beroende lägger du till parametrarna Utlösare eller Åtgärder enligt vad som är tillämpligt för åtgärden Kör JavaScript-kod . Sedan lägger du till utlösar- eller åtgärdsnamnen så som de visas i arbetsflödets underliggande JSON-definition.
Anteckning
Du kan inte lägga till variabler , loopar som For each eller Until och iterationsindex som explicita beroenden.
Om du planerar att återanvända koden ska du alltid använda redigeringsrutan för kodfragmentet för att referera till utlösar- och åtgärdsutdata. På så sätt innehåller koden de lösta tokenreferenserna i stället för att bara lägga till utlösaren eller åtgärdens utdata som explicita beroenden.
Anta till exempel att Office 365 Outlook-anslutningsappens åtgärd Skicka e-postgodkännande föregår kodfragmentet i exempelarbetsflödet. Följande exempelkodfragment innehåller en referens till SelectedOption-utdata från den här åtgärden.
I det här exemplet måste du bara lägga till parametern Actions och sedan lägga till åtgärdens JSON-namn, Send_approval_email
, i parametern . På så sätt anger du att åtgärden Execute JavaScript Code explicit innehåller utdata från åtgärden Skicka e-postgodkännande .
Hitta utlösarens eller åtgärdens JSON-namn
Innan du börjar behöver du JSON-namnet för utlösaren eller åtgärden i den underliggande arbetsflödesdefinitionen.
Namn i arbetsflödesdefinitionen använder ett understreck (_), inte ett blanksteg.
Om ett åtgärdsnamn använder punktoperatorn (.), inkluderar du operatorn, till exempel:
My.Action.Name
I verktygsfältet för arbetsflödesdesignern väljer du Kodvy. Leta reda på
actions
åtgärdens namn i -objektet.Är till exempel
Send_approval_email
JSON-namnet för åtgärden Skicka e-postgodkännande .Om du vill återgå till designervyn väljer du Designer i kodvyns verktygsfält.
Lägg nu till JSON-namnet i åtgärden Execute JavaScript Code (Kör JavaScript-kod ).
Lägg till utlösaren eller åtgärdsnamnet i åtgärden Execute JavaScript Code (Kör JavaScript-kod)
I åtgärden Execute JavaScript Code (Kör JavaScript-kod ) öppnar du listan Lägg till ny parameter .
I listan med parametrar väljer du följande parametrar som ditt scenario kräver.
Parameter Beskrivning Åtgärder Inkludera utdata från föregående åtgärder som beroenden. När du väljer den här parametern uppmanas du att ange de åtgärder som du vill lägga till. Utlösare Inkludera utdata från utlösaren som beroenden. När du väljer den här parametern uppmanas du att ta med utlösarresultat. I listan Utlösare väljer du alltså Ja. I det här exemplet väljer du parametern Åtgärder .
I rutan Åtgärdsobjekt - 1 anger du åtgärdens JSON-namn.
Om du vill lägga till ett annat åtgärdsnamn väljer du Lägg till nytt objekt.
Spara arbetsflödet när du är klar.
Åtgärdsreferens
Mer information om åtgärden Kör JavaScript Code-åtgärdens struktur och syntax i den underliggande arbetsflödesdefinitionen med hjälp av arbetsflödesdefinitionsspråket finns i referensavsnittet för den här åtgärden.