Intente, Tony, nada hace nada.
Primer ejemplo:
import arcpy
import os
# Set your paths
project_path = r"D:\Repo\VRed\main\project\Scripts\Publicar\MiniTest.aprx" # Or full path to your APRX file
project_path_new=r"D:\Repo\VRed\main\project\Scripts\Publicar\MiniTestNew.aprx"
old_gdb = r"D:\Repo\VRed\main\project\Conexiones\SDE@MUGISD.sde"
new_gdb = r"D:\Repo\VRed\main\project\Conexiones\SDE@GISTECOD.sde"
# Open the ArcGIS project
aprx = arcpy.mp.ArcGISProject(project_path)
nroLys=0
# Iterate through each map in the project
for m in aprx.listMaps():
for l in m.listLayers():
nroLys=nroLys+1
print("layers nro=" + str(nroLys))
if l.supports("CONNECTIONPROPERTIES"):
try:
# Get the current connection properties
conProp = l.connectionProperties
# Check if the layer is connected Oracle SDE connections
if conProp['connection_info'].get('dbclient') == 'oracle':
instance = conProp['connection_info'].get('instance', '')
print(f"Layer: {l.name}, Oracle Instance: {instance}")
if "MUGISD" in instance.upper():
print(f"Updating Oracle connection for layer: {l.name}")
conProp['connection_info']['instance'] = instance.replace("MUGISD", "GISTECOD")
print("old=" + str(l.connectionProperties['connection_info']['instance']))
result=l.updateConnectionProperties(l.connectionProperties, conProp)
conProp = l.connectionProperties
print("new=" + str(l.connectionProperties['connection_info']['instance']))
print(result)
else:
print(f"Layer {l.name} has unsupported connection type. Skipping...")
except Exception as e:
print(f"Error with layer {l.name}: {str(e)}")
# Save the updated project
aprx.saveACopy(project_path_new)
print("Update complete.")
SALIDA
C:\Users\u194934>"C:\Program Files\ArcGIS\Pro\bin\Python\Scripts\propy.bat" D:\Repo\VRed\main\project\Scripts\Publicar\CS2.py
layers nro=1
Layer: SDE.VIS_FC_EQ_HFC_LINEQ_V, Oracle Instance: sde:oracle$192.168.244.71:1529/MUGISD
Updating Oracle connection for layer: SDE.VIS_FC_EQ_HFC_LINEQ_V
old=sde:oracle$192.168.244.71:1529/MUGISD
new=sde:oracle$192.168.244.71:1529/MUGISD
None
Update complete.
Luego, lo simplifique, y tampoco nada graba, nada escribe en el aprx, ni da error.
import arcpy
import os
# Set your paths
project_path = r"D:\Repo\VRed\main\project\Scripts\Publicar\MiniTest.aprx" # Or full path to your APRX file
project_path_new=r"D:\Repo\VRed\main\project\Scripts\Publicar\MiniTestNew.aprx"
old_conex = {'connection_info': {'authentication_mode': 'DBMS', 'dbclient': 'oracle', 'db_connection_properties': '192.168.244.71:1529/MUGISD', 'password': '<*********>', 'instance': 'sde:oracle$192.168.244.71:1529/MUGISD', 'server': '192.168.244.71', 'user': 'SDE', 'version': 'SDE.DEFAULT'}}
new_conex = {'connection_info': {'authentication_mode': 'DBMS', 'dbclient': 'oracle', 'db_connection_properties': '192.168.244.77:1528/GISTECOD', 'password': '<*********>', 'instance': 'sde:oracle$192.168.244.77:1528/GISTECOD', 'server': '192.168.244.77', 'user': 'SDE', 'version': 'SDE.DEFAULT'}}
# Open the ArcGIS project
aprx = arcpy.mp.ArcGISProject(project_path)
aprx.updateConnectionProperties(old_conex,new_conex)
nroLys=0
# Iterate through each map in the project
for m in aprx.listMaps():
for l in m.listLayers():
nroLys=nroLys+1
print("layers nro=" + str(nroLys))
if l.supports("CONNECTIONPROPERTIES"):
print("old=" + str(l.connectionProperties['connection_info']['instance']))
result=l.updateConnectionProperties(old_conex, new_conex)
print(f"Updating Oracle connection for layer: {l.name}")
print("new=" + str(l.connectionProperties['connection_info']['instance']))
print(result)
else:
print(f"Layer {l.name} has unsupported connection type. Skipping...")
# Save the updated project
aprx.saveACopy(project_path_new)
print("Update complete.")
SALIDA
C:\Users\u194934>"C:\Program Files\ArcGIS\Pro\bin\Python\Scripts\propy.bat" D:\Repo\VRed\main\project\Scripts\Publicar\CS3.py
layers nro=1
old=sde:oracle$192.168.244.71:1529/MUGISD
Updating Oracle connection for layer: SDE.VIS_FC_EQ_HFC_LINEQ_V
new=sde:oracle$192.168.244.71:1529/MUGISD
None
Update complete.
Arcgis Pro 3.1.6 , Arcgis Server 11.1.0