Condividi tramite


Come usare Flow per copiare elementi tra due origini dati

Questo articolo descrive come usare Microsoft Flow per copiare gli elementi tra due origini dati in modo efficiente.

Ad esempio, è possibile creare un flusso per copiare tutti gli elementi da un elenco di SharePoint in un sito in un secondo sito di SharePoint. Il processo di flusso funziona anche tra un elenco di SharePoint e una tabella SQL o uno dei più di 100 servizi supportati da Flow.

Si applica a: Power Automate
Numero KB originale: 4467880

Ulteriori informazioni

È necessario popolare tutte le colonne necessarie. Non è necessario che i nomi di tutte le colonne nelle due origini dati siano uguali, ma che sia presente almeno una colonna (scelta) che sarà in grado di identificare in modo univoco gli elementi tra le due origini dati.

Nell'esempio seguente si presuppone che la colonna Title sia la stessa in entrambe le origini.

Configurare il trigger

Il primo passaggio consiste nel configurare il trigger nell'elenco di SharePoint di origine. Poiché si desidera acquisire tutte le modifiche degli elementi (non solo nuovi elementi), è consigliabile selezionare il trigger SharePoint - Quando viene modificato un elemento esistente.

Screenshot per selezionare il trigger Quando un elemento esistente viene modificato in SharePoint.

Note

Anche se il nome del trigger include solo modifiche agli elementi esistenti, il trigger reagisce anche ai nuovi elementi aggiunti all'elenco.

Trovare l'elemento nella destinazione

Cercare l'elemento nell'elenco di destinazione per ottenere l'ID e aggiornarlo. Anche se Flow ha un'azione Filtro , non è consigliabile usare tale azione in questo scenario perché tale azione scarica tutti gli elementi dell'elenco da SharePoint. Il processo sarà lento, userà la quota e non funzionerà se l'elenco contiene più di 256 elementi.

È invece consigliabile usare il campo Filtro query nel passaggio Recupera elementi in SharePoint. Aggiungere l'azione Recupera elementi e quindi selezionare Mostra opzioni avanzate per visualizzare tutti i campi. Se si corrispondono ai titoli delle righe dell'elenco di origine, digitare quanto segue nel campo Query filtro (assicurarsi di includere le virgolette singole):

Titolo eq '[selezionare il titolo dal contenuto dinamico]'

Screenshot per digitare il titolo nel campo Query filtro nel passaggio Recupera elementi.

Non è necessario necessariamente disporre di un rigoroso mapping di colonne 1:1 tra le due origini dati. Ad esempio, se sono presenti colonne Nome e Cognome nell'elenco di origine e una colonna Nome completo nell'elenco di destinazione, è possibile digitare FullName eq '[Nome] [Cognome]' nel campo Nome elenco.

Aggiungere una condizione per verificare se l'elemento esiste

Quando si ottengono gli elementi dall'elenco di destinazione, una delle situazioni seguenti sarà vera:

  • L'elemento non esiste ancora nella destinazione, quindi è necessario crearlo.
  • L'elemento esiste già nella destinazione ed è necessario aggiornarlo.

Usare una condizione per determinare la situazione effettiva. A tale scopo, effettuare i passaggi seguenti:

  1. Selezionare Nuovo passaggio e quindi Aggiungi una condizione.

  2. Nella casella di testo a sinistra della scheda Condizione selezionare Aggiungi contenuto dinamico.

    Note

    La raccolta che contiene l'elenco di tutti gli elementi restituiti da Get items è denominata value. Assicurarsi di selezionare il valore da Recupera elementi (non dal trigger se viene modificato un elemento esistente).

    Screenshot che mostra che una raccolta di valori è elencata in Recupera elementi durante l'aggiunta di una condizione.

  3. Nella scheda Condizione selezionare è uguale a nella casella Relazione e quindi digitare 0 nella casella Valore.

  4. Aggiungere la funzione length in modalità Avanzata. Questo aspetto è importante perché il contenuto del valore dinamico restituisce l'elenco di elementi. È necessario determinare se la lunghezza dell'elenco (non il valore) è uguale a 0 (zero).

  5. In modalità Avanzata digitare length() intorno al corpo('Get_items')?[' espressione value'] . La condizione viene visualizzata nel modo seguente.

    Screenshot della casella Condizione che mostra la lunghezza dell'elenco uguale a 0.

Creare l'elemento

Nel ramo IF YES si aggiungerà un passaggio Crea elemento di SharePoint.

Selezionare il sito e l'elenco usati nei passaggi Ottieni elementi . In Crea elemento è necessario popolare ogni colonna usando solo i campi del trigger. Non è consigliabile usare dati dalla procedura Recupera elementi perché proviene dall'elenco di destinazione, non dall'elenco di origine. Ottenere gli elementi verranno visualizzati sopra il trigger. Assicurarsi di scorrere fino alla fine per trovarla.

Aggiornare l'elemento

Nel ramo IF NO si aggiungerà un passaggio dell'elemento di aggiornamento di SharePoint.

Selezionare il sito e l'elenco. Selezionare quindi l'ID restituito dalla procedura Recupera elementi .

Screenshot per selezionare l'ID restituito dai passaggi Ottieni elementi.

Quando si aggiunge l'ID, viene aggiunto automaticamente un elemento Apply to each container (Applica a ogni contenitore) intorno al passaggio Aggiorna elemento . Si tratta di un comportamento previsto. Se la query usata nel passaggio Recupera elementi è accurata, il contenitore aggiornerà solo l'elemento che si desidera copiare. Dopo aver completato i campi rimanenti (e assicurarsi di usare gli output del trigger, non dalla chiamata Get items ), il blocco di condizioni dovrebbe essere simile allo screenshot seguente.

Screenshot che mostra un esempio del blocco di condizioni.

Limitazioni del processo di flusso

Il processo di flusso consente di riflettere le modifiche apportate nel primo elenco nel secondo elenco.

Le limitazioni seguenti si applicano al processo:

  • Se gli elementi vengono eliminati dal primo elenco, gli elementi non verranno eliminati dal secondo elenco. Ciò è dovuto al fatto che non esiste alcun trigger per Quando viene eliminato un elemento. In questo caso, non è possibile notificare a un flusso quando si verifica un'eliminazione. È invece consigliabile aggiungere una colonna per indicare che l'elemento non è più necessario o pertinente anziché eliminare elementi da elenchi di SharePoint (o tabelle SQL o altre origini dati). Tale colonna verrà sincronizzata tra i due elenchi.
  • Se vengono apportate modifiche al campo usato per mantenere sincronizzati gli elementi tra i due elenchi, viene creato un nuovo elemento nell'elenco di destinazione. Ad esempio, se si usa la colonna Name di una persona per copiare tra i due elenchi e la colonna Name di tale persona cambia, il flusso considera tale modifica come un nuovo elemento, non un aggiornamento a un elemento esistente. Se è possibile garantire che la colonna Name non cambierà mai, non sarà interessata da questa limitazione. Tuttavia, se la colonna Name viene modificata, è necessario aggiungere all'elenco di destinazione una colonna che archivia l'ID dell'elemento nel primo elenco. In questo caso, invece di usare Name per trovare gli elementi, è possibile usare l'ID. L'ID è sempre univoco.
  • Questo processo non è una sincronizzazione bidirezionale. Ciò significa che se gli elementi vengono aggiornati nell'elenco di destinazione, le modifiche non verranno riflesse nell'elenco di origine. Non è consigliabile provare a configurare la sincronizzazione bidirezionale nel flusso perché creerà un ciclo infinito senza modifiche aggiuntive. Ad esempio, l'elenco A aggiornerà l'elenco B, l'elenco B aggiornerà l'elenco A, l'elenco A aggiornerà nuovamente l'elenco B e così via.