Ich habe eine Python-Add-In-Schaltfläche erstellt, die den Workflow meiner Mitarbeiter beschleunigt, indem ein Feature-Class-Attribut in ein anderes kopiert wird. Es verwendet die Funktion arcpy.UpdateCursor, um eine Zeile in der Ziel-Feature-Class zu aktualisieren. Wie es jetzt existiert, kann dieses Schaltflächenskript unabhängig vom Bearbeitungsmodus ausgeführt werden. Natürlich kann der Benutzer beim Ausführen in einer Bearbeitungssitzung die Bearbeitung beenden und keine Änderungen speichern. Dies ist jedoch nicht der Fall, wenn das Skript außerhalb einer Bearbeitungssitzung ausgeführt wird.
Wie kann ich dem Skript eine Prüfung hinzufügen, die die Ausführung des Skripts verhindert, wenn sich ArcMap derzeit nicht in einer Bearbeitungssitzung befindet?
Dies betrifft ArcMap 10 und 10.1
Ich möchte auch mit anderen ArcMap-Benutzern überprüfen, ob Aktualisierungen von Tabellen normalerweise nicht zulässig sind, ohne sich in einer Bearbeitungssitzung zu befinden.
Wie läuft dieses Skript außerhalb einer Bearbeitungssitzung?
Dieses Skript wirft auch eine andere Frage zu der scheinbar zufälligen Auswahlreihenfolge auf, die ArcMap ausführt und die zufällig für mich funktioniert, wenn ich die Tabelle der zweiten Feature-Class aus einer Liste aktualisiere, aber das ist für einen anderen Tag.
Hier ist das Skript, wie es jetzt funktioniert (ohne Implementierung eines 10.1-Editors):
Wie füge ich eine Prüfung hinzu, um sicherzustellen, dass sich der Benutzer in einer Bearbeitungssitzung befindet?
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