2016-03-08 51 views
1

我使用的是Azure調度程序REST API,而且我很難更新每週/每月一次的作業重複。具體來說,我得到以下錯誤:計劃不支持重複單位'小時'Azure Scheduler Rest API - 更新作業錯誤:計劃不支持重複單位'Hour'

問題是,特定的作業曾經有一些高級的調度選項,當然如果我想更新到小時頻率,我當然不需要這些選項。根據MSDN Documentation,如果您不包含一個字段(本例中爲「計劃」),則當前值將被結轉。我試過根本不包括日程表字段,包括空值,包括空對象或所有屬性(小時,分鐘等)設置爲空,並且在所有情況下,我都收到了帶錯誤消息的HTTP錯誤請求以上。

這裏是由一個GET操作返回我的工作:

{ 
    "id":"************", 
    "type":"Microsoft.Scheduler/jobCollections/jobs", 
    "name":"my-job-collection/my-job-id", 
    "properties":{ 
     "startTime":"2016-03-01T00:00:00Z", 
     "action":{ /*....*/ }, 
     "recurrence":{ 
     "frequency":"week", 
     "interval":4, 
     "schedule":{ 
      "minutes":[ 0 ], 
      "hours":[ 12 ], 
      "weekDays":[ "saturday" ] 
     } 
     }, 
     "state":"enabled", 
     "status":{ /*....*/ } 
    } 

,這裏是我想提交補丁:

{ 
    "properties":{ 
     "recurrence":{ 
     "frequency":"hour" 
     } 
    } 
} 
/* or */ 
{ 
    "properties":{ 
     "recurrence":{ 
     "frequency":"hour", 
     "schedule": null 
     } 
    } 
} 

我使用的API的版本是2016-01- 01。

任何幫助,將不勝感激。謝謝

+0

您是否嘗試將頻率設置爲分鐘,並將間隔設置爲60?例如'「復發」:{「頻率」:「分鐘」,「間隔」:60}' –

+0

如果您想更改重複單位,則必須包含「間隔」。 –

+0

@JackZeng分鐘也不工作,以及包括間隔。我可以在不包括區間的情況下更新月份或年份。這個想法是,如果一個字段沒有被指定,那麼當前值就會被結轉,小時和分鐘的問題就是舊的(每週)「計劃」值被結轉 - 然後它會抱怨你可以按小時或分鐘重複單位。 – ovidiu

回答

0

我一直在嘗試重現您的問題,並且發現了以下問題。

我所說的REST API具有以下輸入:

{ 
    "properties": { 
     "recurrence": { 
      "frequency":"week", 
      "schedule":{ 
       "minutes":[ 0 ], 
       "hours":[ 12 ], 
       "weekDays":[ "saturday" ] 
      } 
     } 
    } 
} 

這一步沒問題。在此之後,我調用REST API該輸入:

{ 
    "properties": { 
     "recurrence": { 
      "frequency":"hour" 
     } 
    } 
} 

現在,我得到的錯誤:

enter image description here

以下是此問題的原因。您已將計劃設置爲星期六,這對每週計劃僅有意義。

奇怪的是,他們會在更改門戶網站中的重複單元時自動刪除高級計劃,而通過REST API,他們不會爲您執行此操作。我將把這個問題報告給微軟。希望他們能在未來的版本中解決這個問題。

以下是解決方案。登錄到新的門戶網站,然後更改一次循環單元,之後,您可以再次通過REST API更新單元。

或者,對於您的REST API,使用「PUT」而不是「PATCH」方法。

對於「PUT」REST API,您需要使用「GET」REST API中的整個JSON,但會刪除「屬性」中的「調度」設置。例如:

{ 
    "id":"************", 
    "type":"Microsoft.Scheduler/jobCollections/jobs", 
    "name":"my-job-collection/my-job-id", 
    "properties":{ 
     "startTime":"2016-03-01T00:00:00Z", 
     "action":{ /*....*/ }, 
     "recurrence":{ 
      "frequency":"hour", 
      "interval":4 
     }, 
     "state":"enabled", 
     "status":{ /*....*/ } 
    } 
} 
+0

感謝您的研究努力。事實上,它可以用PUT請求進行更新,但這是一種解決方法。爲了只更新作業,我需要額外的請求來獲取作業,抓取作業部分並將其包含在PUT請求中。我認爲這是一個錯誤,但我希望有一個更好的解決方法。但是,無論如何,我希望MS會提供一個更好的方法來實現這一目標。 – ovidiu

+0

這不是一個錯誤。我認爲這個問題是有目的的。如上所述,「PATCH」只會更新提供的屬性。如果只提供該單位,它將嘗試在不更改高級時間表的情況下更新單位,以便出錯。更好的設計會提供類似'schedule'的東西:null,系統將刪除高級時間表。我已經嘗試過'「schedule」:null',它也不起作用。 –

+0

請投[我的建議](https://feedback.azure.com/forums/34192--general-feedback/suggestions/12950988-for-scheduler-rest-api-update-job-should-allow-s)在Azure反饋中。 –