Creé un botón de complemento de Python que ayuda a acelerar el flujo de trabajo de mis compañeros de trabajo al copiar un atributo de clase de entidad en otro. Utiliza la función arcpy.UpdateCursor para actualizar una fila en la clase de entidad de destino. Tal 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 agregar una comprobación al script que detendrá el script si ArcMap no está actualmente en una sesión de edición?
Esto concierne a ArcMap 10 y 10.1
También quiero consultar con otros usuarios de ArcMap para verificar que las actualizaciones de las tablas normalmente no están permitidas 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 plantea otra pregunta sobre el orden de selección aparentemente fortuito que realiza ArcMap que simplemente funciona para mí cuando actualizo la segunda tabla de clase de entidad de una lista, pero eso es para otro día.
Aquí está el script tal como funciona ahora (sin ninguna implementación del editor 10.1):
¿Cómo agregar un cheque 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