Azure Logic Apps 中工作流程定義語言的架構參考指南

當您在 Azure Logic Apps中建立邏輯應用程式時,您的邏輯應用程式會有基礎工作流程定義,以描述邏輯應用程式中執行的實際邏輯。 該工作流程定義會使用 JSON ,並遵循工作流程定義語言架構所驗證的結構。 此參考提供此結構的總覽,以及架構如何定義工作流程定義中的屬性。

工作流程定義結構

工作流程定義一律包含可具現化邏輯應用程式的觸發程式,再加上觸發程式引發之後所執行的一或多個動作。

以下是工作流程定義的高階結構︰

"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>" }
}
屬性 必要 描述
definition 工作流程定義的起始元素
$schema 只有在外部參考工作流程定義時 JSON 結構描述檔案的位置,該檔案說明工作流程定義語言版本,您可以在此找到此版本:

https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json

actions No 要在工作流程執行時間執行的一或多個動作的定義。 如需詳細資訊,請參閱 觸發程式和動作

動作上限:250

contentVersion No 您的工作流程定義版本號碼,預設為 "1.0.0.0"。 若要在部署工作流程時協助識別及確認正確的定義,請指定要使用的值。
outputs No 要從工作流程執行傳回之輸出的定義。 如需詳細資訊,請參閱 輸出

輸出上限:10

parameters No 一或多個參數的定義,這些參數會傳遞要在邏輯應用程式執行時間使用的值。 如需詳細資訊,請參閱參數

參數上限:50

staticResults No 當這些動作啟用靜態結果時,動作所傳回的一個或多個靜態結果的定義,做為 mock 輸出。 在每個動作定義中, runtimeConfiguration.staticResult.name 屬性都會參考內的對應定義 staticResults 。 如需詳細資訊,請參閱 靜態結果
triggers No 一或多個觸發程序的定義,此觸發程序可具現化您的工作流程。 您可以定義多個觸發程序,但只能利用工作流程定義語言,而不會透過 Logic Apps 設計工具呈現。 如需詳細資訊,請參閱 觸發程式和動作

觸發程序上限:10

觸發程序及動作

在工作流程定義中,triggersactions 區段會定義在工作流程執行期間發生的呼叫。 如需這些區段的語法和詳細資訊,請參閱工作流程觸發程序和動作

參數

部署生命週期通常會有不同的環境可用於開發、測試、預備和生產環境。 將邏輯應用程式部署到各種環境時,您可能會想要根據您的部署需求使用不同的值,例如連接字串。 或者,您可能會有想要在整個邏輯應用程式中重複使用的值,而不需要硬式編碼或經常變更。 在工作流程定義的 parameters 區段中,您可以定義或編輯邏輯應用程式在執行時間使用的值參數。 您必須先定義這些參數,才能在工作流程定義中的其他位置參考這些參數。

以下是參數定義的一般結構︰

"parameters": {
   "<parameter-name>": {
      "type": "<parameter-type>",
      "defaultValue": <default-parameter-value>,
      "allowedValues": [ <array-with-permitted-parameter-values> ],
      "metadata": {
         "description": "<parameter-description>"
      }
   }
},
屬性 必要 類型 Description
<參數-名稱> String 您要定義之參數的名稱
<參數類型> Yes int、float、string、bool、array、object、securestring、secureobject

注意:對於所有密碼、金鑰和秘密,請使用 securestringsecureobject 類型,因為此作業 GET 不會傳回這些類型。 如需保護參數的詳細資訊,請參閱 動作和輸入參數的安全性建議

參數的類型
<預設值-參數-值> Yes type 相同 當工作流程具現化時未指定任何值時,所要使用的預設參數值。 defaultValue屬性是必要的,因此邏輯應用程式設計工具可以正確地顯示參數,但您可以指定空的值。
<具有允許的陣列-參數-值> No Array 具有參數可接受值的陣列
<參數-描述> No JSON 物件 任何其他參數詳細資料,例如參數的描述

接下來,為您的工作流程定義建立 Azure Resource Manager 範本 、定義可接受您在部署時所需值的範本參數、適當地將硬式編碼的值取代為範本或工作流程定義參數的參考,並將部署時所要使用的值儲存在個別的 參數檔案中。 如此一來,您就可以更輕鬆地透過參數檔案變更這些值,而不需要更新和重新部署邏輯應用程式。 針對敏感性或必須保護的資訊,例如使用者名稱、密碼和密碼,您可以將這些值儲存在 Azure Key Vault 中,並讓您的參數檔案從您的金鑰保存庫中取出這些值。 如需在範本和工作流程定義層級定義參數的詳細資訊和範例,請參閱 總覽:使用 Azure Resource Manager 範本將邏輯應用程式的部署自動化

靜態結果

在屬性中,定義動作的模擬 staticResults outputs ,並在 status 開啟動作的靜態結果設定時傳回動作。 在動作的定義中, runtimeConfiguration.staticResult.name 屬性會參考內部靜態結果定義的名稱 staticResults 。 瞭解如何藉 由設定靜態結果,以模擬資料來測試邏輯應用程式

"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": { "<...>" }
}
屬性 必要 類型 Description
<靜態結果定義-名稱> String 動作定義可以透過物件參考的靜態結果定義名稱 runtimeConfiguration.staticResult 。 如需詳細資訊,請參閱執行階段組態設定

您可以使用任何您想要的唯一名稱。 依預設,這個唯一名稱會附加一個數位,並在必要時遞增。

<輸出-屬性和值-傳回> Yes 不定 這些屬性的需求會根據不同的條件而有所不同。 例如,當是時 status Succeeded ,屬性會 outputs 包含屬性,以及動作傳回的屬性和值。 如果 statusFailed ,則 outputs 屬性會包含 errors 屬性,此屬性是具有一或多個錯誤物件的陣列,其中包含 message 錯誤資訊。
<標頭-值> JSON 動作傳回的任何標頭值
<狀態-代碼-傳回> String 動作傳回的狀態碼
<動作-狀態> String 動作的狀態,例如, SucceededFailed

例如,在此 HTTP 動作定義中,屬性(attribute)內的屬性(attribute)參考(attribute) runtimeConfiguration.staticResult.name HTTP0 staticResults 會定義動作的 mock 輸出。 runtimeConfiguration.staticResult.staticResultOptions屬性指定靜態結果設定 Enabled 在 HTTP 動作上。

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

HTTP 動作會傳回內定義中的輸出 HTTP0 staticResults 。 在此範例中,如果是狀態碼,mock 輸出為 OK 。 若為標頭值,mock 輸出為 "Content-Type": "application/JSON" 。 針對動作的狀態,模擬輸出為 Succeeded

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

運算式

使用 JSON,您可以擁有在設計階段存在的常值,例如:

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

您也可以擁有在執行階段才存在的值。 若要表示這些值,您可以使用會在執行階段評估的「運算式」。 運算式是一個序列,可以包含一或多個 函數運算子變數、明確值或常數。 在工作流程定義中,您可以在運算式前面加上 (@) 符號,以便在 JSON 字串值中的任何地方使用運算式。 在評估代表 JSON 值的運算式時,移除 @ 字元即可擷取運算式主體,而且一律會產生其他 JSON 值。

例如,對於先前定義的 customerName 屬性,您可以在運算式中使用 parameters() 函式來取得此屬性值,並將該值指派給 accountName 屬性:

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

「字串內插補點」也可讓您在字串內使用多個運算式,以 @ 字元和大括號 ({}) 圍住。 語法如下:

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

結果一律是字串,讓這項功能類似於 concat() 函式,例如:

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

如果您有開頭為 @ 字元的常值字串,請在 @ 字元前面加上另一個 @ 字元作為逸出字元:@@

下列範例顯示如何評估運算式:

JSON 值 結果
"Sophia Owen" 傳回這些字元:'Sophia Owen'
"array[1]" 傳回這些字元:'array[1]'
"@@" 以一個字元的字串形式傳回這些字元:'@'
" @" 以兩個字元的字串形式傳回這些字元:'@'

在這些範例中,假設您定義 "myBirthMonth" 等於 "January" 以及 "myAge" 等於數字 42:

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

下列範例顯示如何評估下列運算式:

JSON 運算式 結果
"@parameters('myBirthMonth')" 傳回這個字串:"January"
"@{parameters('myBirthMonth')}" 傳回這個字串:"January"
"@parameters('myAge')" 傳回這個數字:42
"@{parameters('myAge')}" 以字串形式傳回這個數字:"42"
"My age is @{parameters('myAge')}" 傳回這個字串:"My age is 42"
"@concat('My age is ', string(parameters('myAge')))" 傳回這個字串:"My age is 42"
"My age is @@{parameters('myAge')}" 傳回這個字串,其中包含運算式:"My age is @{parameters('myAge')}`

當您在 Logic Apps 設計工具中以視覺化方式運作時,您可以透過運算式產生器建立運算式,例如:

Logic Apps 設計工具 > 運算式產生器

當您完成時,運算式會對工作流程定義中對應的屬性顯示,例如,以下的 searchQuery 屬性:

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

輸出

outputs 區段中,定義工作流程在完成執行時可傳回的資料。 例如,若要追蹤來自每次執行的特定狀態或值,請指定工作流程輸出會傳回該資料。

注意

當回應來自服務 REST API 的傳入要求時,請勿使用 outputs。 請改用 Response 動作類型。 如需詳細資訊,請參閱工作流程觸發程序和動作

以下是輸出定義的一般結構:

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}
屬性 必要 類型 Description
<機碼名稱> String 輸出傳回值的索引鍵名稱
<索引鍵類型> Yes int、float、string、securestring、bool、array、JSON 物件 輸出傳回值的類型
<key-value> Yes 與 <索引 鍵類型 相同> 輸出傳回值

若要取得工作流程執行的輸出,請檢查邏輯應用程式的執行歷程記錄和 Azure 入口網站中的詳細資料,或使用 工作流程 REST API。 您也可以將輸出傳遞至外部系統 (例如 PowerBI),以便建立儀表板。

運算子

運算式函式中,運算子會執行特定工作,例如參考屬性或陣列中的值。

運算子 Task
' 若要將字串常值作為輸入或使用於運算式和函式中,只用單引號圍住此字串,例如 '<myString>'。 請勿使用雙引號 (""),這會與整個運算式的 JSON 格式設定發生衝突。 例如:

:length('Hello')
:length("Hello")

當您傳遞陣列或數字時,您不需要包圍標點符號。 例如:

:length([1, 2, 3])
:length("[1, 2, 3]")

[] 若要參考陣列中特定位置 (索引) 的值,請使用方括號。 例如,若要取得陣列中的第二個項目:

myArray[1]

. 若要參考物件中的屬性,請使用點運算子。 例如,若要取得 customer JSON 物件的 name 屬性:

"@parameters('customer').name"

? 若要在不會發生執行階段錯誤的情況下,參考物件中的 null 屬性,請使用問號運算子。 例如,若要處理來自觸發程序的 null 輸出,您可以使用此運算式︰

@coalesce(trigger().outputs?.body?.<someProperty>, '<property-default-value>')

函式

某些運算式會從執行工作流程定義開始執行時可能還不存在的執行時間動作中取得其值。 若要在運算式中參考或使用這些值,您可以使用工作流程定義語言所提供的 函式

下一步