はじめに

この資料では、Microsoft Flow を使用して 2 つのデータ ソース間でアイテムを効率的にコピーする方法について説明します。

たとえば、1 つのサイトの SharePoint リストから 2 番目の SharePoint サイトにすべてのアイテムをコピーするフローを構築できます。 フロー プロセスは、SharePoint リストと SQL テーブル、または Flow でサポートされている 100 を超えるサービスの間でも機能します。

詳細情報

必要な列をすべて設定する必要があります。 2 つのデータ ソース内のすべての列の名前が同じである必要はありませんが、2 つのデータ ソース間で項目を一意に識別できる列が少なくとも 1 つ必要です。

次の例 では、[タイトル] 列が両方のソースで同じであると仮定します。  

サーバーをセットアップする

最初の手順では、ソース SharePoint リストにトリガーを設定します。 すべての項目の変更 (新しいアイテムだけでなく) をキャプチャする場合は、 既存のアイテムが変更されたときに SharePoint - トリガーを選択する必要があります。  

SharePoint - サイト アドレスとリスト名が表示された [既存の項目が変更されたとき] トリガー

注:トリガー名は既存の項目に対する変更のみを参照しますが、トリガーはリストに追加された新しいアイテムにも反応します。

目的地でアイテムを検索する

宛先リスト内のアイテムを検索して ID を取得し、更新します。 Flow には フィルター アクションがありますが、 そのアクションは SharePoint からすべてのリスト アイテムをダウンロードするため、このシナリオではこのアクションを使用しないでください。 このプロセスは遅くなり、クォータを使い切り、リストに 256 を超えるアイテムがある場合は機能しません。

代わりに、SharePoint の [ アイテムの 取得]ステップで[クエリのフィルター] フィールドを使用する必要があります。 [ アイテムの取得] アクションを追加 し、[ 詳細オプションを表示] オプションを選択して、すべてのフィールドを表示します。 ソース リストの行のタイトルと一致する場合は、[クエリのフィルター] フィールドに次を入力します (単一引用符を含めてください)。

タイトル eq '[動的コンテンツからタイトルを選択]'

[項目の取得] 手順の [フィルター クエリ] フィールドにタイトルを入力する

必ずしも、2 つのデータ ソース間で厳密な 1:1 列マッピングを行う必要はありません。 たとえば、 ソース リストに名と 名の 列があり、 宛先リストにフル ネーム列がある場合は、[ リスト名] フィールドにフルネーム eq '[姓] [ 姓] [姓] 'と入力できます。  

アイテムが存在するかどうかを確認する条件を追加する

宛先リストから項目を取得すると、次のいずれかの状況が当てはまります。

  • アイテムはまだリンク先に存在しないため、作成する必要があります。

  • アイテムは既に宛先に存在し、更新する必要があります。

条件を使用して、実際の状況を判断します。 このためには、次の手順に従います。 

  1. [新しいステップ] を選択し、[ 条件を追加] を選択します。

  2. 条件カードの左側のテキスト ボックスの下にある [ 動的コンテンツを追加] を選択します。

    注: Get アイテムによって返されるすべての項目のリストを含むコレクション   は、値という名前です。 既存のアイテムが変更された場合は、トリガーからではなく、[アイテムを取得] から値を選択してください。
     
    条件を追加するときに [項目の取得] に値コレクションの一覧が表示される

  3. 条件 カードで、[ リレーションシップ] ボックスの選択と同じ  で、[値] ボックスに「0」と入力します。

  4. 詳細モードで長さの関数を追加します。 動的値コンテンツは項目の一覧を返すので、これは重要です。 リストの長さ (値ではなく) が 0 (ゼロ) であるかどうかを判断する必要があります。

  5. 詳細モードでは、 本体の周囲に長 さ('Get_items')を入力します。?[]値']式。 あなたの状態は次のように表示されます。 

    [条件] ボックスに一覧の長さが 0 と表示される

スタートアップ アイテムを作成する

IF YES ブランチで、SharePoint 作成項目の手順を追加します。

[アイテムの取得] 手順で使用したサイトと一覧を選択します。  [アイテムの作成]では、トリガーのフィールドのみを使用して各列に設定する必要があります。 "アイテムを取得する" 手順のデータは、ソース リストではなく、宛先リストから取得されるため、使用しないでください。 Get アイテムがトリガーの上に表示されます。 下までスクロールして見つけられるようにしてください。


アイテムを更新する

IF NO ブランチで、SharePoint Update 項目の手順を追加します。  

サイトとリストを選択します。 次に、[アイテムの取得] ステップから返される ID を選択 します。  

項目の更新時に [項目の取得] に ID が表示される

ID を追加すると、 各コンテナーに適用 が自動的に [アイテムの更新] ステップの周囲に追加されます。 この動作は仕様です。 [アイテムの取得] ステップで使用したクエリが 正確な場合、コンテナーはコピーする項目のみを更新します。 残りのフィールドを完了したら (および Get Items 呼び出しからではなく、トリガーからの出力を使用していることを確認 します)、条件ブロックは次のスクリーンショットのようになります。  

条件と [はいの場合] と [いいえの場合] の分岐


フロープロセスの制限事項

フロー プロセスを使用すると、最初のリストで行われた変更を 2 番目のリストに反映できます。

このプロセスには、次のガイドラインが適用されます。

  • 最初のリストからアイテムを削除しても、そのアイテムは 2 番目のリストから削除されません。 これは、アイテムが削除されたときにトリガーがないため です。 この場合、削除が発生したときにフローに通知する方法はありません。 代わりに、SharePoint リスト (または SQL テーブル、またはその他のデータ ソース) からアイテムを削除する代わりに、アイテムが不要になったり関連性がなくなったりすることを示す列を追加することをお勧めします。 その列は 2 つのリスト間で同期されます。

  • 2 つのリスト間でアイテムの同期を保つために使用しているフィールドに変更が加えられた場合、コピー先リストに新しいアイテムが作成されます。 たとえば、ユーザーの [名前] 列を使用して 2 つのリスト間でコピーし、そのユーザーの [名前]列が変更された場合、フローはその変更を既存のアイテムの更新ではなく、新しいアイテムと見なします。 [名前] 列が変更されないことを保証できる場合は、この制限の影響を受けません。 ただし、[名前]列が変更された場合は、最初のリストに項目の ID を格納する列を宛先リストに追加する必要があります。 この場合、Name を使用 して アイテムを検索する代わりに、 IDを使用できます。 (ID は常に一意であることが保証されます)。

  • このプロセスは双方向同期ではありません。 つまり、アイテムが宛先リストで更新された場合、変更はソース リストに反映されません。 フロー内で双方向同期を設定しないでください。 たとえば、リスト A はリスト B を更新し、リスト B はリスト A を更新し、リスト A は再びリスト B を更新します。

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

翻訳品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

フィードバックをお送りいただきありがとうございます!

×