मैंने एक पायथन ऐड-इन बटन बनाया है जो एक फीचर क्लास की विशेषता को दूसरे में कॉपी करके मेरे सहकर्मियों के वर्कफ़्लो को गति देने में मदद करता है। यह लक्ष्य सुविधा वर्ग में एक पंक्ति को अद्यतन करने के लिए arcpy.UpdateCursor फ़ंक्शन का उपयोग करता है। जैसा कि अभी मौजूद है, यह बटन स्क्रिप्ट संपादन मोड की परवाह किए बिना चलाया जा सकता है। जाहिर है जब एक एडिट सेशन में इसकी रनिंग होती है, तो यूजर एडिटिंग को रोकना और बदलावों को नहीं सहेजना चुन सकता है, लेकिन ऐसा तब नहीं होता है जब स्क्रिप्ट किसी एडिट सेशन के बाहर चलती है।
मैं उस स्क्रिप्ट में एक जांच कैसे जोड़ सकता हूं जो स्क्रिप्ट को चलने से रोक देगी यदि आर्कपाइप वर्तमान में एक संपादन सत्र में नहीं है?
यह आर्कप 10 और 10.1 की चिंता करता है
मैं यह भी सत्यापित करना चाहता हूं कि अन्य आर्कपैम उपयोगकर्ताओं के साथ यह सत्यापित करने के लिए कि तालिकाओं में अपडेट एक संपादन सत्र में होने के बिना सामान्य रूप से अनुमति नहीं है।
तो यह स्क्रिप्ट एक संपादन सत्र के बाहर कैसे चल रही है?
यह स्क्रिप्ट प्रतीत होने वाले गंभीर चयन क्रम के बारे में एक और सवाल भी उठाती है। आर्केपॉर्फ़ यह करता है कि जब मैं किसी सूची से 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