skuero

Problemas con saveACopy  y replaceDataSource

Discussion created by skuero on Jul 3, 2013
Latest reply on Jul 8, 2013 by skuero
Hola,
tengo un para de problemas en un código que estoy realizando.
Resulta que quiero realizar el cambio de todas las capas de un mxd que está apuntando a una base de datos local por una conexión sde.
El código lo he simplificado pero quedaría algo así:


def change_layers(self, path_mxd):
        arcpy.env.overwriteOutput = True
       
        conex_sde  = self.gst_entorno.get_path_file_sde()
        mxd            = self.map_document(path_mxd)
       
        for df in arcpy.mapping.ListDataFrames(mxd):
            mxd.activeView = df.name
            self.__manage_layers(mxd, df, conex_sde)
           
            del df

       mxd.saveACopy(r'c:\temp\sde_mxd.mxd')

def __manage_layers(self, mxd, df, conex_sde):
        lyrs     = arcpy.mapping.ListLayers(mxd, '', df)                              
        for i in range (0, len(lyrs)):
          
            i_ly      = lyrs[i]
            i_ly_name = i_ly.name          
            if i_ly.isFeatureLayer:
                self.__change_feature(i_ly, conex_sde)
           
            del i_ly
       
        del lyrs
       
        return True

def __change_feature(self, ly_feature, conex_sde):
        table_name = ly_feature.datasetName           
        ly_feature.replaceDataSource(conex_sde, "SDE_WORKSPACE", table_name, False)       
       
        return True


tengo dos problemas.
1) al realizar el saveACopy, cuando el número de capas a cambiar es alto me da un error:

MapDocObject: Unable to save.  Check to make sure you have write access to the specified file and that there is enough space on the storage device to hold your document.

Tengo la sensación que no acaba de realizar el copy del mxd cuando intenta ponerse en escritura sobre el mismo, dando el error que indico, que es el mismo que si tuviera el mxd abierto y lo intentase modificar.

2) Al realizar el replaceDataSource tarda bastante, y si el número de capas es alto, algo que puede ser habitual, el coste en tiempo es muy algo. Se os ocurre alguna forma para poder optimizarlo?

Gracias por adelantado.

Outcomes