Saya telah membuat tombol tambah Python yang membantu mempercepat alur kerja rekan kerja saya dengan menyalin satu atribut kelas fitur ke atribut lainnya. Ini menggunakan fungsi arcpy.UpdateCursor untuk memperbarui baris di kelas fitur target. Seperti yang ada sekarang, skrip tombol ini dapat dijalankan terlepas dari mode pengeditan. Jelas ketika dijalankan dalam sesi edit, pengguna dapat memilih untuk berhenti mengedit dan tidak menyimpan perubahan, tetapi ini tidak terjadi ketika skrip berjalan di luar sesi edit.
Bagaimana saya bisa menambahkan tanda centang pada skrip yang akan menghentikan skrip agar tidak berjalan jika ArcMap saat ini tidak dalam sesi edit?
Ini menyangkut ArcMap 10 & 10.1
Saya juga ingin memeriksa dengan pengguna ArcMap lain untuk memverifikasi bahwa pembaruan tabel biasanya tidak diizinkan tanpa berada dalam sesi edit.
Jadi bagaimana skrip ini berjalan di luar sesi edit?
Script ini juga memunculkan pertanyaan lain tentang urutan seleksi ArcMap yang tampaknya kebetulan bekerja untuk saya ketika saya memperbarui tabel kelas fitur 2 dari daftar, tapi itu untuk hari lain.
Inilah skrip yang berfungsi sekarang (tanpa implementasi editor 10.1):
Bagaimana cara menambahkan cek untuk memastikan pengguna dalam sesi edit?
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