若要執行不符合這些屬性的程式碼,您可以 使用 Azure Functions 來建立和呼叫函數

本指南顯示動作如何在以 Office 365 Outlook 觸發程序開始的範例工作流程中運作。 新的電子郵件送達相關聯的 Outlook 電子郵件帳戶時,會執行工作流程。 範例代碼段會擷取存在於電子郵件本文中的任何電子郵件位址,並傳回這些位址做為您可以在後續動作中使用的輸出。

下圖顯示範例工作流程的醒目提示:

  • 您想要在其中新增程式碼片段的邏輯應用程式工作流程。 工作流程必須已使用觸發程序啟動。

    本文的範例使用名為 [收到新的電子郵件時] 的 Office 365 Outlook 觸發程序。

    如果您沒有工作流程,則請參閱下列文件:

  • 使用量: 建立範例使用量邏輯應用程式工作流程

  • 標準: 建立範例標準邏輯應用程式工作流程

  • 根據您是否有使用量或標準邏輯應用程式工作流程,請檢閱下列需求:

  • 使用量工作流程

    Node.js 8.11.10 版

    從邏輯應用程式資源連結至整合帳戶 ,否則為空白或其他。

    請確定您使用適合於使用案例或情節的企業整合帳戶。

    例如, 免費層 企業整合帳戶僅適用於探勘情節和工作負載 (而非生產情節)、這類帳戶使用量和輸送量有限,且服務等級協定 (SLA) 不支援這類帳戶。

    其他企業整合帳戶層會產生成本,但包含 SLA 支援、提供更多輸送量,並具有較高的限制。 深入了解 整合帳戶層 限制 定價

  • Azure 入口網站 中,在設計工具中開啟您的取用邏輯應用程式工作流程。

  • 在設計工具中, 遵循這些一般步驟以將名為 執行 JavaScript 指令碼程式碼 內嵌程式碼 動作新增至您的工作流程 (部分機器翻譯)。

    本範例會在 Office 365 Outlook 觸發程序底下新增動作。 根據預設,動作包含一些範例程式碼,包括 return 陳述式。

    觸發程序和任何先前動作的輸出符合目前聚焦編輯方塊的輸入格式時,動態內容清單會顯示這些輸出。 此清單可讓您更輕鬆地從工作流程使用和參考這些輸出。 在此範例中,此清單會顯示 Outlook 觸發程序的輸出,包括電子郵件訊息的 [內文] 屬性。

    選取 [內文] 屬性之後,[執行 JavaScript 程式碼] 動作會將權杖解析為唯讀 workflowContext JSON 物件,而您的程式碼片段可以將其作為輸入。 workflowContext 物件所含的屬性可讓您的程式碼存取工作流程中的觸發程序和先前動作的輸出,例如觸發程序的 body 屬性,而這與電子郵件訊息的 [內文] 屬性不同。 如需 workflowContext 物件的詳細資訊,請參閱本文稍後的 使用 workflowContext 物件來參考觸發程序和動作輸出

    如果您的程式碼片段參考含有點 ( . ) 運算子的動作名稱,則這些參考必須以方括弧 ( [] ) 和引號 ( "" ) 來括住這些動作名稱,例如:

    // Correct
    workflowContext.actions["my.action.name"].body

    // Incorrect
    workflowContext.actions.my.action.name.body

    此外,在 [執行 JavaScript 程式碼] 動作中,您必須新增 Actions 參數 ,然後將這些動作名稱新增至該參數。 如需詳細資訊,請參閱本文稍後的 將相依性當成參數新增至執行 JavaScript 程式碼動作

  • 若要區分您從觸發程序 body 屬性選取的電子郵件訊息 [內文] 屬性,請改為將第二個 body 屬性重新命名為 Body 。 在結尾新增結尾分號 ( ; ),以完成程式碼陳述式。

    [執行 JavaScript 程式碼] 動作在語法上不需要 return 陳述式。 不過,包括 return 陳述式,即可在稍後的動作中使用[結果] 權杖,以稍後在工作流程中更輕鬆地參考動作結果。

    在此範例中,程式碼片段會呼叫 match() 函數來傳回結果,而此函數會在電子郵件移轉內文中尋找所指定規則運算式的相符項目。 [建立 HTML 資料表] 動作接著會使用 [結果] 權杖來參考 [執行 JavaScript 程式碼] 動作的結果,並建立單一結果。

  • Azure 入口網站 中,在設計工具中開啟您的標準邏輯應用程式工作流程。

  • 在設計工具中, 遵循這些一般步驟以將名為 執行 JavaScript 指令碼程式碼 內嵌程式碼 動作新增至您的工作流程 (部分機器翻譯)。

  • 在 [程式碼] 方塊中,輸入您的程式碼。 撰寫您放在方法內但不含方法簽章的程式碼。

    如果您開始輸入已辨識的關鍵字,就會顯示自動完成清單,以便從可用的關鍵字中選取,例如:

    動態內容清單會顯示觸發程序和任何先前動作的輸出,其中,這些輸出符合目前聚焦編輯方塊的輸入格式。 此清單可讓您更輕鬆地從工作流程使用和參考這些輸出。 在此範例中,此清單會顯示 Outlook 觸發程序的輸出,包括電子郵件訊息的 [內文] 屬性。

    選取 [內文] 屬性之後,[執行 JavaScript 程式碼] 動作會將權杖解析為唯讀 workflowContext JSON 物件,而您的程式碼片段可以將其作為輸入。 workflowContext 物件所含的屬性可讓您的程式碼存取工作流程中的觸發程序和先前動作的輸出,例如觸發程序的 body 屬性,而這與電子郵件訊息的 [內文] 屬性不同。 如需 workflowContext 物件的詳細資訊,請參閱本文稍後的 使用 workflowContext 物件來參考觸發程序和動作輸出

    如果您的程式碼片段參考含有點 ( . ) 運算子的動作名稱,則這些參考必須以方括弧 ( [] ) 和引號 ( "" ) 來括住這些動作名稱,例如:

    // Correct
    workflowContext.actions["myAction.name"].body

    // Incorrect
    workflowContext.actions.myAction.name.body

    此外,在 [執行 JavaScript 程式碼] 動作中,您必須新增 Actions 參數,然後將這些動作名稱新增至該參數。 如需詳細資訊,請參閱本文稍後的 將相依性當成參數新增至執行 JavaScript 程式碼動作

  • 若要區分您從觸發程序 body 屬性選取的電子郵件訊息 [內文] 屬性,請改為將第二個 body 屬性重新命名為 Body 。 在結尾新增結尾分號 ( ; ),以完成程式碼陳述式。

    使用 workflowContext 物件來參考觸發程序和動作輸出

    從設計工具上的程式碼片段內,您可以使用動態內容清單來選取可參考觸發程序或任何先前動作輸出的權杖。 當您選取權杖時,[執行 JavaScript 程式碼] 動作會將權杖解析為唯讀 workflowContext JSON 物件。 此物件可讓您的程式碼存取觸發程序、任何先前動作和工作流程的輸出。 此物件會使用下列結構,並包括 actions trigger workflow 屬性,而這些屬性也是物件:

    "workflowContext": { "actions": { "<action-name-1>": @actions('<action-name-1>'), "<action-name-2>": @actions('<action-name-2>') "trigger": { @trigger() "workflow": { @workflow()

    下表具有這些屬性的詳細資訊:

    actions 來自程式碼片段執行之前所執行先前動作的結果物件。 每個物件都會有「索引鍵值」 組,其中索引鍵是動作的名稱,而值相當於使用 @actions('<action-name>') 運算式呼叫 actions() 函數 的結果。

    動作的名稱會使用基礎工作流程定義中所出現的相同動作名稱,但將動作名稱中的空格 ( " " ) 取代為底線 ( _ )。 此物件集合可讓您從目前的工作流程執行個體執行中存取動作的屬性值。 trigger Object 來自觸發程序的結果物件,其中結果相當於呼叫 trigger() 函數 。 此物件可讓您從目前的工作流程執行個體執行中存取觸發程序的屬性值。 workflow Object 相當於呼叫 workflow() 函數 的工作流程物件。 此物件可讓您從目前的工作流程執行個體執行中存取屬性值,例如工作流程名稱、執行識別碼等等。

    在本文的範例中, workflowContext JSON 物件可能具有 Outlook 觸發程序的下列範例屬性和值:

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

    將相依性新增為參數至執行 JavaScript 程式碼動作

    在某些案例中,您可能必須明確地要求 [執行 JavaScript 程式碼] 動作包括程式碼參考為相依性之觸發程序的輸出。 例如,當您的程式碼參考工作流程執行階段無法使用的輸出時,您必須採取這個額外步驟。 在工作流程建立期間,Azure Logic Apps 引擎會分析程式碼片段,以判斷程式碼是否參考任何觸發程序或動作輸出。 如果這些參考存在,則引擎會自動包括這些輸出。 在工作流程執行階段,如果在 workflowContext 物件中找不到參考的觸發程序或動作輸出,則引擎會產生錯誤。 若要解決此錯誤,您必須將該觸發程序或動作新增為 [執行 JavaScript 程式碼] 動作的明確相依性。 另一個需要您採取此步驟的案例是 workflowContext 物件參考可使用點運算子 ( . ) 的觸發程序或動作名稱時。

    若要將觸發程序或動作新增為相依性,您可以適當地將 [觸發程序] 或 [動作] 參數新增至 [執行 JavaScript 程式碼] 動作。 接著,您會新增出現在工作流程基礎 JSON 定義中的觸發程序或動作名稱。

    您無法新增「變數」 作業、迴圈 (例如 For each Until ) 以及反覆運算索引作為明確相依性。

    如果您打算重複使用程式碼,則請務必一律使用程式碼片段編輯方塊來參考觸發程序和動作輸出。 如此一來,您的程式碼就會包括已解析的權杖參考,而不只是將觸發程序或動作輸出新增為明確相依性。

    例如,假設 Office 365 Outlook 連接器的 [傳送核准電子郵件] 動作在範例工作流程中的程式碼片段之前。 下列範例程式碼片段包括此動作中 SelectedOption 輸出的參考。

    在此範例中,您必須只新增「動作」 參數,然後將動作的 JSON 名稱 Send_approval_email 新增至參數。 如此一來,您就會指定 [執行 JavaScript 程式碼] 動作明確地包括 [傳送核准電子郵件] 動作的輸出。

    尋找觸發程序或動作的 JSON 名稱

    開始之前,您需要基礎工作流程定義中觸發程序或動作的 JSON 名稱。

  • 工作流程定義中的名稱會使用底線 (_),而不是空格。

  • 如果動作名稱使用點運算子 (.),則請包括該運算子,例如:

    My.Action.Name

  •