Я создал кнопку надстройки Python, которая помогает ускорить рабочий процесс моего коллеги путем копирования одного атрибута класса объектов в другой. Он использует функцию arcpy.UpdateCursor для обновления строки в целевом классе объектов. Так как он существует сейчас, этот скрипт кнопки можно запускать независимо от режима редактирования. Очевидно, что при запуске в сеансе редактирования пользователь может выбрать остановку редактирования и не сохранять изменения, но это не тот случай, когда скрипт выполняется вне сеанса редактирования.
Как я могу добавить в скрипт проверку, которая остановит его выполнение, если ArcMap в данный момент не находится в сеансе редактирования?
Это касается ArcMap 10 & 10.1
Я также хочу проверить у других пользователей ArcMap, что обновления таблиц обычно не допускаются без участия в сеансе редактирования.
Так как же этот скрипт работает вне сеанса редактирования?
Этот сценарий также поднимает еще один вопрос о, казалось бы, случайном порядке выбора, который выполняет ArcMap, и он мне подходит, когда я обновляю 2-ю таблицу классов объектов из списка, но это на другой день.
Вот скрипт, как он работает сейчас (без какой-либо реализации редактора 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