ジオプロセシング サービスが非同期実行モードで公開されている場合、そのサービスのジオプロセシング タスクはジョブの (submitJob) 操作をサポートします。submitJob 操作は、大規模データセットを処理する長期実行中のタスクに適しています。また、ジオプロセシング サーバーは、ジョブ操作の成功のために結果マップ サービスを作成できます。したがって、submitJob 操作は、TIN や CAD などの非可搬性ツール出力、および Web アプリでレンダリングできない RasterData 出力に適しています。該当するケースの出力は、サーバーが結果マップ サービスとしてレンダリングでき、クライアントはその結果マップ サービスをクライアントの Web アプリに追加できます。
submitJob を使用したジョブの送信
submitJob 操作の URL テンプレートは http://<gp-task-url>/submitJob です。クライアントは、submitJob 操作を通じて、タスク実行のリクエストを送信します。ジョブを送信すると、executeTask 操作と同様に、タスクの入力パラメーターが URL として作成され、サーバーに送信されます。サーバーは、submitJob 操作のリクエストを受信すると、一意の ID (jobId)を使用してジョブのリソースを作成し、クライアントに返します。ジオプロセシング タスクの submitJob 操作に対するサーバー応答には、次のサンプル コードに示すように、一意のジョブ ID (jobId) とジョブ ステータス (jobStatus) が示されます。
ジョブの送信(submitJob)リクエストの JSON 応答
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobSubmitted"}
ジョブのステータスの確認
ジョブのリソースの URL は http://<task-url>/jobs/<jobId> です。クライアントは、ジョブの URL を通じて定期的にリクエストを送信し、ジョブのステータスを判断します。ジョブのステータス リクエストに対するサーバー応答には、jobId、jobStatus、およびジオプロセシング ツール メッセージ (ジオプロセシング サービスのメッセージ レベルによって異なる) が示されます。次の JSON は、ステータス リクエストに対してサーバーが送信する応答を示しています。メッセージごとにタイプと説明プロパティが含まれています。
ステータス リクエストに対する JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobExecuting", "messages": [ {
"type": "esriJobMessageTypeInformative", "description": "Submitted."
}, {
"type": "esriJobMessageTypeInformative", "description": "Executing..."
}
]
}
上記の例では、esriJobExecuting として jobStatus が示されています。次の表では、その他のジョブのステータス コードについて説明します。
jobStatus コード | 詳細 |
---|---|
esriJobWaiting | サーバーは、他のリクエストでビジーの状態です。 |
esriJobSubmitted | サーバーはジョブ リクエストを受け入れました。 |
esriJobExecuting | サーバーはジョブを実行中です。 |
esriJobSucceeded | サーバーはジョブを正常に完了し、出力結果が提供されています。 |
esriJobFailed | 無効なパラメーターまたは他のジオプロセシング ツールの障害のため、ジョブの実行に失敗しました。 |
esriJobCancelling | サーバーは、クライアントのリクエストに基づきジョブの実行をキャンセル中です。 |
esriJobCancelled | ジョブの実行リクエストがクライアントによってキャンセルされ、サーバーはジョブの実行を終了しました。 |
成功したタスク結果
ジョブが成功すると (jobStatus = esriJobSucceeded)、サーバーは、URL によるアクセスが可能な入力/出力パラメーター用のリソースを新規作成します。ステータス リクエストに対するサーバーからの応答には、入力と結果の URL に関する情報が含まれます。Output_Polygons 出力パラメーターを含む、バッファー ポイント タスクの JSON 応答の例を次に示します。タスク実行の結果の値とは異なり、出力パラメーターと入力パラメーターの値は相対 URL であることに注意してください。
成功したタスク結果の JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobSucceeded", "results": {
"Output_Polygons": {
"paramUrl": "results/Output_Polygons"
}
}, "inputs": {
"Input_Features": {
"paramUrl": "inputs/Input_Features"
}
}, "messages": [ ]
}
ジョブが正常に完了すると、クライアントは、各出力パラメーターを取得するためのリクエストを送信する必要があります。クライアントは、それぞれのリソースの URL を使用して入力または出力結果を取得できます。結果の URL は http://<job-url>/results/<param-name> です。入力の URL は http://<job-url>/inputs/<param-name> です。これらのリソースからの応答がパラメーターの値であり、そのフォーマットは、クライアントのリクエストに基づき JSON、KML、HTML 出力フォーマットのうちのいずれかになります。データ タイプ GPFeatureRecordSetLayer の Output_Polygons 出力パラメーターの JSON 応答例を次に示します。応答には、パラメーターの名前、データ タイプ、および値が示されます。
結果の出力パラメーターの JSON 応答
{
"paramName": "Buffer_Polygons", "dataType": "GPFeatureRecordSetLayer", "value": {
"displayFieldName": "", "geometryType": "esriGeometryPolygon", "spatialReference": {
"wkid": 102726, "latestWkid": 102726 }, "fields": [ {
"name": "FID", "type": "esriFieldTypeOID", "alias": "FID"
}, {
"name": "BUFF_DIST", "type": "esriFieldTypeDouble", "alias": "BUFF_DIST"
}, {
"name": "Shape_Length", "type": "esriFieldTypeDouble", "alias": "Shape_Length"
}, {
"name": "Shape_Area", "type": "esriFieldTypeDouble", "alias": "Shape_Area"
}
], "features": [{
"attributes": {
"FID": 1, "BUFF_DIST": 3280.83333333, "Shape_Length": 20613.401930152133, "Shape_Area": 3.381121258723078E7 }, "geometry": {"rings": [[ [ 7643591.499937415, 684676.8331969082 ], [ 7643683.927544653, 684675.5310036391 ] ...more ]]}
}], "exceededTransferLimit": false }
}
次の図は、submitJob 操作におけるサーバー/クライアント通信の概要を示しています。クライアントによって送信される定期的なステータス リクエストにより、ジョブのステータスが決定されます。クライアントは、ステータス リクエストの送信間隔を決定できます。サーバーは、ジョブの実行を正常に完了すると、URL によるアクセスが可能な結果と入力のリソースを作成します。
また、ジオプロセシング サービスが、[マップ サービスに結果を表示] を有効にして公開されている場合、サーバーは、タスク実行が正常に終了したときに出力パラメーターの結果マップ サービスを作成します。タスクの各ジオデータベース出力パラメーターは、マップ サービスのレイヤーに対応し、タスクのパラメーターに対して定義されたレイヤー シンボルに基づき描画されます。
エラー応答
無効な入力パラメーターやアクセス不能なプロジェクト データ、または他のジオプロセシング ツールの障害のため、ジョブが失敗することがあります。ジョブが失敗すると、ジョブのステータスが esriJobFailed に更新されます。クライアントは、ジョブの URL を使用してジョブのステータスを確認し、ジョブの失敗を追跡する必要があります。失敗したタスクのエラー応答の JSON を次に示します。
esriJobFailed ステータスを示すステータス応答の JSON
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobFailed", "messages": [ {
"type": "esriJobMessageTypeInformative", "description": "Submitted."
}, {
"type": "esriJobMessageTypeInformative", "description": "Executing..."
}, {
"type": "esriJobMessageTypeError", "description": "Failed."
}
]
}
ジョブが失敗した場合、サーバーは入力および結果のリソースを作成しません。また、サーバーは、結果マップ サービスを伴うジオプロセシング サービスの場合であっても結果マップ サービスを作成できません。
ジョブのキャンセル
クライアントは、ジョブの実行中にいつでも submitJob 操作を破棄し、ジョブに対して Cancel 操作を開始できます。Cancel 操作の URLは https://<gp-task-url>/cancel です。サーバーは、キャンセル リクエストを受信すると、ジョブのステータスを esriJobCancelling に変更し、ジョブの実行を終了しようとします。サーバーは、次に示すようなジョブのステータス メッセージをクライアントに送信します。
キャンセル リクエストの JSON 応答
{
"jobId": "ja892cd2a90d149db9a171fc86ff530b4",
"jobStatus": "esriJobCancelling"
}
クライアントは、ジョブの URL を使用して引き続きジョブのステータスをポーリングし、ジョブのキャンセルの進行状況を追跡できます。また、クライアントがキャンセルをリクエストできるのは、ステータスが esriJobWaiting、esriJobSubmitted、または esriJobExecuting であるジョブに限られます。ステータスが esriJobSucceeded または esriJobFailed であるジョブに対してキャンセル リクエストが発行されると、サーバーによってエラー メッセージが返されます。