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 de 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 quiere capturar todos los cambios de elementos (no solo los nuevos), debe seleccionar el desencadenador SharePoint : cuando se modifica un elemento existente .

Captura de pantalla para seleccionar el desencadenador Cuando se modifica un elemento existente en SharePoint.

Nota:

Aunque el nombre del desencadenador solo menciona modificaciones en 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 Filtrar , 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 Filtrar consulta en el paso Obtener elementos de SharePoint. Agregue la acción Obtener elementos y, a continuación, 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):

Title eq '[seleccionar el título del contenido dinámico]'

Captura de pantalla para escribir el título en el campo Consulta de filtro en el paso Obtener elementos.

No es necesario tener una asignación estricta de columnas 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] [Apellido]' en el campo Nombre de lista.

Agregar una condición para comprobar si el elemento existe

Cuando se obtienen los elementos de la lista de destino, se cumplirá una de las situaciones siguientes:

  • El elemento aún no existe en el destino, por lo que tiene que 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:

  1. Seleccione Nuevo paso y, después, Agregar una condición.

  2. 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 tiene el nombre value. Asegúrese de seleccionar el valor de Obtener elementos (no del desencadenador si se cambia un elemento existente).

    Captura de pantalla que muestra que una colección de valores aparece en Obtener elementos al agregar una condición.

  3. En la tarjeta Condición , seleccione es igual a en el cuadro Relación y escriba 0 en el cuadro Valor .

  4. Agregue la función de longitud 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).

  5. En modo avanzado, escriba length() alrededor del cuerpo('Get_items')?[' value'] expresión. La condición aparece como sigue.

    Captura de pantalla del cuadro Condición que muestra que la longitud de la lista es igual a 0.

Crear el 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 usando solo campos del desencadenador. No debe usar ningún dato de los pasos Obtener elementos porque procedería de la lista de destino, no de la lista de origen. Los elementos Get aparecerán encima del desencadenador. Asegúrese de desplazarse hasta la parte inferior para encontrarla.

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 .

Captura de pantalla para seleccionar el identificador que se devuelve en los pasos Obtener elementos.

Al agregar el identificador, se agrega automáticamente un elemento 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 a Obtener elementos ), el bloque de condición debe ser similar a la siguiente captura de pantalla.

Captura de pantalla que muestra un ejemplo del bloque de condición.

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 limitaciones siguientes 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 ninguna manera de que se notifique a un flujo cuando se produce 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 los elementos sincronizados 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á afectado por esta limitación. Sin embargo, si la columna Nombre cambia, debe agregar a la lista de destino una columna que almacene el identificador del elemento en la primera lista. En este caso, en lugar de usar Nombre 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 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 actualizará la lista B de nuevo, etc.