7 votos

¿Truncar tabla con el servicio de geoprocesamiento?

Un modelo que construí con ModelBuilder funciona como se esperaba en Desktop pero genera numerosos mensajes de error cuando se publica como un servicio de geoprocesamiento (GP) en ArcGIS Server 10.1 SP1. He decidido empezar de forma sencilla y estoy tratando de conseguir que funcione una sola herramienta.

Este es mi modelo. Tiene un parámetro, una tabla o una clase de característica para truncar. Cuando se ejecuta en ArcGIS Desktop 10.1 SP1, el usuario puede especificar qué objeto debe ser truncado. Al publicar como un modelo después de obtener un resultado exitoso, utilizo la configuración por defecto para todos los ajustes (y Información para el Nivel de Mensajes).

Truncate Table model

Al ejecutar la tarea de servicio GP en el mismo ArcGIS Desktop, me aparece esta ventana para suministrar un objeto para truncar.

enter image description here

Después de apuntar a un conjunto de datos (almacenado en una geodatabase de archivos 10.1 en una unidad de disco local), la tarea GP se ejecuta. La tarea no trunca la tabla y produce un error: 000187 : Sólo admite tablas y clases de características de la base de datos geográficos .

Mi opinión es que tiene algo que ver con el modo de entrada de la tarea ( Valor definido por el usuario ) lo que hace imposible suministrar a mi tarea una clase de característica desde una geodatabase de archivo en el sistema de archivos. Parece que el modelo utiliza el objeto FeatureSet vacío en lugar de una clase de característica que proporciono al ejecutar la tarea de servicio GP.

¿Hay alguna forma de hacer que la herramienta Truncar Tabla GP utilice otra clase de característica (no la misma que se utiliza cuando se ejecuta el modelo primero en Desktop antes de publicarlo) cuando se publica como un servicio GP?

El modelo para truncar una tabla funciona bien cuando no hay parámetros expuestos y cuando se ejecuta la tarea GP de un servicio publicado, se ejecuta sobre la misma clase de característica que he utilizado al ejecutar el modelo primero para generar un resultado.

Así pues, el servicio GP funciona con las clases de características, pero sólo con la misma que se utilizó al ejecutar el modelo antes de publicarlo.

¿Es posible suministrar una clase de característica a una tarea de GP que difiera de la clase de característica utilizada para ejecutar el modelo y generar el resultado?

NB: la clase de característica no se copia en la carpeta arcgisserver, se procesa correctamente en la geodatabase en el disco, por lo que esta parte funciona correctamente.

0 votos

¿Está configurando el espacio de trabajo en la configuración del entorno? ¿Cómo puede saber la herramienta qué tabla debe truncar si sólo le das el nombre? Necesita la ruta completa.

1 votos

¿Puede decirnos también qué flujo de trabajo va a utilizar? No creo que una herramienta de servidor sea capaz de truncar una tabla que sólo está presente en el sistema cliente.

0 votos

No establezco ningún espacio de trabajo. Sin embargo, no doy sólo un nombre de tabla. Como se ha indicado anteriormente, después de señalar un conjunto de datos (almacenado en una geodatabase 10.1 en una unidad de disco local), la tarea GP se ejecuta. La tarea no trunca la tabla y produce un error. Así que proporciono la ruta completa a una clase de características en un disco.

4voto

Alex Tereshenkov Puntos 13433

El problema era que el servicio GP no puede utilizar las clases de características directamente como parámetros de entrada. La solución a esto es utilizar una técnica de análisis sintáctico que tomaría una cadena de un usuario (nombre de la clase de característica) y luego anexar esta variable de cadena a la ruta completa de la clase de característica (especifico el nombre de la geodatabase de antemano en el código).

Parece que esto es mucho más fácil de implementar en Python que en ModelBuilder, así que he implementado esta lógica utilizando el módulo arcpy en ArcGIS 10.1:

import arcpy
from arcpy import env
#Setting the env workspace to be an SDE geodatabase
#
env.workspace = r'C:\sde_at_DB101.sde'

#Getting the existing polygon feature class as input parameter
#
GetExistingPolyFC = arcpy.GetParameterAsText(0)
GetPolyFC = GetExistingPolyFC

# Truncate a feature class if it exists
#
if arcpy.Exists(GetPolyFC):
   arcpy.AddMessage("Polygon feature class exists, start working...")
   arcpy.TruncateTable_management(r'C:\sde_at_DB_101.sde\%s' %GetPolyFC)
   arcpy.AddMessage("Truncating table is complete")

else:
   arcpy.AddMessage("Polygon feature class does not exist")

He utilizado esta lógica para otras partes de mi modelo más grande y ahora funciona bien como un servicio de GP. He decidido reescribir todo el modelo como un script de Python desde cero y fue mucho más fácil de implementar y también funciona mucho más rápido cuando se ejecuta la tarea de GP.

3voto

Anthony Cramp Puntos 126

Viendo tu comentario, veo que tu flujo de trabajo no va a funcionar. Los servicios de geoprocesamiento del servidor de ArcGIS no pueden actualizar o editar los datos de entrada proporcionados por el usuario.

Pueden tomar una entrada y procesarla, pero no editarla.

La herramienta de truncamiento puede ser útil en otras situaciones, por ejemplo, si se realiza algún tipo de procesamiento y luego se quiere pasar sólo una parte de eso al usuario. En este caso podrías usar una herramienta de truncado en tu modelo, y funcionaría bien, ya que esos datos ya estaban en el servidor.

Otro posible flujo de trabajo podría ser si su herramienta de geoprocesamiento ya tiene acceso a algunos datos en su SDE, y usted sólo proporciona el nombre de la tabla a truncar. En ese caso, el servicio se ejecutará sucesivamente, ya que sólo está pasando el nombre como entrada, y el propio servidor de ArcGIS va al SDE y trunca los datos.

Pero en general, un servicio de geoprocesamiento de ArcGIS Server no puede editar datos proporcionados por el usuario.

0 votos

Devdatta, no estoy seguro de que me hayas entendido bien. Un modelo con la herramienta Truncar Tabla que publico como servicio GP es capaz de editar una clase de característica independientemente de dónde esté almacenada: en una geodatabase de archivo o en una geodatabase de ArcSDE. Sin embargo, parece que el servicio GP sólo puede truncar la clase de característica que he utilizado al ejecutar el modelo primero para generar un resultado exitoso (con el fin de publicarlo). Así que el servicio GP trunca la misma clase de característica. Mi objetivo, sin embargo, es poder especificar cualquier clase de característica (que sea accesible para el servidor, por supuesto).

0 votos

Así, cuando se publica un modelo como servicio GP y se especifica "Valor definido por el usuario" como modo de entrada, no puedo ejecutar la tarea GP. Sin embargo, cuando se especifica el valor constante, no se crea ningún parámetro para la tarea GP y la tarea GP se ejecuta con éxito, aunque, por supuesto, con la misma clase de característica que he ejecutado primero en Desktop. Quiero encontrar una manera de dejar la clase de característica de entrada como un parámetro de entrada para la tarea GP y ser capaz de ejecutarla con éxito.

0 votos

@AlexTereshenkov: Si estás trucando tablas en el servidor, vuelvo a mi comentario original. ¿Cómo puede saber la herramienta qué tabla debe truncar si sólo le das el nombre? Necesita la ruta completa. Puedes especificar la ruta completa teniendo el parámetro de entrada como un conjunto de características, y podrías establecer el espacio de trabajo en el modelo, o pedir al usuario que lo proporcione.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X