AnsweredAssumed Answered

arcpy - how to change data source of an annotation feature class?

Question asked by yguan13 on Mar 9, 2015

I have a layer file which has a group layer. The group layer has two sub layers, one is a normal SDE feature class, the other is a SDE annotation feature class. My intention is to change the data source of both feature class layers. I have no problem using arcpy to change the data source for the normal feature class, but arcpy treats the annotation class as a group layer, and I am not able to see or change its data source. I am using ArcgIS 10.0. The follow code always gives :"can not describe ... layername" on the annotation layer on desc = arcpy.Describe(lyr).

 

lyrfile = r"C:\Users\guana\AGS100LayerFiles\Lease_License\Non Nexen Lease - Lexco.lyr"
target_wspace = r"L:\GIS\GIS_Services\sso@usqa06.sde"
# where to save the layer files
savedir = r"C:\Users\guana\AGS100LayerFiles\SSO_QA\Lease_License"

layer = arcpy.mapping.Layer(lyrfile)

for lyr in arcpy.mapping.ListLayers(layer):

    hasDataSource = False

    if not lyr.isGroupLayer:

        print "Normal layer %s" % (lyr.longName)

        if lyr.supports("DATASOURCE"):
            hasDataSource = True
            #print lyr.dataSource
            dest_fname = os.path.join(savedir, lyr.longName)
    else:
        print "%s is a group layer " % (lyr.name)
        dest_fname = os.path.join(savedir, lyr.name)
        # see it is an annotation featuer class
        try:
            desc = arcpy.Describe(lyr)
            if desc.dataElement.dataType == "FeatureClass":
                if (desc.featureType in ["Annotation","CoverageAnnotation"]):
                    print "%s is an annotation layer: dataSource = %s" % (lyr.name, lyr.dataSource)
                    hasDataSource = True

        except:
            print "can not describe " + lyr.name

 

Running this on the annotation feature class always fails:

 

lyr.replaceDataSource(target_wspace, 'SDE_WORKSPACE', lyr.datasetName, True)

 

Any help is greatly  apprciated.

Outcomes