分享方式:


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')}'

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

顯示工作流程設計工具與表達式編輯器的螢幕快照。

當您完成時,表達式會出現在工作流程定義中對應的屬性, searchQuery 例如,這裡的 屬性:

"Search_tweets": {
  "inputs": {
    "host": {
      "connection": {
        "name": "@parameters('$connections')['x']['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-ignore () 運算符。 例如,若要處理觸發程式的 Null 輸出,您可以使用下列運算式:

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

函式

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

下一步