Tôi đã tạo một nút bổ trợ Python giúp tăng tốc quy trình làm việc cho đồng nghiệp của mình bằng cách sao chép một thuộc tính lớp tính năng này sang thuộc tính khác. Nó sử dụng hàm arcpy.UpdateCthon để cập nhật một hàng trong lớp tính năng đích. Vì nó tồn tại bây giờ, tập lệnh nút này có thể được chạy bất kể chế độ chỉnh sửa. Rõ ràng khi nó chạy trong phiên chỉnh sửa, người dùng có thể chọn dừng chỉnh sửa và không lưu thay đổi, nhưng đây không phải là trường hợp khi tập lệnh chạy bên ngoài phiên chỉnh sửa.
Làm cách nào tôi có thể thêm một kiểm tra vào tập lệnh sẽ ngăn tập lệnh chạy nếu ArcMap hiện không có trong phiên chỉnh sửa?
Điều này liên quan đến ArcMap 10 & 10.1
Tôi cũng muốn kiểm tra với những người dùng ArcMap khác để xác minh rằng các bản cập nhật cho các bảng thường không được phép nếu không có trong phiên chỉnh sửa.
Vậy tập lệnh này chạy bên ngoài phiên chỉnh sửa như thế nào?
Kịch bản này cũng đưa ra một câu hỏi khác về thứ tự lựa chọn có vẻ ngẫu nhiên mà ArcMap thực hiện sẽ xảy ra với tôi khi tôi cập nhật bảng lớp tính năng thứ 2 từ danh sách, nhưng đó là cho một ngày khác.
Đây là tập lệnh như hiện tại (không có bất kỳ triển khai trình soạn thảo 10.1 nào):
Làm cách nào để thêm một kiểm tra để đảm bảo người dùng đang trong phiên chỉnh sửa?
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