Seguro que si desarrollamos flujos con Microsoft Flow nos encontramos errores “inesperados” y que, por lo reciente del producto y su continua evolución, están poco o nada documentados. Pues bien, vamos a comentar a continuación un error que me ha traído de cabeza hasta encontrar una solución… y es el siguiente:

ESCENARIO:

Tenemos un flujo de Flow conectado con una biblioteca de documentos de SharePoint Online en el que realizamos una acción para obtener las propiedades de los documentos de la biblioteca (Get files properties only). El flujo funcionaba perfectamente, hasta que un día dejó de funcionar “inesperadamente” lanzando un Error 502: “BadGateway”!!!

ERROR:

Investigando en la respuesta del error comprobamos que el mensaje del mismo es más descriptivo:

“-2147024749”, “Microsoft.SharePoint.SPQueryThrottledException”

“The query cannot be completed because the number of lookup columns it contains exceeds the lookup column threshold enforced by the administrator”

O lo que es lo mismo en castellano:

“La consulta no se puede completar porque el número de columnas de búsqueda que contiene supera el umbral de columnas de búsqueda establecido por el administrador”

Ahora ya tenemos por donde seguir tirando del hilo, aunque comprobamos que la biblioteca tiene “aparentemente” las mismas columnas que otra similar que está funcionando bien. Decimos “aparentemente” porque a parte de las columnas que SharePoint trata como Lookups:

  • Columnas de búsqueda (lookup)
  • Managed metadata
  • People and groups

También cuentan las columnas que se generan automáticamente cada vez que creamos un nuevo Workflow desde SharePoint Desinger: las columnas del tipo  Workflow Status!

Hasta aquí todo correcto… no llegamos “aparentemente” al límite de 12 columnas de estos tipos pero… realmente sí lo sobrepasamos! ¿¿¿Comorrrrr???

Cada vez que se publica y ejecuta un flujo en SharePoint Designer, se crean estas columnas pero cuando eliminas este flujo, y más aún, si lo renombras y lo publicas de nuevo, se crea otra columna con el nuevo nombre pero… no elimina la columna anterior lo que nos deja columnas del tipo Workflow Status huérfanas y ocultas. Y de aquí viene el problema que nos devuelve Flow al intentar hacer la consulta. Además, al menos por ahora, no podemos seleccionar las propiedades que queremos que nos devuelva la acción Get File Properties, por lo que hace un Select All tratando de recuperar todas las columnas existentes y entonces si juntamos estas columnas… superamos dicho límite. Conclusión: Error 502: BadGateway.

SOLUCIÓN:

Para recuperar nuestro querido Flow y revivirlo necesitamos eliminar estas columnas ocultas y huérfanas ¿Cómo hacerlo? Con estos pasos:

  1. Si accedemos desde SharePoint Designer a la biblioteca y pulsamos la opción de “Mostrar columnas de sólo lectura” podemos ver todas estas columnas creadas en ejecuciones de flujos anteriores. También tenemos la opción de eliminar pero una vez guardamos los cambios… Error! No se pueden eliminar porque son columnas de “sólo lectura”.
  2. Para cambiar este atributo a FALSE, necesitamos hacerlo desde PowerShell. Para ello utilizamos el módulo de SharePoint Online SPOMod cmdlets que podemos descargar del siguiente enlace: SharePoint Module for managing lists, items and files
  3. Una vez descargado este modulo, tenemos que seguir los siguientes pasos antes de poder utilizarlo:
    1. Si no lo tenemos ya en nuestro equipo, instalarnos el SharePoint Online SDK.
    2. Buscar donde se han instalado las librerías “Microsoft.SharePoint.Client.dll” y copiarnos la ruta. En mi caso están en la siguiente ruta:
      • c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll
    3. Editar el fichero SPOModCURRENT.psm1 y reemplazar al final del mismo las rutas para que referencien a las librerías que hemos instalado:
      # Paths to SDK. Please verify location on your computer.
      Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" 
      Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" 
      Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll"
  4. Abrimos PowerShell y ejecutamos los siguientes comandos para modificar el atributo ReadOnlyField de las columnas que queremos borrar a FALSE. Habrá que repetirlo para cada columna a eliminar:
    Set-ExecutionPolicy unrestricted
    Import-Module .\SPOModCURRENT.psm1 -Verbose
    
    Connect-SPOCSOM -Username $username -Url $siteUrl
    
    #Get the information about the column with the below command:
    Get-spolistcolumn -ListTitle $listName -FieldTitle $columnName
    #Set the column to read only = false.
    Set-spolistcolumn -ListTitle $listName -FieldTitle $columnName -ReadOnlyField $false

     

  5. Accedemos de nuevo desde SharePoint Designer a la biblioteca y pulsamos la opción de “Mostrar columnas de sólo lectura“. Ahora veremos que las columnas que hemos modificado desde PowerShell ya se pueden eliminar puesto que no son de sólo lectura. Procedemos a eliminarlas y guardar los cambios en la lista:
  6. Una vez eliminadas estas columnas, probamos a ejecutar de nuevo nuestro Flow y FUNCIONA! Ya no sobrepasamos el límite de columnas de tipo búsqueda o lookup: