Usando o método mxd.findAndReplaceWorkspacePaths, se MXD for atualizado e o caminho em que o arquivo de conexão .sde for movido novamente, todas as fontes de dados serão interrompidas novamente.
Existe um método para atualizar permanentemente cada camada SDE em um Sumário MXD para armazenar permanentemente o Servidor e Serviço SDE? Ou seja. Apenas substitua o SERVER e INSTANCE para cada camada SDE em um MXD usando python ou ArcObjects em Pyhton?
"Database Connections\Connection to Foobar.sde"
, e não há como simplesmente passar ou salvar as informações de SERVIDOR e SERVIÇO diretamente. Eu ficaria encantado em provar que estou errado. Eu posso imaginar um hack para armazenar um arquivo sde gerado dinamicamente no mesmo diretório que o mxd, ou até mesmo dentro do mxd, e depois referir a ele; embora não saiba como implementá-lo.Respostas:
Eu encontrei uma solução para quebrar a dependência do caminho para o arquivo de conexão .sde usando o ArcPy e o método a seguir.
Funciona assim:
Você pode renomear ou excluir o arquivo de conexão após o MXD ser reparado e salvo. Ele continuará sendo aberto sem problemas depois que o arquivo de conexão não estiver mais lá.
Estes métodos NÃO funcionam:
Você NÃO PODE renomear ou excluir o arquivo de conexão após o reparo do MXD. O MXD procurará o arquivo de conexão .sde sempre no mesmo local sempre que for aberto.
fonte
Você precisa percorrer as camadas do grupo aninhado e usá-lo
arcpy.CreateArcSDEConnectionFile_management
para criar novos sde usando parâmetros delyr.serviceProperties
e passar parâmetros comoservProp.get
ouarcpy.GetParameterAsText(0)
.Não se esqueça de usar
os.remove(temp_sde) if os.path.exsists(temp_sde) else None
.fonte
Isso pode ser muito simples, mas ...
Se você renomear a conexão antiga e nomear a nova com o nome antigo, isso obtém um resultado melhor?
fonte