Aktualisieren der geöffneten Attributtabelle in ArcMap mithilfe von ArcPy anstelle von ArcObjects?


11

Ich führe das Tool "Field GP berechnen" über arcpy in ArcMap aus. Wenn ein Zeilenwert aktualisiert wird, wird er erst angezeigt, wenn ich das Tool "Cache neu laden" verwende (Tabellenoptionen> Cache neu laden). Wie aktualisiere ich die Attributtabelle automatisch, ohne ArcObjects zu verwenden?

Ich habe versucht, die Definitionsabfrage zu aktualisieren, wie @ blah238 vorgeschlagen hat. Wie kann man mithilfe von Python eine geöffnete Attributtabelle "neu laden" , aber das hilft nicht. Das Zurücksetzen der Datenquelle ist keine Option, da sich die Feature-Class möglicherweise in der Bearbeitungssitzung befindet und ich die Verbindung zu den Quelldaten nicht verlieren möchte.


Verwenden Sie ArcGIS 10.1? Wenn ja, verwenden Sie ein Python-Add-In oder ein Python-Skript-Tool, um "Feld berechnen" auszuführen?
PolyGeo

1
Ist es wirklich wichtig? Ich rufe das GP-Tool "Feld berechnen" über ein Python-Add-In auf, aber das Gleiche wird beobachtet, wenn das GP-Tool über das Python-Fenster ausgeführt wird.
Alex Tereshenkov

1
Ich denke immer, wenn ich versuchen werde, ein Problem zu reproduzieren, sehe ich es am wahrscheinlichsten, wenn ich genau (oder so nah wie möglich) dieselben Schritte in derselben Konfiguration wie bisher mache zuvor gesehen.
PolyGeo

Antworten:


4

In Abwesenheit von ArcObjects scheinen Sie auf eine Einschränkung von ArcPy zu stoßen.

Die Grenzen der arcpy.mapping wurden im Großen und Ganzen beschrieben hier als:

Arcpy.mapping ist kein Ersatz für ArcObjects, sondern eine Alternative für die verschiedenen unterstützten Szenarien. ArcObjects ist weiterhin für eine feinkörnigere Entwicklung und Anwendungsanpassung erforderlich, während arcpy.mapping zur Automatisierung des Inhalts vorhandener Kartendokumente und Layer-Dateien vorgesehen ist.

Wenn der andere Vorschlag von @ blah238, ArcObjects aus ArcPy zu verwenden, für Sie keine Option ist, senden Sie am besten eine ArcGIS-Idee , damit diese Funktionalität für ArcPy verfügbar gemacht wird. Wenn Sie hier einen Link zu einer solchen ArcGIS-Idee veröffentlichen, stimme ich gerne dafür.


Dank PolyGeo können wir die Attributtabelle bei der Berechnung von Feldwerten außerhalb der Bearbeitungssitzung nicht aktualisieren.
Alex Tereshenkov

1
Sie können eine Erweiterungsanforderung an den technischen Support von ESRI senden. Ich bat um die Möglichkeit, nur eine Schaltfläche, eine Menüoption oder eine F-Taste zu haben, um die Tabelle zu aktualisieren und Änderungen anzuzeigen, ohne sie manuell zu schließen und zu öffnen. Mir wurde gesagt, dass die Tabelle von selbst aktualisiert werden sollte und die Angelegenheit als nicht lokal reproduzierbar geschlossen wurde. Normalerweise sind sie hilfreich. Ich hatte den Eindruck, dass sie sich der Einschränkungen nicht einmal bewusst sind.
Johns

Ich empfehle, beides zu tun, aber mit ArcGIS Ideas können Sie die Popularität und den Implementierungsfortschritt viel einfacher überwachen als mit lokalem Support.
PolyGeo

1
@johns, wissen Sie, dass Sie die Attributtabelle nicht schließen und öffnen müssen, um sie zu aktualisieren? Die aktuelle Möglichkeit hierfür besteht darin, auf die Schaltfläche Tabellenoptionen> Cache neu laden zu klicken. Eine andere Möglichkeit besteht darin, die Operation "Feld berechnen" im Bearbeitungsmodus auszuführen. Anschließend werden die Werte in den Attributtabellen sofort aktualisiert.
Alex Tereshenkov

1
@ Alex, danke für den Vorschlag; Ich ging zurück, um das Problem weiter zu testen. Ich habe den Reload-Cache verwendet, aber er ist fehlgeschlagen / fehlgeschlagen, wenn ich Polygone im Bearbeitungsmodus in der Layoutansicht mithilfe eines Add-Ins hinzugefügt habe, um den Layoutumfang zu ermitteln. Wenn ich in der Datenansicht dasselbe Add-In verwende, funktioniert der Reload-Cache. Es geht also irgendwie um die Layoutansicht.
Johns

3

Dies kann für Ihren spezifischen Workflow nützlich sein oder auch nicht. Ich habe festgestellt, dass, wenn Sie die Auswahl auf Ihrer Ebene ändern, auch die Attributtabelle aktualisiert wird.

Also benutze ich oft

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Wenn Sie tatsächlich etwas ausgewählt haben, das Sie nicht aus den Augen verlieren möchten, ist dies natürlich nicht gut. In diesem Fall können Sie aus einer Ebene auswählen, in der sich die OID in der Liste der OIDs der aktuell ausgewählten Features befindet (ändern Sie im Grunde die Auswahl in die bereits aktuell ausgewählte). Es kann zu lange dauern, bis es praktisch ist. Ich habe es noch nie in einem realen Szenario versucht.


1

Hast du es versucht:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

oder

arcpy.RefreshActiveView() # Refreshes the map

oder

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Ich denke, eine davon wird funktionieren, aber ich weiß, dass ich in ArcMap manchmal die Attributtabelle manuell schließen und dann erneut öffnen muss, um einige Änderungen zu sehen. Ich bin nicht sicher, ob das Schließen und Öffnen der Tabelle mit ArcPy möglich ist, aber das wäre auch eine Option.


Thansk, Cody, leider funktioniert nichts davon. Das manuelle Schließen und Öffnen der Attributtabelle reicht aus, ich suche jedoch nach etwas, das dies programmgesteuert tun würde. Das Öffnen und Schließen von Attributtabellen ist in Python ebenfalls nicht verfügbar.
Alex Tereshenkov

Keines davon dient zum Aktualisieren der Attributtabelle.
Radar

1

Das funktioniert:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.