Cuando un servicio de geoprocesamiento se publica con el modo de ejecución sincrónica, las tareas de geoprocesamiento del servicio admitirán la operación Enviar Trabajo (submitJob). La operación submitJob es adecuada para tareas de larga duración que procesan datasets de gran tamaño. Asimismo, el servidor de geoprocesamiento puede crear un servicio de mapas de resultado para una operación de trabajo satisfactoria. Por tanto, la operación submitJob es adecuada para las salidas de la herramienta que no se pueden transportar, como TIN, CAD, etc., y para salidas RasterData que no pueden ser representada por las aplicaciones web. Las salidas en tales casos se pueden representar como un servicio de mapas de resultado en el servidor y los clientes pueden agregar el servicio de mapas de resultado a sus aplicaciones Web.
Presentar un trabajo utilizando submitJob
La plantilla URL para la operación submitJob es http://<gp-task-url>/submitJob. El cliente envía una solicitud para ejecutar la tarea mediante la operación submitJob . Cuando se envía un trabajo, los parámetros de entrada de la tarea se construyen como una URL y se envían al servidor similar a la operación executeTask. Cuando el servidor recibe una solicitud de una operación submitJob crea un recurso de trabajo con un Id. único conocido como jobId y se lo devuelve al cliente. La respuesta del servidor de la tarea de geoprocesamiento de la operación submitJob tendrá un único identificador de trabajo (jobId) y el estado del trabajo (jobStatus), como se muestra a continuación.
Respuesta JSON de la solicitud submitJob
{ "jobId" : "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobSubmitted"}
Verificar estado del trabajo
La URL del recurso de tarea es http://<task-url>/jobs/<jobId>. El cliente puede enviar peticiones periódicamente a través de la URL del trabajo y determinar el estado del trabajo. La respuesta del servidor para la solicitud de estado del trabajo incluirá jobId, jobStatus y los mensajes de la herramienta de geoprocesamiento, según el nivel de mensaje del servicio de geoprocesamiento. El JSON que aparece a continuación muestra la respuesta enviada por el servidor para solicitar el estado. Observe que cada mensaje tiene un tipo y una propiedad de descripción.
Respuesta JSON de la solicitud submitJob
{ "jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobExecuting", "messages": [ { "type": "esriJobMessageTypeInformative", "description": "Submitted." }, { "type": "esriJobMessageTypeInformative", "description": "Executing..." } ] }
El ejemplo anterior muestra el jobStatus como esriJobExecuting. Los otros estados de la tarea se describen en la tabla siguiente
jobStatus códigos | Descripción |
esriJobWaiting | El servidor está ocupado con otras peticiones. |
esriJobSubmitted | El servidor ha aceptado la petición de trabajo. |
esriJobExecuting | El servidor está ejecutando la tarea. |
esriJobSucceeded | El servidor ha completado con éxito el trabajo y los resultados de salida están disponibles. |
esriJobFailed | El trabajo ha fallado a la hora de ejecutar debido a parámetros no válidos o a fallos de otra herramienta de geoprocesamiento. |
esriJobCancelling | El servidor está cancelando la ejecución de la tarea basándose en la solicitud del cliente. |
esriJobCancelled | La solicitud para ejecutar la tarea fue cancelada por el cliente y el servidor finalizó la ejecución del trabajo. |
Resultado de tarea satisfactorio
Cuando el trabajo ha sido satisfactorio (jobStatus = esriJobSucceeded) el servidor crea nuevos recursos para los parámetros de entrada y de salida, a los que puede acceder mediante una URL. La respuesta del servidor a la solicitud de estado incluirá información sobre las entradas y resultados de la URL. Un ejemplo de respuesta JSON de una tarea Puntos de zona de influencia con un parámetro de salida Output_Polygons se muestra a continuación. Observe que el valor de los parámetros de salida y entrada es una URL relativa, al contrario que en valor de resultado de una tarea de ejecución.
Respuesta JSON de un buen resultado de tarea
{ "jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobSucceeded", "results": { "Output_Polygons": { "paramUrl": "results/Output_Polygons" } }, "inputs": { "Input_Features": { "paramUrl": "inputs/Input_Features" } }, "messages": [ ] }
Cuando una trabajo se haya completado de forma satisfactoria, el cliente debe enviar una solicitud para recuperar cada parámetro de salida. El cliente puede obtener los resultados de entrada o de salida utilizando las respectivas direcciones URL de recurso. La URL de resultado es http://<job-url>/results/<param-name>. La URL de entradas es http://<job-url>/inputs/<param-name>. La respuesta de estos recursos será el valor del parámetro y puede estar en cualquier de salida JSON/KML/AMF/HTML basándose en las solicitudes de cliente. A continuación se muestra un ejemplo de respuesta JSON para el parámetro de salida Output_Polygons del tipo de datos GPFeatureRecordSetLayer. Observe que la respuesta tiene el nombre del parámetro, el tipo de datos y el valor del parámetro.
Respuesta JSON de parámetro de salida de resultado
{ "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 } }
La siguiente figura resume la comunicación servidor/cliente de una operación submitJob. Observe las solicitudes de estado periódicas enviadas por el cliente para determinar el estado del trabajo. El cliente puede determinar la duración entre cada solicitud de estado. Cuando el servidor ha completado con éxito la ejecución de la tarea, crea los resultados y las entradas de recursos a las que se puede acceder a través de la dirección URL.
Además, si el servicio de geoprocesamiento se ha publicado con Ver resultado con un servicio de mapas habilitado, el servidor crea un servicio de mapas de resultado de los parámetros de salida cuando se ha ejecutado la tarea de forma satisfactoria. Cada parámetro de salida del geodataset de la tarea corresponderá a una capa en el servicio de mapas y se dibujará en función de la simbología de la capa definida para los parámetros en las tareas.
Respuesta de error
Un empleo puede fallar debido a parámetros de entrada inválidos, a datos de proyecto inaccesible o a otros fallos de geoprocesamiento. Cuando un trabajo ha fallado, el estado del trabajo se actualizará a esriJobFailed. El cliente debe verificar el estado del trabajo mediante la dirección URL de trabajo para realizar el seguimiento de los fallos. A continuación se muestra la respuesta de error JSON de una tarea fallida.
Respuesta de estado JSON con estado fallido esriJobFailed
{ "jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobFailed", "messages": [ { "type": "esriJobMessageTypeInformative", "description": "Submitted." }, { "type": "esriJobMessageTypeInformative", "description": "Executing..." }, { "type": "esriJobMessageTypeError", "description": "Failed." } ] }
Cuando un trabajo ha fallado, el servidor no creará entradas y los recursos de resultados. Además, el servidor no puede crear un servicio de mapas de resultado, incluso si el servicio de geoprocesamiento tiene un servicio de mapas de resultado.
Cancelar trabajo
El cliente puede decidir descartar la operación submitJob en cualquier momento durante la ejecución de la tarea e invocar la operación Cancelar en trabajo. La dirección URL para Cancelar el trabajo es http://<gp-task-url>/cancel. Cuando el servidor recibe una solicitud de cancelación, se modifica el estado del trabajo a esriJobCancelling y los intentos de poner fin a la ejecución de la tarea. El servidor devuelve un mensaje de estado de trabajo al cliente como se muestra a continuación.
Respuesta JSON de la solicitud de cancelación
{ "jobId": "ja892cd2a90d149db9a171fc86ff530b4", "jobStatus": "esriJobCancelling" }
El cliente puede continuar con el sondeo del estado del trabajo mediante la dirección URL del trabajo y hacer un seguimiento del progreso de la anulación. Además, un cliente solo puede solicitar cancelar un trabajo que está en el estado esriJobWaiting, esriJobSubmitted o esriJobExecuting. Si la solicitud de cancelación se emite para trabajos con los estados esriJobSucceeded o esriJobFailed, el servidor devolverá un mensaje de error.