He creado un botón de complemento de Python que ayuda a acelerar el flujo de trabajo de mis compañeros de trabajo copiando un atributo de clase de característica a otro. Utiliza la función arcpy.UpdateCursor para actualizar una fila en la clase de característica de destino. Tal y como existe ahora, este script de botón se puede ejecutar independientemente del modo de edición. Obviamente, cuando se ejecuta en una sesión de edición, el usuario puede optar por detener la edición y no guardar los cambios, pero este no es el caso cuando el script se ejecuta fuera de una sesión de edición.
¿Cómo puedo añadir una comprobación a la secuencia de comandos que impida su ejecución si ArcMap no se encuentra actualmente en una sesión de edición?
Esto afecta a ArcMap 10 y 10.1
También quiero consultar con otros usuarios de ArcMap para verificar que las actualizaciones de las tablas no se permite normalmente sin estar en una sesión de edición.
Entonces, ¿cómo se ejecuta este script fuera de una sesión de edición?
Esta secuencia de comandos también trae a colación otra cuestión sobre el orden de selección aparentemente serendipia ArcMap realiza que sólo pasa a trabajar para mí cuando actualizo la 2 ª tabla de clases de características de una lista, pero eso es para otro día.
Aquí está el script tal y como funciona ahora (sin ninguna implementación del editor 10.1):
¿Cómo añadir una comprobación para asegurar que el usuario está en una sesión de edición?
def onClick(self):
#Reference mxd
mxd = arcpy.mapping.MapDocument("CURRENT")
#Reference the main Data frame
mm = arcpy.mapping.ListDataFrames(mxd, "MainMap")[0]
#Reference the Water System Valve feature class
waterValves = arcpy.mapping.ListLayers(mxd, "Water System Valve", mm)[0]
#Reference the fire hydrant feature class
fireHydrants = arcpy.mapping.ListLayers(mxd, "Water Hydrant", mm)[0]
#Use the extent of the main DF to select all valves in the current view
dfAsFeature = arcpy.Polygon(arcpy.Array([mm.extent.lowerLeft, mm.extent.lowerRight, mm.extent.upperRight, mm.extent.upperLeft]), mm.spatialReference)
arcpy.SelectLayerByLocation_management(waterValves, "WITHIN", dfAsFeature,"", "NEW_SELECTION")
arcpy.SelectLayerByAttribute_management(waterValves, "SUBSET_SELECTION", "LOCATIONID IS NULL")
fields = ["LOCATIONID"]
row, rows = None, None
rows = arcpy.UpdateCursor(waterValves,fields)
row = rows.next()
valveList = []
append = valveList.append
#Loop through the valves table to update LocationID
while row:
builder = str(row.QSNO)+"-"+ str(row.VALVESEQNO)
row.setValue("LOCATIONID", builder)
append(builder)
rows.updateRow(row)
row = rows.next()
del row, rows
#New selection for fire hydrants
arcpy.SelectLayerByLocation_management(fireHydrants, "WITHIN", dfAsFeature,"", "NEW_SELECTION")
arcpy.SelectLayerByAttribute_management(fireHydrants, "SUBSET_SELECTION", "LOCATIONID IS NULL")
row, rows = None, None
rows = arcpy.UpdateCursor(fireHydrants,fields)
row = rows.next()
#Loop through fire hydrant table to update LocationID
while row:
for locID in valveList:
construct = str(locID) + "-FH"
#print construct
row.setValue("LOCATIONID", construct)
rows.updateRow(row)
row = rows.next()
del row, rows, valveList, mxd
0 votos
El editor del módulo de acceso a datos parece funcionar independientemente del editor estándar. Agradecería cualquier idea adicional sobre las pruebas para una sesión de edición activa. -Karl
0 votos
¿Puede darnos más información? ¿Qué le ha llevado a esta conclusión para los que no hemos explorado el módulo?