如何使用 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') ?[' 周圍輸入 length () value'] 運算式。 您的條件如下所示。

    [條件] 方塊的螢幕擷取畫面,其中顯示清單的長度等於 0。

建立專案

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

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

更新專案

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

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

選取從 [取得專案] 步驟傳回之識別碼的螢幕擷取畫面。

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

顯示條件區塊範例的螢幕擷取畫面。

流程程式的限制

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

下列限制適用于程式:

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