(Nivel Medio) Cómo saber si se ha modificado una columna en concreto de SharePoint en Power Automate

Hace unos días os contaba a todos los Power Users cómo saber si una columna en concreto de una lista o librería de SharePoint se había modificado. Era una versión totalmente #NoCode y podéis echarle un ojo aquí.

La solución en sí tenía un problema bastante importante: la duplicidad de la información y la doble modificación del elemento, doblando las ejecuciones del flujo en sí. Hoy, os traigo la opción con un poquito (no mucho) más de código. Aunque la haya nombrado "Nivel avanzado", simplemente trabaja con la API de SharePoint y poco más. Parece mentira que con las mejoras que se están haciendo en los triggers (o desencadenantes) de SharePoint en Power Automate, aún no podamos fijar condiciones sobre columnas modificadas, solo condiciones sobre "qué valores debe tener la columna".

Pero como siempre decimos, cuando una puerta se cierra, otra ventana se abre y hoy os vengo a mostrar cómo detectar cuando una columna en concreto de una lista o librería a un nivel #LessCode Justo este ejemplo también lo expliqué en la sesión de Power Platform Bootcamp Madrid, la sesión está colgada en youtube y si accedéis desde este enlace os llevará al momento justo donde lo explico.

Contexto: Tenemos una lista de Productos mantenida por un equipo de Marketing, necesitamos notificar al equipo de Diseño de IT SOLO cuando se modifique el nombre del producto. Si los otros campos se modifican, no debemos hacer nada.

Para empezar, debemos asegurarnos que nuestra lista tiene activado el versionado de elementos. La solución consiste en guardar dos versiones de cada elemento de la lista; cuando el elemento es modificado, accederemos a las versiones mediante la API y nos fijaremos en si el valor de la columna es distinto entre las versiones o no.
No necesitamos muchas versiones, solo guardar 2 versiones: la actual cuando el elemento es modificado y la anterior a ésta, para comprobar si la columna es diferente o no.

Accedemos a la lista -> Configuración de la lista. Una vez ahí vamos a configuración de versiones (Versioning settings) y fijamos como "2" el número de versiones y le damos a Aceptar:


Una vez tenemos la lista configurada (atención! Es recomendable configurarlo al crear la lista) la magia está en Power Automate. Así que creamos un flujo automático con el desencadenador (trigger) de SharePoint "Cuando se modifica un elemento". En principio no sería necesario tener en cuenta el caso "Cuando se CREA O modifica un elemento", puesto que no nos interesa avisar a Marketing cuando se da de alta al Producto, simplemente cuando se modifica el nombre del producto.

El siguiente paso es añadir una acción de llamada HTTP GET a la API de SharePoint. Necesitaremos utilizar la salida del desencadenador para obtener la ID del elemento que se ha modificado e introducirlo a la  URI de la petición:


Importante añadir el número de versiones que queremos traernos, es el número "2" al final de la URI. Obviamente ni guardamos más versiones, tal y como hemos configurado, ni necesitamos más para resolver este caso de uso.

Una vez obtenidas las versiones, con una acción de "Componer" podemos extraer fácilmente y únicamente la información que nos interesa de cada versión recuperada:


Principalmente necesitaremos la ID del elemento, el título (nombre) que tiene actualmente el producto (aquí podría tratarse de cualquier otro campos que nos gustaría analizar si ha cambiado o no) y por último el nombre de la versión.

¿Y ahora? Pues simplemente tenemos que comprobar si justamente en este cambio que ha realizar un usuario sobre el elemento, se ha modificado el nombre del producto o no. Si en ambas versiones el título es igual, es un caso que debemos ignorar.


Para crear la comparación, solo comentaros que la primera versión que tendremos siempre será la más "nueva", la última modificación, y segunda versión será la más "anterior". Para acceder a los valores simplemente debemos utilizar las funciones first/last sobre la función de Seleccionar.


¡Listos! Sin modificaciones extras al elemento, sin mucho código (debéis admitir que sin conocimientos de la API, con una simple llamada lo tenéis solucionado) y sin ejecuciones secundarias del flujo por rebote.
Obviamente este método tiene un gran problema: seguimos consumiendo recursos de ejecuciones de flujo en nuestra organización. Cada vez que hay una modificación en la lista, este flujo se ejecuta sí o sí. Esperemos que pronto nos ofrezcan (por fin) una solución nativa en el conector sin que impacte en nuestro consumo de Power Automate.

¿Tenéis alguna duda de Power Automate? No dudes en planteármela, puede convertirse en el siguiente artículo del blog.

6 Comentarios

  1. Buenos días, Mar,
    Lo primero, muchas gracias por tu ayuda.
    He intentado replicar el proceso en una lista que contiene elementos parecidos a los tuyos, pero en el paso de "Seleccionar" no me aparece como Contenido Dinamico el valor "Value", solo me aparece la opcion "Body" y me da un error.
    ¿Cual puede ser la causa?

    ResponderEliminar
  2. ¡Muchísimas gracias por tu comentario!
    La verdad es que son cosas de las que Power Automate puede volvernos a veces locos. La ides es que si incluimos correctamente los headers (el accept) en la acción de petición HTTP a Sharepoint, nos debería parecer automáticamente. Lo he probado hoy y parece que no ha querido funcionar.
    Mi solución? Añade una expresión. Haz click en el "desde" de la acción seleccionar, se abrirá el diálogo de selección y ahí eliges "expresiones"; en la fórmula inserta lo siguiente:
    body('Obtener_las_versiones_del_elemento')?['value']
    y haces click en el "ok".
    Importante: dentro de los '' debes poner el nombre de tu acción de petición HTTP (renómbrala a algo más corto) sustituyendo los espacios por _

    ¡me cuentas qué tal! Si no te sale, tienes mi correo mar.llambi@gmail.com y puedo darte soporte remoto.
    ¡Muchas gracias!

    ResponderEliminar
  3. hola Mar, he seguido todos los pasos, pero cuando debería hacer el filtro de comparacion de versiones, no identifica que hay un cambio.

    ResponderEliminar
  4. Hola Mar,

    Estoy intentando crear el flujo, pero me da el siguiente error en la acción de Seleccionar:
    'El valor de la propiedad "from" de las entradas de acción "select" es de tipo "Object". El valor debe ser una matriz.'

    No se muy bien a que se refiere, ¿podrías echarme una mano?

    Un saludo

    ResponderEliminar
  5. ¡Muchísimas gracias por tu comentario!
    Hola usuario desconocido :)
    Hay alguno de los campos que estás intentando obtener que es de tipo objeto, quizás algún campo compuesto nos está devolviendo un objeto?
    Si te parece siéntete libre de mandarme un correo mar.llambi@gmail.com y nos miramos el error con detalle.
    ¡Gracias!

    ResponderEliminar
  6. Hola Excelente post,
    con una duda, yo lo que quiero es comparar un campo de la lista de sharepoint versus un operacion de datos de un correo electronico que recibo para no volver a duplicar el mismo elemento, solamente la informacio´n que dice el cuerpo del mensaje ,
    Saludos

    ResponderEliminar