Gonzalo Rementeria

20 Mejorando nuestros Power Automates usando las funciones Batch de la API de DV parte2

 

 En el anterior artículo expliqué

como crear registros en DV de manera mucho más y eficiente optima de 500 en
500   usando su API. Si no lo has visto
te recomiendo primero verlo, ya que este artículo es la segunda parte pinchando en este botón

 

Ahora vamos a ver como mejorarlo

con la parte que nos faltaba, dividir los registros que nos llegasen, sean
1000, 5000, 30K o los que sean en esos bloques de 500 para poder usarlos como
vimos ¿Cómo haremos esto? Con un bucle y usando las funciones Take Y Skip.

Así qué lo primero es que hacen
estas funciones, pues como su nombre indica Take toma registros y Skip se los
salta. Veámoslo gráficamente.

Imaginemos que usamos esta
expresión y que “body(‘Obtener_entidades_(V2)’)[ ‘Value’]” nos devuelve 10K
registros.

				
					take(skip(body('Obtener_entidades_(V2)')['Value'],1500,500)
				
			

esto significa que saltamos 1500
registros y luego tomamos hasta 500 (si hay menos pues toma los que haya)


Si fuese al revés

 

				
					take(skip(body('Obtener_entidades_(V2)')['Value'],500,1500)
				
			

esto significa que saltamos 500 registros
y luego tomamos 1500.

O si ponemos esto

				
					take(skip(body('Obtener_entidades_(V2)')['Value'],5000,500)
				
			

significa que saltamos 5000 y luego tomamos 1000

Si hubiese menos de los registros que estemos tomando, se tomarán todos. Una vez entendido esto pasemos a explicar el bucle.

 

Como vemos en la siguiente imagen, no hemos hecho más que coger lo explicado en el anterior POST y envolverlo con un bucle, que se repetirá hasta que no queden más registros.

La condición del bucle es la siguiente (ver en modo avanzado)

				
					@greaterOrEquals(mul(variables('vueltasDadas'), outputs('settings')['BatchSize'])
				
			

Que significa que se repetirá mientras VueltasDadas multiplicado por el tamaño de los paquetes que hagamos, en este caso 500 sea mayor o igual que los registros totales que tenemos.

Después en la parte donde mapeamos los campos usaremos la siguiente expresión para en cada vuelta coger los 500 registros que nos interesen.

				
					take(skip(body('Obtener_entidades_(V2)')['Value'],mul(variables('vueltasDadas'),outputs('settings')['BatchSize'])),outputs('settings')['BatchSize'])
				
			

Y al final de cada vuelta del bucle añadiremos 1 a la variable VueltasDadas. De esta manera en la primera vuelta tomaremos los primeros 500 registros, luego los registros del 500 al 1000, luego del 1000 al 1500. Y así hasta que no queden más registros.

 

La cajita Result es opcional, pero no es más que un redactar donde vemos los resultados de la llamada HTTP, ya que al ser tantos registros puede ser que por fallo de Datos (por ejemplo, por pasar el límite de caracteres de un campo, o por contener símbolos extraños, etc) no todos se ejecuten correctamente. Y es importante controlar también esto. Aunque para no alargar el artículo lo dejaré aquí.

Espero que os sea de utilidad. Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *