ArcObjectsではなくArcPyを使用してArcMapの開いている属性テーブルを更新しますか?


11

ArcMapのarcpyからCalculate Field GPツールを実行しています。行の値が更新されると、キャッシュの再読み込みツール([テーブルオプション]> [キャッシュの再読み込み])を使用するまで表示されません。ArcObjectsを使用せずに属性テーブルを自動的に更新するにはどうすればよいですか?

私が提案し、@ blah238として定義クエリ更新しようとしたのpythonを使用して、どのようにあなたの「リロードキャッシュ」をオープン属性テーブルが、これは助けません。フィーチャクラスが編集セッションにある可能性があり、ソースデータへの接続を失いたくないため、データソースのリセットはオプションではありません。


ArcGIS 10.1を使用していますか?その場合は、PythonアドインまたはPythonスクリプトツールを使用してフィールドの計算を実行していますか?
PolyGeo

1
それは本当に重要ですか?Python Add-inからCalculate Field GPツールを呼び出していますが、PythonウィンドウからGPツールを実行すると同じことが観察されます。
アレックステレシェンコフ

1
問題を再現しようとする場合、最も可能性の高い方法は、以前と同じ構成で同じ手順を正確に(またはできる限り近く)行うことです。前に見た。
PolyGeo

回答:


4

ArcObjectsがない場合、ArcPyの制限に達しているようです。

ArcPy.mappingの制限は、ここでは次のように広く説明さています。

Arcpy.mappingは、ArcObjectsの代わりではなく、サポートするさまざまなシナリオの代替手段です。ArcObjectsは、きめ細かい開発とアプリケーションのカスタマイズに必要ですが、arcpy.mappingは、既存のマップドキュメントとレイヤーファイルのコンテンツを自動化することを目的としています。

@ blah238がArcPyのArcObjectsを使用するという他の提案を選択できない場合は、ArcGIS Ideaを送信して、この機能をArcPyに公開することをお勧めします。このようなArcGISアイデアへのリンクをここに投稿すると、喜んで投票します。


PolyGeoのおかげで、残念ながら編集セッション外でフィールド値を計算するときに属性テーブルを更新する方法を見つけることができません。
アレックステレシェンコフ

1
ESRI技術サポートに機能強化リクエストを送信できます。ボタン、メニューオプション、またはFキーを使用してテーブルを更新し、手動で閉じたり開いたりせずに変更を表示する機能を要求しました。私はテーブルがそれ自体で更新されるべきであると言われました、そして、問題は局所的に再現可能でないので閉じられました。通常、それらは役に立ちます。私は彼らが制限を認識していないという印象を受けました。
ジョンズ

上記の両方を行うことをお勧めしますが、ArcGIS Ideasでは、ここでのローカルサポートよりもはるかに簡単に人気と実装の進行状況を監視できます。
PolyGeo

1
@johns、属性テーブルを閉じてから開いて更新する必要がないことを知っていますか?これを行う現在の方法は、[テーブルオプション]ボタン> [キャッシュの再読み込み]をクリックすることです。別の機能として、編集モードでフィールドの計算操作を実行すると、属性テーブルの値がすぐに更新されます。
アレックステレシェンコフ

1
@Alex、提案をありがとう。問題をさらにテストするために戻ってきました。リロードキャッシュを使用しましたが、アドインを使用してレイアウトビューで編集モードでポリゴンを追加して、レイアウト範囲を取得すると、リロードキャッシュが失敗または失敗しました。データビューで同じアドインを使用すると、リロードキャッシュが機能します。そのため、何らかの方法でレイアウトビューが関係します。
ジョンズ

3

これは、特定のワークフローに役立つ場合とそうでない場合があります。レイヤーの選択を変更すると、属性テーブルも更新されることがわかりました。

だから私はよく使う

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

もちろん、あなたが実際に何かを選択した場合、それを追跡したくないのであれば、これは良くありません。その場合、OIDが現在選択されているフィーチャのOIDのリストにあるレイヤーから選択することができます(基本的には、選択を現在選択されているものに変更します)。これは実際には時間がかかる場合がありますが、実際のシナリオでは試したことはありません。


1

やってみました:

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

または

arcpy.RefreshActiveView() # Refreshes the map

または

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

これらのいずれかが機能すると思いますが、ArcMapで属性テーブルを手動で閉じてから、再度開いて編集内容を確認する必要があることもあります。テーブルを閉じたり開いたりすることがArcPyで実行できるかどうかはわかりませんが、それもオプションです。


ありがとう、コーディ、残念ながら、これは何も機能しません。属性テーブルを手動で閉じて開くとうまくいきますが、プログラムでそれを行うものを探しています。属性テーブルの開閉もPythonでは使用できません。
アレックステレシェンコフ

これらはいずれも、属性テーブルを更新するようには設計されていません。
レーダー

1

これは動作します:

    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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.