¿Actualizar la tabla de atributos abiertos en ArcMap usando ArcPy en lugar de ArcObjects?

11

Estoy ejecutando la herramienta Calcular campo GP desde el arco en ArcMap. Cuando se actualiza un valor de fila, no aparece hasta que uso la herramienta Volver a cargar caché (Opciones de tabla> Volver a cargar caché). ¿Cómo actualizo la tabla de atributos automáticamente sin usar ArcObjects?

Intenté actualizar la consulta de definición como sugirió @ blah238. Usando python, ¿cómo se "recarga la caché" de una tabla de atributos abierta , pero esto no ayuda. Restablecer el origen de datos no es una opción porque la clase de entidad podría estar en la sesión de edición y no quiero perder la conexión con los datos de origen.

Alex Tereshenkov
fuente
¿Estás usando ArcGIS 10.1? Si es así, ¿está utilizando un complemento de Python o una herramienta de script de Python para ejecutar Calcular campo?
PolyGeo
1
¿Realmente importa? Llamo a la herramienta Calcular campo GP desde un complemento de Python, pero se observa lo mismo al ejecutar la herramienta GP desde la ventana de Python.
Alex Tereshenkov
1
Siempre me imagino que si voy a intentar reproducir un problema, entonces la forma más probable de verlo es si hago exactamente (o lo más cerca posible) los mismos pasos en la misma configuración que ha sido. visto antes.
PolyGeo

Respuestas:

4

Parece que está llegando a una limitación de ArcPy, en ausencia de ArcObjects.

Las limitaciones de ArcPy.mapping se han descrito ampliamente aquí como:

Arcpy.mapping no es un reemplazo para ArcObjects, sino más bien una alternativa para los diferentes escenarios que admite. ArcObjects sigue siendo necesario para el desarrollo de grano fino y la personalización de aplicaciones, mientras que arcpy.mapping está destinado a automatizar el contenido de documentos de mapas y archivos de capa existentes.

Si la otra sugerencia de @ blah238 de usar ArcObjects de ArcPy no es una opción para usted, entonces puede ser mejor enviar una Idea ArcGIS para que esta funcionalidad se exponga a ArcPy. Si publica un enlace a una idea de ArcGIS como esta aquí, estaré encantado de votar por ella.

PolyGeo
fuente
Gracias PolyGeo, lástima que no podamos encontrar una manera de actualizar la tabla de atributos al calcular los valores de campo fuera de la sesión de edición.
Alex Tereshenkov
1
Puede enviar una solicitud de mejora al soporte técnico de ESRI. Solicité la posibilidad de tener solo un botón, una opción de menú o una tecla F para actualizar la tabla y mostrar los cambios sin cerrar y abrir manualmente. Me dijeron que la tabla debería actualizarse por sí sola y el asunto se cerró por no ser reproducible localmente. Por lo general, son útiles. Tengo la impresión de que ni siquiera son conscientes de las limitaciones.
Johns
Recomiendo hacer todo lo anterior, pero ArcGIS Ideas le permite monitorear la popularidad y el progreso de la implementación mucho más fácilmente que el soporte local aquí.
PolyGeo
1
@johns, ¿sabe que no tiene que cerrar y abrir la tabla de atributos para actualizarla? La forma actual de hacerlo es hacer clic en el botón Opciones de tabla> Volver a cargar caché. Otra cosa que funciona es ejecutar la operación Calcular campo en el modo de edición, luego los valores en las tablas de atributos se actualizan inmediatamente.
Alex Tereshenkov
1
@ Alex, gracias por la sugerencia; me hizo volver a probar el problema aún más. He usado la recarga de caché pero falló / falla cuando agregué polígonos en modo de edición en la vista de diseño usando un complemento para obtener la extensión del diseño. Cuando estoy en la vista de datos y uso el mismo complemento, la recarga de caché funciona. Por lo tanto, de alguna manera involucra la vista de diseño.
Johns
3

Esto puede o no ser útil para su flujo de trabajo específico. He descubierto que si cambia la selección en su capa, la tabla de atributos también se actualiza.

Así que a menudo uso

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Por supuesto, si realmente tiene algo seleccionado que no desea perder de vista, entonces esto no es bueno. En ese caso, puede seleccionar de la capa donde el OID está en la lista de OID de las características seleccionadas actualmente (básicamente, cambie la selección a lo que ya esté seleccionado actualmente). Esto podría llevar mucho tiempo para ser prácticamente, nunca lo he intentado en un escenario de la vida real.

Patricio
fuente
1

Has probado:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

o

arcpy.RefreshActiveView() # Refreshes the map

o

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Creo que uno de estos funcionará, pero sé que a veces en ArcMap tengo que cerrar manualmente la tabla de atributos y luego volver a abrirla para ver algunas ediciones. No estoy seguro si cerrar y abrir la tabla se puede hacer con ArcPy, pero esa también sería una opción.

Cody Brown
fuente
Thansk, Cody, desafortunadamente, nada de esto funciona. Cerrar y abrir la tabla de atributos manualmente hace el truco, sin embargo, estoy buscando algo que lo haga programáticamente. La tabla de atributos de apertura y cierre tampoco está disponible con Python.
Alex Tereshenkov
Ninguno de estos está diseñado para actualizar la tabla de atributos.
Radar
1

Esto funciona:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
Eddy Opperdoes
fuente