ฉันได้สร้างปุ่ม Python add-in ที่ช่วยเร่งขั้นตอนการทำงานของเพื่อนร่วมงานด้วยการคัดลอกคุณลักษณะคลาสคุณลักษณะหนึ่งไปยังอีก มันใช้ฟังก์ชัน 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