J'ai créé un bouton de complément Python qui permet d'accélérer le flux de travail de mes collègues en copiant un attribut de classe d'entités dans un autre. Il utilise la fonction arcpy.UpdateCursor pour mettre à jour une ligne dans la classe d'entités cible. Tel qu'il existe maintenant, ce script de bouton peut être exécuté quel que soit le mode d'édition. Évidemment, lors de son exécution dans une session d'édition, l'utilisateur peut choisir d'arrêter l'édition et de ne pas enregistrer les modifications, mais ce n'est pas le cas lorsque le script s'exécute en dehors d'une session d'édition.
Comment puis-je ajouter une vérification au script qui arrêtera l'exécution du script si ArcMap n'est pas actuellement dans une session de modification?
Cela concerne ArcMap 10 et 10.1
Je souhaite également vérifier auprès d'autres utilisateurs d'ArcMap pour vérifier que les mises à jour des tables ne sont normalement pas autorisées sans être dans une session de modification.
Alors, comment ce script s'exécute-t-il en dehors d'une session d'édition?
Ce script soulève également une autre question sur l'ordre de sélection apparemment fortuit qu'ArcMap exécute et qui se produit pour moi lorsque je mets à jour la deuxième table de classe d'entités à partir d'une liste, mais c'est pour un autre jour.
Voici le script tel qu'il fonctionne maintenant (sans implémentation de l'éditeur 10.1):
Comment ajouter une vérification pour s'assurer que l'utilisateur est dans une session d'édition?
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