

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 裝置工作流程
<a name="jobs-workflow-device-online"></a>

裝置可以使用下列其中一種方式來處理其執行的任務。
+ 

**取得下一個任務**

  1. 裝置首次上線時，應訂閱裝置的 `notify-next` 主題。

  1. 以 jobId `$next` 呼叫 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 來取得下一個任務、任務文件及其他詳細資訊，包括任何儲存於 `statusDetails` 的狀態。如果任務文件具有程式碼檔簽章，則必須先驗證簽章，然後再繼續處理任務請求。

  1. 呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 以更新工作狀態。或者，裝置可以呼叫 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution)，將此步驟與前一步驟結合至同一個呼叫裡。

  1. (選用) 當您呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) 或 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution) 時，您可以透過設定 `stepTimeoutInMinutes` 的值來新增步驟計時器。

  1. 執行由使用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 之工作文件所指定的動作，以回報工作進度。

  1. 使用此 jobId 來呼叫 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API，即可繼續監控任務執行。如果刪除任務執行，[DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) 會傳回 `ResourceNotFoundException`。

     如果任務執行在裝置執行任務時遭到取消或刪除，裝置應可還原為有效狀態。

  1. 任務完成時呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 以更新任務狀態並回報成功或失敗。

  1. 由於此任務的執行狀態已變更為結束狀態，因此下一個可執行的任務 (若有) 將會變更。狀置會收到下一個待定任務執行已變更的通知。此時，裝置應繼續如步驟 2 所述運作。

  如果裝置仍在線上，它會繼續收到下一個待定任務執行的通知。這包括其任務執行資料、它何時完成任務或何時新增待定任務執行。在此情況下，裝置應繼續如步驟 2 所述運作。
+ 

**選取可用的任務**

  1. 裝置首次上線時，應訂閱物件的 `notify` 主題。

  1. 呼叫 [GetPendingJobExecutions](jobs-mqtt-api.md#mqtt-getpendingjobexecutions) MQTT API 來取得待定任務執行清單。

  1. 如果清單包含了一或多個任務執行項目，請選取其中一項。

  1. 呼叫 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API 來取得任務文件及其他詳細資訊，包括儲存於 `statusDetails` 的任何狀態。

  1. 呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 以更新工作狀態。如果 `includeJobDocument` 欄位在此命令中設定為 `true`，則裝置可以略過先前的步驟並擷取當前的任務文件。

  1. 或者，當您呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) 時，您可以透過設定 `stepTimeoutInMinutes` 的值來新增步驟計時器。

  1. 執行由使用 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 之工作文件所指定的動作，以回報工作進度。

  1. 使用此 jobId 來呼叫 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API，即可繼續監控任務執行。如果任務執行在裝置執行任務時遭取消或刪除，裝置應可還原為有效狀態。

  1. 任務完成時呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)MQTT API 以更新任務狀態並回報成功或失敗。

  如果裝置維持在線上，只要有新的待定任務執行出現，裝置就會收到所有待定任務執行的通知。在此情況下，裝置可繼續如步驟 2 所述運作。

如果裝置無法實施任務，則應呼叫 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API 將任務狀態更新為 `REJECTED`。