如何使用 Flow 在兩個數據源之間複製專案

本文說明如何使用 Microsoft Flow 有效率地在兩個數據源之間複製專案。

例如,您可以建置流程,將 SharePoint 清單中的所有專案複製到第二個 SharePoint 網站。 流程程式也適用於 SharePoint 清單和 SQL 數據表,或 Flow 支援的 100 項以上服務。

適用于: Power Automate
原始 KB 編號: 4467880

其他相關資訊

您必須填入所有必要的資料列。 您不需要兩個數據源中所有數據行的名稱都相同,但您選擇的 (必須至少有一個數據行) 才能唯一識別兩個數據源之間的專案。

在下列範例中,我們假設兩個來源中的 Title 資料 行都相同。

設定觸發程式

第一個步驟是在來源 SharePoint 清單上設定觸發程式。 因為您想要擷取所有專案變更 (不只是新專案) ,所以您應該選取 [SharePoint - 當現有專案修改時 ] 觸發程式。

在 Sharepoint 中選取 [修改現有專案時] 觸發程式的螢幕快照。

注意事項

雖然觸發程式名稱只會提及對現有專案的修改,但觸發程式也會回應新增至清單的新專案。

在目的地中尋找專案

搜尋目的地清單中的專案以取得其標識碼並加以更新。 雖然 Flow 有篩選動作 ,但您不應該在此案例中使用該動作,因為該動作會從 SharePoint 下載所有清單專案。 此程式會很慢、會用到您的配額,而且如果清單有超過 256 個專案,則無法運作。

相反地,您應該在 SharePoint 中的 [取得專案] 步驟上使用 [篩選查詢] 字段。 新增 [取得專案] 動作,然後選取 [顯示進階選項 ] 以顯示所有字段。 如果您要比對來源清單中資料列的標題,請在 [ 篩選查詢 ] 欄位中輸入下列項目 (確定您包含單引號) :

標題 eq '[從動態內容中選取標題]'

在 [取得專案] 步驟的 [篩選查詢] 字段中輸入標題的螢幕快照。

您不需要在兩個數據源之間有嚴格的 1:1 數據行對應。 例如,如果您在來源清單中有 [名字] 和 [姓氏] 數據行,而且目的地清單中有 [完整名稱] 數據行,您可以在 [清單名稱] 字段中輸入 FullName eq '[First name] [Last name]'

新增條件以檢查專案是否存在

當您從目的地清單取得專案時,下列其中一種情況會成立:

  • 此專案尚未存在於目的地中,因此您必須加以建立。
  • 專案已存在於目的地中,您必須加以更新。

使用條件來判斷實際情況。 如果要執行這項操作,請依照下列步驟執行:

  1. 選取 [新增步驟],然後選取 [ 新增條件]

  2. 在 [ 條件 ] 卡片的左側文本框下,選取 [ 新增動態內容]

    注意事項

    包含 Get 專案 傳回之所有項目清單的集合會命名為 value。 如果現有專案已變更) ,請確定您從 [ 取得專案 ] 中選取值 (不是從觸發程式中選取。

    此螢幕快照顯示在新增條件時,[取得專案] 中會列出值集合。

  3. 在 [條件] 卡片的 [關聯性] 方塊中選取 [等於],然後在 [] 方塊中輸入 0

  4. 在進階模式中新增 length 函式。 這很重要,因為動態值內容會傳回項目清單。 您必須判斷清單的長度是否 (值) 等於 0 (零) 。

  5. 在進階模式中,輸入本文 ('Get_items ') ?[' 的長度 () value'] 表達式。 您的條件如下所示。

    [條件] 方塊的螢幕快照,其中顯示清單的長度等於 0。

建立專案

IF YES 分支中,您將新增 SharePoint 建立專案 步驟。

選取您在 [ 取得專案 ] 步驟中使用的網站和清單。 在 [建立專案] 中,您應該只使用觸發程式中的字段來填入每個數據行。 您不應該使用 [ 取得專案 ] 步驟中的任何數據,因為這會來自目的地清單,而不是來源清單。 取得專案 會出現在觸發程式上方。 請確定您捲動到底部以尋找它。

更新專案

IF NO 分支中,您將新增 SharePoint Update 專案 步驟。

選取網站和清單。 然後,選取從 [ 取得專案 ] 步驟傳回的標識符。

選取從 [取得專案] 步驟傳回之標識符的螢幕快照。

當您新增標識子時,會在 [更新專案] 步驟周圍自動新增 [套用至每個容器]。 這是預期會發生的情況。 如果您在 [ 取得專案 ] 步驟中使用的查詢正確,容器只會更新您想要複製的專案。 完成其餘欄位 (並確定您使用來自觸發程式的輸出,而不是從 [取得專案 ] 呼叫) ,您的條件區塊應該類似下列螢幕快照。

顯示條件區塊範例的螢幕快照。

流程程式的限制

流程程式可讓第一個清單中所做的變更反映在第二個清單中。

下列限制適用於程式:

  • 如果從第一個清單中刪除專案,則不會從第二個清單中刪除專案。 這是因為刪除 項目時沒有觸發程式。 在此情況下,無法在刪除時通知流程。 相反地,建議您新增數據行,以指出不再需要或相關專案,而不是從 SharePoint 清單中刪除專案 (或 SQL 數據表,或其他數據源) 。 該數據行會在兩個清單之間同步。
  • 如果變更您用來讓專案在兩個清單之間保持同步的欄位,則會在目的地清單中建立新專案。 例如,如果您使用人員的 [名稱 ] 資料行在兩個清單之間複製,而該人員的 [ 名稱 ] 資料行變更,則流程會將該變更視為新專案,而不是現有專案的更新。 如果您可以保證 [名稱 ] 數據行永遠不會變更,則不會受到這項限制的影響。 不過,如果 [名稱] 資料行確實變更,您必須將將專案標識符儲存在第一個清單中的數據行新增至目的地清單。 在此情況下,您可以使用識別碼,而不是使用 Name 來尋找專案。 (標識符保證一律是唯一的) 。
  • 此程式不是雙向同步處理。這表示,如果目的地清單中的專案已更新,變更將不會反映在來源清單中。 您不應該嘗試在流程中設定雙向同步,因為這樣會建立無限迴圈,而不需要進行其他修改。 例如,清單 A 會更新清單 B、清單 B 會更新清單 A、清單 A 會再次更新清單 B,依此類推。