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 Yes 工作流程定義的起始元素
$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 當在這些動作上啟用靜態結果時,動作傳回為模擬輸出的一或多個靜態結果的定義。 在每個動作定義中 runtimeConfiguration.staticResult.name ,屬性會參考 內的 staticResults 對應定義。 如需詳細資訊,請參閱 靜態結果
triggers No 具現化工作流程之一或多個觸發程式的定義。 您可以定義多個觸發程式,但只能使用工作流程定義語言,而不是透過工作流程設計工具以視覺化方式定義。 如需詳細資訊,請參閱 觸發程式和動作



觸發程式上限:10

觸發程序和動作

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

參數

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

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

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



注意 :針對所有密碼、金鑰和秘密,請使用 securestringsecureobject 類型,因為 GET 作業不會傳回這些類型。 如需保護參數的詳細資訊,請參閱 動作和輸入參數 的安全性建議。
參數的類型
<default-parameter-value> Yes type 相同 如果工作流程具現化時未指定任何值,則要使用的預設參數值。 屬性 defaultValue 是必要的,因此邏輯應用程式設計工具可以正確顯示 參數,但您可以指定空值。
<array-with-allowed-parameter-values> No 陣列 具有參數可接受值的陣列
<parameter-description> No JSON 物件 任何其他參數詳細資料,例如參數的描述

接下來,為您的 工作流程定義建立 Azure Resource Manager 範本 、定義接受您要部署值的範本參數、視需要將硬式編碼的值取代為範本或工作流程定義參數的參考,並將要在部署時使用的值儲存在個別 參數檔案 中。 如此一來,您可以透過參數檔案更輕鬆地變更這些值,而不需要更新和重新部署邏輯應用程式。 如需敏感性或必須受到保護的資訊,例如使用者名稱、密碼和秘密,您可以將這些值儲存在 Azure 金鑰保存庫,並讓參數檔案從金鑰保存庫擷取這些值。 如需在範本和工作流程定義層級定義參數的詳細資訊和範例,請參閱 概觀:使用 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": { "<...>" }
}
屬性 必要 類型​​ 描述
<static-result-definition-name> Yes String 動作定義可以透過 runtimeConfiguration.staticResult 物件參考的靜態結果定義名稱。 如需詳細資訊,請參閱 執行時間組態設定

您可以使用任何您想要的唯一名稱。 根據預設,這個唯一名稱會附加數位,並視需要遞增。
<output-attributes-and-values-returned> Yes 不定 這些屬性的需求會根據不同的條件而有所不同。 例如,當 是 Succeededstatusoutputs 屬性會包含動作傳回為模擬輸出的屬性和值。 status如果 為 Failed ,則 outputs 屬性會包含 errors 屬性,這是具有錯誤資訊的一或多個錯誤 message 物件的陣列。
<header-values> No JSON 動作傳回的任何標頭值
<status-code-returned> Yes String 動作傳回的狀態碼
<action-status> Yes String 動作的狀態,例如 或 SucceededFailed

例如,在此 HTTP 動作定義中, runtimeConfiguration.staticResult.name 屬性會在定義動作的模擬輸出的屬性內 staticResults 參考 HTTP0 。 屬性 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 動作會傳回 定義中的 HTTP0staticResults 輸出。 在此範例中,針對狀態碼,模擬輸出為 OK 。 對於標頭值,模擬輸出為 "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 字串值中的任何位置的運算式,方法是在運算式前面加上 at-sign (@)。 評估代表 JSON 值的運算式時,運算式主體會藉由移除 @ 字元來擷取,而且一律會產生另一個 JSON 值。

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

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

字串插 補也可讓您在由 @ 字元和大括弧 ( {} ) 包裝的字串內使用多個運算式。 以下是語法:

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

結果一律為字串,使這項功能類似于 concat() 函式,例如:

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

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

這些範例示範如何評估運算式:

JSON 值 結果
「索菲亞歐文」 傳回這些字元:'索菲亞歐文'
「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」
「我的年齡是 @{parameters('myAge')}」 傳回此字串:「我的年齡為 42」
「@concat('我的年齡是 ', string(parameters('myAge')) 傳回此字串:「我的年齡為 42」
「我的年齡是 @@{parameters('myAge')}」 傳回此字串,其中包含運算式:「我的年齡是 @{parameters('myAge')}'

當您在工作流程設計工具中以視覺化方式運作時,可以使用運算式編輯器來建立運算式,例如:

Screenshot shows workflow designer and expression editor.

當您完成時,運算式會出現在工作流程定義中對應的屬性, 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>"
  }
}
屬性 必要 類型​​ 描述
<key-name> Yes String 輸出傳回值的索引鍵名稱
<key-type> Yes int, float, string, securestring, bool, array, JSON 物件 輸出傳回值的型別
<key-value> Yes 與 < 索引鍵類型相同> 輸出傳回值

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

操作員

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

運算子 Task
' 若要使用字串常值做為輸入或在運算式和函式中,請只以單引號包裝字串,例如 '<myString>' 。 請勿使用雙引號 ( "" ),這與整個運算式周圍的 JSON 格式衝突。 例如:

: length('Hello')
: length(「Hello」)

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

: length([1, 2, 3])
No : length(「1, 2, 3]」)
[] 若要參考陣列或 JSON 物件內特定位置 (index) 的值,請使用方括弧,例如:

- 若要取得陣列中的第二個專案:

myArray[1]

- 若要存取 JSON 物件內的屬性:

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

範例 2
lastIndexOf(triggerBody()?['subject'],'some string')
. 若要參考 物件中的屬性,請使用點運算子。 例如,若要取得 name JSON 物件的 屬性 customer

"@parameters('customer').name"
? 若要參考物件中沒有執行階段錯誤的 Null 屬性,請使用問號運算子。 例如,若要處理觸發程式的 Null 輸出,您可以使用下列運算式:

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

函式

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

下一步