Los que venimos del mundo de Dynamics nos hemos pegado mas de una y mas de dos veces a la hora de procesar grandes cantidades de registros de una tabla de Dataverse. La plataforma presenta ciertos límites para asegurar que los recursos no se colapsen y puedan rendir de forma óptima para todos los usuarios y servicios independientemente de las operaciones que estos realicen.
En este post vamos a ver como iterar desde Power Automate los registros de una tabla de Dataverse cuando los registros sobre los que tenemos que trabajar son mas de 5.000. Lo que vamos a ver hoy aquí no es la única forma de procesar grandes volúmenes de registros ya que podríamos hacerlo tambien utilizando las Paging Cookies de los FetchXml.
Llegados a este punto vamos a procesar los datos utilizando la paginación propia de Dataverse. Aunque también podríamos procesar los datos usando la paginación de Power Automate, activando la opción Paginación en la Configuración de la acción que queramos paginar. Para esta segunda opción debes tener en cuenta los propios límites de Power Automate según la licencia del owner del flujo. Puedes consultar estos límites aquí.
Como decía, hoy vamos a procesar los resultados con la paginación propia de Dataverse. Vamos a partir de una tabla que almacena Aplicaciones que como puedes ver a través de una búsqueda avanzada, la plataforma nos indica que tiene más de 6.100 registros:
Por otro lado, disponemos de un flujo Power Automate que consulta esta tabla sin ningún tipo de filtro ni configuración adicional. Posteriormente a la consulta de la tabla lo único que hacemos es obtener la longitud del array de items obtenidos para chequear los registros que devuelve la consulta.
Si ejecuto el flujo de la imagen anterior, efectivamente obtenemos los primeros 5.000 registros por lo que llegados aquí... ¿Cómo procesamos el resto de los registros?
Fácil y sencillo. Si has trabajado con la API de Microsoft Graph estarás familiarizado también con los famosos nextLink de las respuestas que devuelve esa API. Nosotros vamos a utilizar lo mismo aunque como siempre aquí te dejo la documentación oficial. Manos a la obra.
Lo único que tenemos que hacer es obtener el valor de la propiedad nextLink (asegúrate de tener la paginación de Power Automate desactivada o de lo contrario esta propiedad no aparecerá en el body de la response), extraer de ella el valor del parámetro skipToken y volver a llamar a Dataverse utilizando este último parámetro. Para ello vamos a hacer uso de dos variables nuevas donde almacenar esta información. Nada nuevo.
Una vez tenemos las variables inicializadas, vamos a dar forma a un bucle que se va a ejecutar hasta que la propiedad nextLink sea nula. Dentro de ese bucle lo único que tenemos que hacer es establecer el valor de skipToken y volver a invocar a Dataverse pasándole ese valor. La fórmula que estoy utilizando para extraer el skipToken tiene el siguiente aspecto:
decodeUriComponent(last(split(uriQuery(variables('nextLink')), 'skiptoken=')))
Finalmente el bucle resultante es muy sencillo:
Lo único que nos quedaría ahora es procesar los registros obtenidos en cada lote, para lo que te recomiendo la creación de otro flujo de Power Automate que actúe como child flow de este flujo. No olvides que la API de Dataverse también presenta sus limitaciones que nunca puedes perder de vista y que puedes consultar aquí.
Espero que esta publicación sirva de ayuda. ¡Nos vemos en la siguiente!
Comments