Al intentar actualizar en bloque clases de características versionadas que contienen más de 30.000 registros, se produce un problema debido a que el proceso Reconciliar/Contabilizar tarda demasiado y termina con un aviso que indica que la versión de destino ha cambiado y que el usuario debe Reconciliar y Contabilizar de nuevo (y todo el proceso se repite).
He intentado escribir un pequeño script que creará subconjuntos (que contienen unos 5000 registros) de mi selección original y ejecutará las funciones Calcular campo, Reconciliar y Contabilizar en cada subconjunto en lugar de en toda la selección.
Puedo obtener la lista de ObjectIDs de toda la selección original utilizando desc.FIDSet
Sin embargo, toda la documentación indica que FIDSet es de sólo lectura. En la secuencia de comandos he generado una consulta de selección para utilizarla en la función SelectLayerByAttribute
pero me gustaría saber si hay alguna forma de recrear simplemente el FIDSet (o un término alternativo si no es FIDSet) en lugar de pasar por la consulta Select.
¿O hay una forma mejor de conseguir lo que intento?
desc = arcpy.Describe(FeatureLayer) # Enables listing selected records by ObjectID through FIDSet
if desc.FIDSet != '': # Check if there are selected records
FullSel = desc.FIDSet.split(";") # Create list of ObjectIDs of selected records
print "Number of selected features: {}".format(len(desc.FIDSet.split(";")))
while FullSel: # Keep going while there are still records to process
SubsetSel = [] # Create SubsetSel list for groups of selected features
for Sel in FullSel:
if len(SubsetSel) < MaxLoopFeatures: # SubsetSel list will only have maximum number of features from MaxLoopFeatures
SubsetSel.append(Sel)
##======================================
## Is there a better way to do this??
##======================================
query = 'OBJECTID IN (' + ','.join(map(str, SubsetSel)) + ')' # Create query for SelectlayerByAttribute to reselect features using SubsetSel
##print query
arcpy.SelectLayerByAttribute_management(FeatureLayer, "NEW_SELECTION", query) # Reselect features
##======================================
##======================================
desc2 = arcpy.Describe(FeatureLayer)
print "Selection Set: {}".format(desc2.FIDSet)
print "Number of selected features: {}".format(len(desc2.FIDSet.split(";")))
# Run intended process here
#arcpy.CalculateField_management()
#arcpy.ReconcileVersion_management()
FullSel = [x for x in FullSel if x not in SubsetSel] # Remove processed features from FullSel and repeat on remaining features
else:
print "Nothing Selected"