までアクションを使用したロジックアプリがあります。この条件は、API呼び出しのステータスをチェックします。
"Wait_Until_Cube_Processing_is_finished_": {
"actions": {
"Get_Status_of_Model": {
"inputs": {
"authentication": {
"audience": "https://*.asazure.windows.net",
"clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"secret": "OxxxxxxxxxxxxzskHxxxxxxxxxxxxxutjODXxxxxxx=",
"tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "ActiveDirectoryOAuth"
},
"method": "GET",
"uri": "https://northeurope.asazure.windows.net/servers/ServerName/models/modelName/refreshes/@{body('Filter_array')[0].refreshId}"
},
"runAfter": {},
"type": "Http"
}
},
"expression": "@equals('status', 'succeeded')",
"limit": {
"timeout": "PT1H"
},
"runAfter": {
"Filter_array": [
"Succeeded"
]
},
"type": "Until"
}
},
APIは次のようなステータスを返します。
{
"startTime": "2019-03-10T15:50:55.1278586Z",
"type": "full",
"status": "notStarted",
"currentRefreshType": "full",
"objects": [
{
"table": "Table1",
"partition": "Partition_03",
"status": "notStarted"
}
]
}
私の状態は機能していません。それは1時間実行され、1時間後に次のステップに進みます。しかし、私のhttpリクエストは、20分後に次の状態を受け取ります。
{
"refreshId": "dbxxxxxx-exxx-xxxx-xxx-3xxxxxxdaxxx",
"startTime": "2019-03-10T15:50:55.48",
"endTime": "2019-03-10T16:14:56.267",
"status": "succeeded"
}
何か考えがありますか、なぜ私のUntilアクションが機能しないのですか?
それはあなたの条件表現の問題です。あなたの表現は"expression": "@equals('status', 'succeeded')"
です。それはあなたが文字列status
と文字列を比較することを意味しますsucceeded
、それらは決して等しくなることはありません。そのため、ループは常にタイムアウトになりPT1H
ます。タイムアウトのデフォルト値はPT1H
、1時間です。
したがって、リクエストの本文を取得してから、本文の状態を成功と比較する必要があります。フローは次のようになります。
応答本文は配列形式であるため、私の例で状態を取得する場合は、式は@body('HTTP_2')['properties']['state']
次のようになり、以下は応答本文です。この式を参照できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加