Uso de Flow para copiar elementos entre dos orígenes de datos
En este artículo se describe cómo usar Microsoft Flow para copiar elementos entre dos orígenes de datos de forma eficaz.
Por ejemplo, puede crear un flujo para copiar todos los elementos de una lista de SharePoint en un sitio a un segundo sitio de SharePoint. El proceso de flujo también funciona entre una lista de SharePoint y una tabla SQL o cualquiera de los más de 100 servicios admitidos por Flow.
Se aplica a: Power Automate
Número de KB original: 4467880
Más información
Debe rellenar todas las columnas necesarias. No es necesario que los nombres de todas las columnas de los dos orígenes de datos sean los mismos, pero debe haber al menos una columna (de su elección) que pueda identificar de forma única los elementos entre los dos orígenes de datos.
En el ejemplo siguiente, se supone que la columna Title es la misma en ambos orígenes.
Configuración del desencadenador
El primer paso es configurar el desencadenador en la lista de SharePoint de origen. Dado que desea capturar todos los cambios de elemento (no solo elementos nuevos), debe seleccionar el desencadenador SharePoint - Cuando se modifica un elemento existente.
Nota:
Aunque el nombre del desencadenador menciona solo las modificaciones a los elementos existentes, el desencadenador también reacciona a los nuevos elementos que se agregan a la lista.
Buscar el elemento en el destino
Busque el elemento de la lista de destino para obtener su identificador y actualizarlo. Aunque Flow tiene una acción Filtro , no debe usar esa acción en este escenario porque esa acción descarga todos los elementos de lista de SharePoint. El proceso será lento, usará la cuota y no funcionará si la lista tiene más de 256 elementos.
En su lugar, debe usar el campo Consulta de filtro en el paso Obtener elementos en SharePoint. Agregue la acción Obtener elementos y seleccione Mostrar opciones avanzadas para mostrar todos los campos. Si coincide con los títulos de las filas de la lista de origen, escriba lo siguiente en el campo Consulta de filtro (asegúrese de incluir las comillas simples):
Título eq '[seleccionar el título del contenido dinámico]'
No tiene que tener necesariamente una asignación estricta de columnas de 1:1 entre los dos orígenes de datos. Por ejemplo, si tiene columnas Nombre y Apellidos en la lista de origen y una columna Nombre completo en la lista de destino, puede escribir FullName eq '[Nombre de pila] [Apellidos]' en el campo Nombre de lista.
Agregar una condición para comprobar si el elemento existe
Al obtener los elementos de la lista de destino, se cumple una de las siguientes situaciones:
- El elemento aún no existe en el destino, por lo que debe crearlo.
- El elemento ya existe en el destino y tiene que actualizarlo.
Use una condición para determinar la situación real. Para ello, siga estos pasos:
Haga clic en Nuevo paso y después en Agregar una condición.
En el cuadro de texto izquierdo de la tarjeta Condición , seleccione Agregar contenido dinámico.
Nota:
La colección que contiene la lista de todos los elementos devueltos por Get items se denomina value. Asegúrese de seleccionar el valor de Obtener elementos (no del desencadenador si se cambia un elemento existente).
En la tarjeta Condición , seleccione es igual a en el cuadro Relación y, a continuación, escriba 0 en el cuadro Valor .
Agregue la función length en modo avanzado. Esto es importante porque el contenido del valor dinámico devuelve la lista de elementos. Debe determinar si la longitud de la lista (no el valor) es igual a 0 (cero).
En el modo Avanzado, escriba length() alrededor del cuerpo('Get_items')?[' expresión value'] . La condición aparece de la manera siguiente.
Creación del elemento
En la rama IF YES, agregará un paso Crear elemento de SharePoint.
Seleccione el sitio y la lista que usó en los pasos Obtener elementos . En Crear elemento, debe rellenar cada columna mediante campos del desencadenador únicamente. No debe usar ningún dato de los pasos Obtener elementos porque provendría de la lista de destino, no de la lista de origen. Obtener elementos aparecerán encima del desencadenador. Asegúrese de desplazarse hasta la parte inferior para encontrarlo.
Actualizar el elemento
En la rama IF NO, agregará un paso de elemento de Actualización de SharePoint.
Seleccione el sitio y la lista. A continuación, seleccione el identificador que se devuelve en los pasos Obtener elementos .
Al agregar el identificador, se agrega automáticamente un valor Apply to each container (Aplicar a cada contenedor) alrededor del paso Actualizar elemento . Este es el comportamiento esperado. Si la consulta que usó en el paso Obtener elementos es precisa, el contenedor actualizará solo el elemento que desea copiar. Después de completar los campos restantes (y asegurarse de usar las salidas del desencadenador, no de la llamada Obtener elementos ), el bloque de condición debe ser similar a la captura de pantalla siguiente.
Limitaciones del proceso de flujo
El proceso de flujo permite que los cambios realizados en la primera lista se reflejen en la segunda lista.
Las siguientes limitaciones se aplican al proceso:
- Si los elementos se eliminan de la primera lista, los elementos no se eliminarán de la segunda lista. Esto se debe a que no hay ningún desencadenador para Cuando se elimina un elemento. En este caso, no hay forma de que se notifique un flujo cuando se produzca una eliminación. En su lugar, se recomienda agregar una columna para indicar que el elemento ya no es necesario o relevante en lugar de eliminar elementos de listas de SharePoint (o tablas SQL u otro origen de datos). Esa columna se sincronizará entre las dos listas.
- Si se realizan cambios en el campo que usa para mantener sincronizados los elementos entre las dos listas, se crea un nuevo elemento en la lista de destino. Por ejemplo, si usa la columna Nombre de una persona para copiar entre las dos listas y cambia la columna Nombre de esa persona, el flujo considera que el cambio es un nuevo elemento, no una actualización de un elemento existente. Si puede garantizar que la columna Nombre nunca cambiará, no se verá afectada por esta limitación. Sin embargo, si la columna Nombre cambia, debe agregar a la lista de destino una columna que almacena el identificador del elemento en la primera lista. En este caso, en lugar de usar Name para buscar elementos, puede usar id. (Se garantiza que el identificador siempre es único).
- Este proceso no es una sincronización bidireccional. Esto significa que si los elementos se actualizan en la lista de destino, los cambios no se reflejarán en la lista de origen. No debe intentar configurar la sincronización bidireccional en el flujo porque eso creará un bucle infinito sin modificaciones adicionales. Por ejemplo, la lista A actualizará la lista B, la lista B actualizará la lista A, la lista A volverá a actualizar la lista B, etc.