

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# デバイスのワークフロー
<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 を呼び出します｡ または、これと前のステップを 1 回の呼び出しで組み合わせるには、デバイスは [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution) を呼び出すことができます。

  1. (オプション) ステップタイマーを追加するには、`stepTimeoutInMinutes` または [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) のいずれかを呼び出すときに [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution) の値を設定します。

  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 つまたは複数のジョブの実行が含まれている場合は、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. オプションで、ステップタイマーを追加するには、`stepTimeoutInMinutes` を呼び出すときに [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) の値を設定します。

  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` に更新する必要があります｡