Bir özellik sınıfı özniteliğini diğerine kopyalayarak iş arkadaşlarımın iş akışını hızlandırmaya yardımcı olan bir Python eklenti düğmesi oluşturdum. Hedef özellik sınıfındaki bir satırı güncellemek için arcpy.UpdateCursor işlevini kullanır. Şimdi olduğu gibi, bu düğme komut dosyası düzenleme modundan bağımsız olarak çalıştırılabilir. Açıkçası bir düzenleme oturumunda çalıştırıldığında, kullanıcı düzenlemeyi durdurmayı ve değişiklikleri kaydetmeyi seçemez, ancak komut dosyası bir düzenleme oturumunun dışında çalıştığında durum böyle değildir.
ArcMap şu anda bir düzenleme oturumunda değilse, komut dosyasına çalışmasını durduracak komut dosyasına nasıl bir denetim ekleyebilirim?
Bu ArcMap 10 ve 10.1 ile ilgilidir
Ayrıca, bir düzenleme oturumunda bulunmadan tablolardaki güncellemelere normalde izin verilmediğini doğrulamak için diğer ArcMap kullanıcılarıyla da kontrol etmek istiyorum.
Peki bu komut dosyası bir düzenleme oturumu dışında nasıl çalışıyor?
Bu komut dosyası ayrıca ArcMap'ın gerçekleştirdiği görünüşte tesadüfi seçim sırası hakkında başka bir soru getiriyor, bu sadece 2. özellik sınıfı tablosunu bir listeden güncellediğimde benim için çalışıyor, ancak bu başka bir gün için.
İşte şu anda çalıştığı gibi komut dosyası (10.1 editör uygulaması olmadan):
Kullanıcının düzenleme oturumunda olduğundan emin olmak için bir kontrol nasıl eklenir?
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