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 注意:針對所有密碼、密鑰和秘密,請使用 securestring 或 secureobject 類型,因為 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 | 不定 | 這些屬性的需求會根據不同的條件而有所不同。 例如,當是Succeeded 時status ,outputs 屬性會包含動作傳回為模擬輸出的屬性和值。 status 如果 為 Failed ,則outputs 屬性會包含 errors 屬性,這是具有錯誤資訊的一或多個錯誤message 對象的陣列。 |
<header-values> | No | JSON | 動作傳回的任何標頭值 |
<status-code-returned> | Yes | String | 動作傳回的狀態代碼 |
<action-status> | Yes | String | 動作的狀態,例如 或 Succeeded Failed |
例如,在此 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 動作會傳回 定義中的HTTP0
staticResults
輸出。 在這裡範例中,針對狀態代碼,模擬輸出為 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>') |
函式
有些表達式會從您的工作流程定義開始執行時,可能還不存在的運行時間動作取得其值。 若要在表達式中參考或使用這些值,您可以使用 工作流程定義語言所提供的函 式。