Power Apps でアプリを作る場合、データソースとして SharePoint がよく採用されます。
扱いやすいですし、気軽に試せるのもいいですね。
データ量が多くなった場合や公開の範囲を変更する場合など、 Dataverse へ移行したい!という要望をよく聞きます。この場合考慮事項はそれなりにありますが、アプリの変更はそんなに難しくありません。
今回は「データをコピーする」ことを考えてみます。
SharePoint リストと Dataverse テーブルの定義
まずはテスト用にリストを作ります。左からテキスト、選択肢、数値(小数点1けた)になっています。
「選択肢」の扱いはSharePointとDataverseで異なっており、変換は結構癖があります。それについては別途記事にしようかと思っています。ここではDataverse側はType列はテキストにしてみます。
なのでDataverse側は以下のようになります。
まずは Power Automate クラウドフローでデータのコピーをしてみる
SharePointリストにデータが入ったらそれをDataverseに送ればいいので、以下のようになります。
「アイテムが作成または変更されたとき」というトリガーもあるので、値が変更されたときもDataverse側で行を指定できれば更新できそうです。
データフローを使ってみる
もう少しスマートにデータのコピーをする方法として「データフロー」という機能があります。
先ほどのクラウドフローはいったんオフ(無効)にしておき、こちらの機能を試してみましょう。
-
左側ペインにサイトのリストやそうでないもの(?)の一覧が出てきますので意中のリストにチェックを入れます。すると右側にリストの中身が表示されます。[データの変換]をクリックします。
-
すると以下のような画面が出てきます。なぜか[Id]と[ID]という列があるので、Idのほうを削除します。[次へ]をクリックします。
-
意中のテーブルを選択します。テーブル名は表示名ではなく内部名になっているのでこの例のように*****_テーブル名のような形式になっています。(crf42はお使いの環境によって変わります)
-
列マッピングを行います。今回の場合リストの列とテーブルの列を同じ名前にしているのでわかりやすいですが、そうでない場合は正しくマッピングしてください。できたら[次へ]をクリックします。
-
テーブルに値が入りました。「ライオン」のエントリが重複していますが、これは先ほどのクラウドフローで入れたデータですね。そのまま残っていることが分かります。
重複しないようにする
このままだと更新があってもなくても重複したデータが格納されることになります。ある時点でのスナップショットをとってロールバックする…など使い道はなくはなさそうですが、今回はSPOリストとDataverseテーブルを同じにするのが目的なのでそのように設定してみます。
-
Title をキーにします。(キーが重複不可になります。今回の例だと、Weightの異なるアメショを2つ以上登録できなくなります。)
-
キー列が設定されていることを確認し、[クエリ出力に存在しない行を削除します]にチェックを入れます。ソース列を設定しなおして[公開します]。
今度はリストから消えたアイテム(行)はテーブルからもきえており、追加・更新も同様にできています。
まとめ
SPOリストからDataverseテーブルへの移行は、可能です。
データのコピーについては、単純な仕組みであればAutomateクラウドフローでもいいですが、データフローを使うとよりよいでしょう。
更新間隔は最短で1分に設定できますが、それでもわずかにリストとテーブルの情報に差異が生じるタイミングは発生するのでご注意ください。
Dataverse は強力なデータベースであり、Power Platformのメインのデータソースになりますので、SPOリストのサイズやアクセス権制御等気になりだしたら、ぜひDataverse導入をご検討ください。