Ho creato un pulsante aggiuntivo Python che aiuta ad accelerare il flusso di lavoro dei miei colleghi copiando un attributo della classe di funzionalità in un altro. Utilizza la funzione arcpy.UpdateCursor per aggiornare una riga nella classe di caratteristiche di destinazione. Come esiste ora, questo script di pulsanti può essere eseguito indipendentemente dalla modalità di modifica. Ovviamente quando viene eseguito in una sessione di modifica, l'utente può scegliere di interrompere la modifica e non salvare le modifiche, ma non è così quando lo script viene eseguito al di fuori di una sessione di modifica.
Come posso aggiungere un segno di spunta allo script che interromperà l'esecuzione dello script se ArcMap non è attualmente in una sessione di modifica?
Ciò riguarda ArcMap 10 e 10.1
Voglio anche verificare con altri utenti ArcMap per verificare che gli aggiornamenti alle tabelle non siano normalmente consentiti senza essere in una sessione di modifica.
Quindi come funziona questo script al di fuori di una sessione di modifica?
Questo script solleva anche un'altra domanda sull'ordine di selezione apparentemente fortuito che ArcMap esegue che funziona per me quando aggiorno la seconda tabella delle classi di funzionalità da un elenco, ma è per un altro giorno.
Ecco lo script come funziona ora (senza alcuna implementazione dell'editor 10.1):
Come aggiungere un segno di spunta per assicurarsi che l'utente sia in una sessione di modifica?
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