Я створив кнопку надбудови Python, яка допомагає прискорити робочий процес моїх колег, копіюючи один атрибут класу функцій в інший. Він використовує функцію arcpy.UpdateCursor для оновлення рядка в цільовому класі функцій. Як існує зараз, цей скрипт кнопки може бути запущений незалежно від режиму редагування. Очевидно, що після запуску в сеансі редагування користувач може зупинити редагування та не зберігати зміни, але це не так, коли сценарій працює поза сеансом редагування.
Як я можу додати чек до сценарію, який зупинить запуск сценарію, якщо ArcMap зараз не перебуває в сесії редагування?
Це стосується ArcMap 10 та 10.1
Я також хочу проконсультуватися з іншими користувачами ArcMap, щоб перевірити, що оновлення таблиць зазвичай не дозволено, не перебуваючи в сесії редагування.
То як цей скрипт працює поза сеансом редагування?
Цей сценарій також піднімає ще одне питання щодо, здавалося б, порядкового вибору вибору ArcMap, який просто працює для мене, коли я оновлюю таблицю другого класу зі списку, але це вже інший день.
Ось сценарій, як він працює зараз (без будь-якої реалізації редактора 10.1):
Як додати чек, щоб переконатися, що користувач перебуває в сесії редагування?
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