2017-06-07 4 views
0

私はAzure Logic SDKを使用して論理アプリケーションの再発頻度と間隔を更新しようとしていますし、それがこのエラーメッセージ更新トリガ周波数使用してAPI

Microsoft.Rest.Azure.CloudExceptionで失敗しています:ワークフロー 'kk-test-logic-app'のパッチ適用リクエストはサポートされていません。 プロパティオブジェクト内のどのフィールドもパッチすることはできません。

ここに、私が何をしようとしているかを示すコードスニペットがあります。

var workflow = await _client.Value.Workflows.GetAsync(resourceGroupName, workflowName); 

    dynamic workflowDefinition = workflow.Definition; 
    workflowDefinition.triggers[triggerName]["recurrence"] = JToken.FromObject(new { frequency = triggerFrequency, interval = triggerInterval }); 

    await _client.Value.Workflows.UpdateAsync(resourceGroupName, workflowName, workflow); 

ここで_clientはLazy<LogicManagementClient>です。私は成功したなどのみ更新操作があるワークフロー、workflowRuns、workflowTriggersを取得することができる午前

"triggers": { 
    "When_a_new_email_arrives": { 
     "recurrence": { 
     "frequency": "Hour", 
     "interval": 2 
     }, 
     "splitOn": "@triggerBody()?.value", 
     "type": "ApiConnection", 
     "inputs": { 
     "host": { 
      "api": { 
      "runtimeUrl": "https://logic-apis-southindia.azure-apim.net/apim/office365" 
      }, 
      "connection": { 
      "name": "@parameters('$connections')['office365']['connectionId']" 
      } 
     }, 
     "method": "get", 
     "path": "/Mail/OnNewEmail", 
     "queries": { 
      "folderPath": "Inbox", 
      "importance": "Any" 
     } 
     } 
    } 
    } 

注:ここでは

私は更新しようとしているトリガーの定義である(フィドラーを使用しました)失敗する。 SDKを使用してワークフローのプロパティを更新する方法に関するアイデアはありますか?

UPDATE:以下のコメントにアモール - MSFTで指摘したように 、これは欠陥であると回避策として、私は現在CreateOrUpdateAsync代わりのUpdateAsyncを使用しています。 A new defectがGitHubで作成され、SDK開発チームの関心を集めています。

答えて

0

現在、特定のメールアドレスから新しいメールを受信したときに30秒ごとにチェックが実行され、正常に動作しています。私が提供したコードを使用して、再発頻度を30秒から2時間に変更しようとしています。

私はメールトリガーを作成しました。私は、UpdateAsyncメソッドを呼び出すと問題を再現できます。 Azure Logic C#SDKのsource codeによれば、応答メッセージに従ってサポートされていないPATCH要求を送信します。 HTTPメソッドをPUTに変更した後、ワークフローを更新できます。 PUTリクエストを送信するために使用したサンプルコードを次に示します。

string triggerName = "When_a_new_email_arrives"; 
string resourceGroupName = "my resourcegroup name"; 
string workflowName = "my-LogicApp"; 
string subscriptionID = "my-subscriptionID"; 
var workflow = await _client.Workflows.GetAsync(resourceGroupName, workflowName); 

string url = string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Logic/workflows/{2}?api-version=2016-06-01", 
    subscriptionID, resourceGroupName, workflowName); 
HttpClient client = new HttpClient(); 
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, url); 
message.Headers.Add("Authorization", "Bearer put your token here"); 
message.Headers.Add("Accept", "application/json"); 
message.Headers.Add("Expect", "100-continue"); 

dynamic workflowDefinition = workflow.Definition; 
workflowDefinition.triggers[triggerName]["recurrence"] = JToken.FromObject(new { frequency = "Minute", interval = 20 }); 

string s = workflow.ToString(); 
string workflowString = JsonConvert.SerializeObject(workflow, _client.SerializationSettings); 

message.Content = new StringContent(workflowString, Encoding.UTF8, "application/json"); 
await client.SendAsync(message); 
+0

現在、特定のメールアドレスから新しいメールを受信したときにトリガーが30秒ごとに実行され、正常に動作しています。私が提供したコードを使用して、再発頻度を30秒から2時間に変更しようとしています。これは私がやっているPOCだけであり、プロダクションコードは大きく異なっていることに注意してください。 – Karthikeyan

+0

ニースキャッチ。ソースコードの問題を指摘してくれてありがとう。 [CreateOrUpdateAsync](https://github.com/Azure/azure-sdk-for-net/blob/psSdkJson6/src/SDKs/Logic/Management.Logic/Generated/WorkflowsOperations.cs#L729)を見ると、私はそのCreateOrUpdateAsyncはPUT HTTPメソッドを使用します。 CreateOrUpdateAsyncを使用するようにコードを変更すると、再発頻度が正しく更新されるようになりました。 – Karthikeyan

+0

あなたの問題が解決したと聞いてうれしいです。役に立つ回答を回答としてマークしてください。それは他の人が同じような問題を迅速に見つけて解決するのに役立ちます。 – Amor

関連する問題