Criei um botão de suplemento Python que ajuda a acelerar o fluxo de trabalho de meus colegas de trabalho, copiando um atributo de classe de recurso para outro. Ele usa a função arcpy.UpdateCursor para atualizar uma linha na classe de recurso de destino. Como existe agora, esse script de botão pode ser executado independentemente do modo de edição. Obviamente, quando executado em uma sessão de edição, o usuário pode optar por interromper a edição e não salvar as alterações, mas esse não é o caso quando o script é executado fora de uma sessão de edição.
Como posso adicionar uma verificação ao script que interromperá a execução do script se o ArcMap não estiver atualmente em uma sessão de edição?
Isso diz respeito ao ArcMap 10 e 10.1
Também quero verificar com outros usuários do ArcMap para verificar se as atualizações das tabelas normalmente não são permitidas sem estar em uma sessão de edição.
Então, como esse script está sendo executado fora de uma sessão de edição?
Esse script também traz outra pergunta sobre a ordem de seleção aparentemente aleatória que o ArcMap executa que só funciona para mim quando eu atualizo a 2ª tabela de classes de recursos de uma lista, mas isso é para outro dia.
Aqui está o script como funciona agora (sem nenhuma implementação do editor 10.1):
Como adicionar uma verificação para garantir que o usuário esteja em uma sessão de edição?
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