MXDの各ArcSDEレイヤーのサーバー/サービスを完全に置換/更新しますか?


8

mxd.findAndReplaceWorkspacePathsメソッドを使用すると、MXDが更新され、.sde接続ファイルが再び移動するパスが、すべてのデータソースが再び機能しなくなります。

MXDの目次の各SDEレイヤーを永続的に更新して、SDEサーバーとサービスを永続的に保存する方法はありますか?つまり。PyhtonでpythonまたはArcObjectsを使用して、MXDの各SDEレイヤーのサーバーとインスタンスを置き換えるだけですか?


私の知る限り、Arcmapは常に接続ファイルへのパス(例:)を使用します"Database Connections\Connection to Foobar.sde"。サーバーとサービスの情報を直接渡すか、直接保存する方法はありません。私はされるだろう喜んで間違って証明すること。動的に生成されたsdeファイルをmxdと同じディレクトリ、またはおそらくmxd内に格納するハックを想像して、代わりにそれを参照することができます。しかし、それを実装する方法がわかりません。
マットウィルキー

1
@マット、それは完全に正しいとは思いません。ArcMapは、レイヤー内に保持されている接続プロパティを使用します。SDE接続ファイルは二度と参照されません。そのパスはメタデータのみです。ここでの問題は、arcpyデータソースの置換方法に固有のようです。ArcObjectsで接続ファイルを使用せずに(たとえば、IWorkspaceNameインターフェイスを使用して)接続プロパティを確実に設定できます。ただし、arcpyでは、提供されるメソッドに制限されます。
blah238

@matt正解です。私はArcpyメソッドを使用しています。各レイヤーの接続プロパティを「保存」できません。mxd.save後の接続ファイルが残っパスから接続プロパティを取得するための依存()またはmxd.saveACopy()
MMV

回答:


7

ArcPyと次の方法を使用して、.sde接続ファイルへのパスへの依存を解消する解決策を見つけました。

このように動作します:

lyr.replaceDataSource(sdeConn, "SDE_WORKSPACE", lyr.datasetName, False)
table.replaceDataSource(sdeConn, "SDE_WORKSPACE", lyr.datasetName, False)

MXDを修復して保存した後で、接続ファイルの名前を変更または削除できます。接続ファイルがなくなった後も問題なく開き続けます。

これらの方法は機能しません。

mxd.findAndReplaceWorkspacePaths
lyr.findAndReplaceWorkspacePath

MXDの修復後は、接続ファイルの名前を変更したり削除したりすることはできません。MXDは、開かれるたびに同じ場所で.sde接続ファイルを探します。


lyr.replaceDataSourceを使用していますが、「!」が表示されているため、arcmapが新しいデータソースを検出できないようです。レイヤーの前にあるので、手動でデータソースを修復する必要があります。ここに私のコードは次のとおりです。
Smalis

arcpyをインポートします。mxd = arcpy.mapping.MapDocument(r "C:\ Users \ SMALIS \ Documents \ ArcGIS \ pythonSwitchSource.mxd"); arcpy.mapping.ListLayers(mxd)のlyrの場合:lyr.supports( "DATASOURCE")の場合:lyr.replaceDataSource( "C:\ Users \ SMALIS \ AppData \ Roaming \ ESRI \ Desktop10.2 \ ArcCatalog \ DB1.sde" 、「SDE_WORKSPACE」、lyr.datasetName、False)mxd.saveACopy(r "C:\ Users \ SMALIS \ Documents \ ArcGIS \ 1.mxd"); デルmxd;
Smalis 2014年

機能しないフィーチャデータセットの方法で失敗した試行回数を大幅に節約できた方法についてのコメント これは私にとってもうまくいかなかったことに同意します、それはバグですか?lyr.workspacePathは特徴データセットを示しています
woodwa

1

ネストされたグループレイヤーをウォークarcpy.CreateArcSDEConnectionFile_managementしてlyr.serviceProperties、からパラメーターを使用して新しいsdeを作成し、パラメーターをまたはとして渡すservProp.get必要がありarcpy.GetParameterAsText(0)ます。

使用することを忘れないでくださいos.remove(temp_sde) if os.path.exsists(temp_sde) else None

for maplayer in lyr_list:
    walknestedgroups(maplayer)
    servProp = maplayer.serviceProperties
    if maplayer.serviceProperties["ServiceType"] == "SDE":
        host = servProp.get('Server','N\A')
    if host in ("MyServer"):
        remap_sde(maplayer)

0

これは単純すぎるかもしれませんが...
古い接続の名前を変更して新しい接続に古い名前を付けると、より良い結果が得られますか?


MXDのすべてのレイヤーを再度ポイントして、「\\ corpshare \ sde \ corpsde.sde」にある接続ファイルを使用すると、すべてがうまく機能します。ただし、そのパスが利用できなくなると、すべてのMXDが壊れます。パスよりも、接続ファイル内の接続プロパティSERVERおよびSERVICEに関心があります。基本的に各レイヤーのサーバーとサービスを更新したいので、そのパスが利用できなくなってもMXDは有効な接続ファイルへのパスがなくてもサーバーにアクセスできます。
MMV 2012

@MMV、よろしいですか?私は試してみました:1)SDE接続ファイルを使用してマップにレイヤーを追加します2)MXDを保存してArcMapを閉じます3)SDE接続ファイルを削除/名前変更します4)保存したMXDを開きます。レイヤーは問題なく読み込まれます。
blah238

@ Blah238正しいこれを見たことがある-sdeファイルがなくなってもそれはまだ接続する??? 私が思ったのは、sdeファイルの接続プロパティを変更した場合(別のサーバー/サービスを指すようにそれを見つけることです)(最初にリンクを開いて解除しない限り、私はそれを試してみます)そして取り戻す。
ブラッドNesom

上のblah238の投稿を読んでください。知らなかった。以前にパスワードの問題があり、接続文字列を変更することで修正したためです。多分トリックはそれを壊して新しい接続文字列でそれを修復することです。しかし、それを破るには、既存のサービスを停止する必要があります。??
Brad Nesom 2012

@ blah238 ArcMapでMXDを手動で作成し、保存して接続ファイルを削除すると、.sdeファイルへのパスが「壊れた」後もすべてが引き続き機能します。ArcPyを使用して既存のMXDを更新すると、接続ファイルへのパスへの依存が残ります。
MMV 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.