MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

SharePoint リストを Dataverse の Virtual Table として追加する

はじめに

Virtual Tableは外部データをあたかもDataverseのテーブルであるかのように扱える機能で、非常に雑に言えばコネクターを使って取得される外部データの結果をテーブルのように見せている仕組みです。 物理的なDataverseのテーブルを作成するDataflowとは違ってコピーしているわけではなく、データそのものをVirtual Table内に抱えているわけではありません。

キャンバスアプリは非常に自由にデータ接続して自分でUIを作って読み書きしているわけですが、単純なモデル駆動型アプリではDataverseのテーブルであることが必要で、外部データをモデル駆動型で表示・編集することはできません。

Virtual Tableはモデル駆動型アプリにキャンバスのようなデータ接続の自由度を付与するものとも言え、最近のアップデートでSharePointリストもVirtual Tableのサポートに追加されました。

これによって、SharePointリストをモデル駆動型アプリで読み書きできるだけでなく、他のテーブルとのリレーションを持たせることができます。

『現場の作業員向けアプリではキャンバスにSharePointをソースとしたアプリを利用させ、バックオフィスでは同じリストをソースとしたモデル駆動型アプリを利用』とか、『在庫データをSharePointリストで管理しておいて、それをDataverseの他のテーブル(注文情報とか)が参照する』などの活用が期待できます。

今回の投稿では、SharePointリストをDataverseのVirtual Tableとして追加し、モデル駆動型アプリで読み書き、他テーブルと関連付けするところまで見ていきます。

準備

手順はDocsの通りですので、そちらの方が読みやすい方は飛ばしてください。

Create virtual tables using virtual connectors (preview) (Microsoft Dataverse) - Power Apps | Microsoft Docs

  1. Virtual Connectorのダウンロードとインストール
  2. コネクションの作成
  3. ソリューションへのコネクションレファレンス追加
  4. データソースの作成
  5. エンティティカタログの編集

1. Virtual Connectorのダウンロードとインストール

まずは Microsoft の AppSource から Virtual Connector というDynamics 365アプリをダウンロード、インストールします。

Find the right app | Microsoft AppSource

画面の [Get it now]をクリックしてダウンロードに同意すると、Power Platform 管理センターに自動で飛ばされます。 (飛ばされるけど表示されない場合はもう一回Got it nowをクリックしてみてください)

インストールする環境を選んで、規約に同意して、インストールを実行します。

インストールの結果は Power Platform 管理センターで、対象の環境を選び、Dynamics 365 apps を表示することで確認できます。

”Virtual connectors in Dataverse" が表示されていれば成功です。

2. コネクションの作成

これは Power Apps 使っている方なら特に問題ないと思うので割愛します。

既に追加されているのであれば何もしなくてOKです。

3. ソリューションへのコネクションレファレンス追加

次に、Virtual Tableを追加したいソリューション内にコネクションレファレンスを追加します。

ここでは既定のソリューションを利用していますが、環境内にあるソリューションであれば何でも良いです。

コネクションレファレンスの作成時には、Connectorとして "SharePoint" を選び、 Connection では先ほど作成した/すでに作ってあった 接続情報を選びます。

この後のステップで、データ取得元のサイトを指定しますが、どうやら接続先のサイトごとにコネクションレファレンスを追加する必要がありそうです。

データ取得元が複数サイトである場合にはコネクションレファレンスを複数回作成しました。

4. データソースの追加

普通のキャンバスの場合と同じような考え方です。どこのサイトに接続してデータを取りにいくのかを設定します。

まず画面右上のギアマークから、Advanced settings を選びます。すると見慣れない Dynamics 365の設定画面が表示されますので、Settings の右に表示された下矢印をクリックして、 System下の Administration を選びます。

いくつかメニューが表示されていると思うので、Virtual Entity Data Sources を選択します。 切り替わった画面で 新規のデータソースを追加します。

データソースの情報を入力する画面では、3. で追加したコネクションレファレンスを選択すること、またDataset Valueには対象のリストが存在するサイトアドレスを入力することに気を付けてください。

入力が終わったら忘れないように Save しておきます。

ここまで来たらあと少しです。最後はVirtual Tableとして追加するリストを選んでいきましょう。

5. エンティティカタログの編集

  1. で選んでいた環境のソリューションに移動します。テーブルの中で "Entity" で検索すると、Entity Catalog for コネクションレファレンス名 というテーブルが作成されているのがわかります。

このテーブルには接続したサイト上のリストが一覧化されていて、Virtual Tableを作るかどうか、どの列をプライマリーにするか などを設定していきます。

ちょっと(だいぶ)面倒ですが、このテーブルを編集するためにモデル駆動型アプリを作ります。

テーブルのメニュー (上のバー) に表示されている Create an app をクリックして、アプリを作成しましょう。

モデル駆動型アプリの作成方法はここでは省略しますが、保存せずとも 再生をすれば、レコードの編集はできます。

Virtual Tableにしたいリスト名を選んで、それぞれの列を以下の通り設定します。

  • Create or Refresh Entity : Yes
  • Primary key of the Virtual Entity : ID
  • Primary field of the Virtual Entity : 適当なもの (大体Title列にする)

保存を押したら完了です。不思議なことに保存すると全部消えているように見えるんですよね。

実際にはVirtual Tableを作る操作は実行されているので安心してください。

保存し終えたらテーブル一覧に戻ります。 ここで "Custom Entity"と検索すると、 Custom Entity リスト名 というテーブルが作成されていることが分かります。

これでSharePoint リストをソースとしたVirtual Tableの作成は完了です。

モデル駆動型アプリの作成

作成したSharePoint リストからモデル駆動型アプリを作成してみます。

先にフォームを変更しておきましょう。 テーブルを選んで、Forms をクリックします。

初期状態ではタイトル列 (Primary fieldで設定した列) しかないので、必要な列を追加しておきます。ここで発行することを忘れずに。

テーブルに戻って、アプリを作ってみましょう。おお!ここまで一度も何のコードも書かず、読み書きするアプリができてしまいました!

このように、SharePoint リストを Virtual TableとしてDataverseに追加することで、他のテーブル同様にモデル駆動型アプリのデータソースとすることができました。

他テーブルと関連付け

関連付けの詳細はやはりDocsに譲るとして、簡単な利用例として今回追加したリストを参照する列を追加してみます。(よくあるマスターを参照して商品選択するような列)

適当なテーブルを用意しておきます。

新しい列の追加でLookup型にして、関連するテーブルとして先ほどの Virtual Tableを選んで保存します。

データをグリッドで編集してみると、確かに先ほどのVirtual Tableの一覧が表示されていますね。

こんな風にして、SharePointのリストをVirtual TableとしてDataverseに追加することで、Dataverse側のテーブルと無理なく関連付けすることができるようになります。

おわりに

注意事項ですが、Lookupする場合も、Virtual Table自体からアプリを作る場合も、Primary field以外はどうもビュー (一覧)に追加できないようです。(できはしますが、値が表示されない)

もしかすると制限なのかもしれませんが、見つけられていませんので、試してみてください。

最初にも書きましたが、SharePoint リストをDataverseと、またはモデル駆動型アプリと絡められることによって 『現場の作業員向けアプリではキャンバスにSharePointをソースとしたアプリを利用させ、バックオフィスでは同じリストをソースとしたモデル駆動型アプリを利用』とか、『在庫データをSharePointリストで管理しておいて、それをDataverseの他のテーブル(注文情報とか)が参照する』などの活用が期待できると思います。

ちょっと手順が面倒ですが面白いので是非試してみてください。