I have an mxd file with about 80 layers. Each layer has to be updated with a standard symbology and labeling. If I use the arcpy.ApplySymbologyFromLayer_management it only updates the symbology. I want to up update everything.
When I use the arcpy.mapping.UpdateLayer function it does exactly what I want. However it changes the layer name and the data source. I'm trying to run UpdateLayer and then change the name and datasource back.
Unfortunately when I run Layer.replaceDataSource for a layer it changes all the layers in the map.
This code is posted raw because I can't find the Code tag....
import arcpy, os
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")[0]
layers = arcpy.mapping.ListLayers(mxd)
# Master featureclass names
PolylineMaster = 'PolylineMaster'
PointMaster = 'PointMaster'
PolygonMaster = 'PolygonMaster'
# Run each of point, polyline or polygon
doPoint = False
doPolyline = True
doPolygon = False
if doPoint == True:
lyrPtMaster = arcpy.mapping.ListLayers(mxd,PointMaster,df)[0]
if doPolyline == True:
lyrLineMaster = arcpy.mapping.ListLayers(mxd,PolylineMaster,df)[0]
if doPolygon == True:
lyrPolyMaster = arcpy.mapping.ListLayers(mxd,PolygonMaster,df)[0]
for lyr in layers:
lyrName = lyr.name
if lyrName == PolylineMaster or lyrName == PointMaster or lyrName == PolygonMaster:
continue
else:
print(lyrName)
desc = arcpy.Describe(lyr)
#path = arcpy.Describe(lyr).catalogPath # Full path - doesn't work
path = arcpy.Describe(lyr).path # GDB path
print(path)
if desc.shapeType == "Point" and doPoint == True:
arcpy.mapping.UpdateLayer(df,lyr,lyrPtMaster,False)
elif desc.shapeType == "Polyline" and doPolyline == True:
arcpy.mapping.UpdateLayer(df,lyr,lyrLineMaster,False)
elif desc.shapeType == "Polygon" and doPolygon == True:
arcpy.mapping.UpdateLayer(df,lyr,lyrPolyMaster,False)
# Reset the data source and the layer name - both of which have been changed to the Master
lyr.replaceDataSource(path,'FILEGDB_WORKSPACE',lyrName,True)
print(lyrName)
lyr.name = lyrName
print(lyr.name)
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd
I am using ArcGIS 10.6
Can replaceDataSource be used to replace just one layer's data source?