今回はMicorsoft Power Platformで提供されている共通基盤データベース「Dataverse(データバース)」をテーマに、第3回目となる今回はリレーションシップの実践的な利用方法についてご紹介いたします。
前回までの記事では第1回目に「Dataverse」の概要やテーブル作成など基本的な使用方法。第2回目では「Dataverse」でのリレーションシップの基本的な作成方法と考え方についてご紹介してきました。今回の記事ではリレーションシップの実践的な使い方についてご紹介していきたいと思います。
多対多リレーションシップの使用方法
前回の記事では中間テーブルを使用せずに「多対多」のリレーションシップをご紹介しました。ここでは、その使用方法についてご紹介します。
前回までに作成したリレーションシップは、次の「Suppliers」と「Shippers」でした。
2つのテーブル間のリレーションシップを使用する為には、テーブルのフォームの変更が必要となります。以下のようにフォームの変更を行っていきます。
フォーム編集画面にて、以下のようにサブグリッドを追加します。
サブグリッドへの入力
「Suppliers」テーブルのフォームへ追加したサブグリッドへ「Shippers」テーブルのIDを入力していきます。「Suppliers」テーブルの「編集」を選択後、次の画面で対象となる行を選択、「フォームを使用して行を編集」からデータを入力します。
「Suppliers」テーブルで「ShippersID」を入力したことで、次のようにそれぞれの選択項目が互いに紐づきあっているのがわかります。Dataverseを使用することで、このように中間テーブルを使用せずとも多対多のリレーションシップの構築が行えます。
検索列の作成
検索列を追加することで「一対多」、「多対一」のリレーションシップが自動的に作成されます。作成方法は、通常列と同様に、列の追加画面より行います。次のように、「データの種類」を検索とし、「関連テーブル」を選択し作成していきます。
検索列を追加後、リレーションシップを確認すると、自動的に作成されたリレーションシップが存在することが確認できます。
検索列の動作確認
テーブルの編集画面より、追加した列を確認してみます。列に値は設定されていませんので、値を登録していきます。セルを押すと、リレーションシップ先の「Customers」テーブルのプライマリ列の値がリスト表示されるのでこちらを選択して登録します。
データを登録し、紐づけを行いましたので、続いてリレーションシップ先のテーブルが参照可能であるかを、ビューを作成して確認します。次の動画を手順を参考にビューを作成してください。
作成したビューを確認すると、リレーションシップ先の行と紐づけたデータに関しては、リレーションシップ先テーブルの内容が表示され、正しく「多対一」のリレーションシップが作成出来ているのが確認できました。
検索列を作成し、リレーションシップ先と紐づけを行うことで、テーブルの参照を行うことができることが分かりましたが、本来であれば元のテーブルに保持している「CustomerID」の値を使用して紐づけれるのではと考えるのではないでしょうか?
残念ながら、今のところDataverseの検索列には元々保持しているテキスト型の「CustomerID」の値を設定することはできないようです。他の設定方法としては、「Power Automate」のDataverseトリガー「行が追加、変更、または削除された場合」を使用することで、「データをインポート」と同時に検索列への紐づけを行うことが出来るようです。
検索列へのインポート
Power Automate クラウドフロー作成
先ほどご紹介した、「Power Automate」を使用した、検索列への紐づけを行う方法も検証してみます。次のように「Power Automate」のクラウドフローを作成していきます。
フロー名は「CustomerSet」とし、Dataverseトリガー「行が追加、変更、または削除された場合」を選択し、作成を行います。
次の画像と、手順を参考にフローを作成していきます。
- 「行が追加、変更、または削除された場合」トリガー 次の内容を設定
- 種類の変更:「作成」を入力
- テーブル名:「Orderss」を入力
- スコープ:「Business unit」を入力
- 「新しいステップ」を押す
- 「操作を選択してください」
- 「Dataverse」を選択
- 「Dataverse」アクションより以下を選択
- 「行を一覧にする」
- 「行を一覧にする」アクションを次のように設定
- テーブル名:「Customerss」を入力
- 行のフィルター:「cr4ff_customerid eq’」を入力
- 行のフィルターで、右側のダイアログのタブを「式」とする
- 「式」のテキストボックスに「string(triggerOutputs()?[‘body/cr4ff_customerid’])」を入力し「OK」を押す
- 行のフィルターに戻った後に「‘」を入力
- 行数:「1」を入力
- 「新しいステップ」を押す
- 「操作を選択してください」
- 「Dataverse」を選択
- 「Dataverse」アクションより以下を選択
- 「行を更新する」
- 「行を更新する」アクションの設定1
- テーブル名:「Orderss」
- 行ID:右側のダイアログから、「行が追加、変更、または削除された場合」セクション内の「Orders(エンティティのインスタンスを表す一意識別子)」を選択し設定
- 「行を更新する」アクションの設定2
- CustomerTable (Customerss):右側のダイアログから、「行を一覧にする」セクション内の「OData ID(OData 行ID)」を選択し設定
全て入力し完成後に保存とテスト(手動)を行い、フローを完成させます。
Excelデータをインポートする
クラウドフローの完成後、Excelからデータを再インポートします。既存のデータと重複するので、「Orderss」テーブルのデータを次のように削除します。
続いて再度Excelデータをインポートします。既存テーブルへデータを登録するようにテーブルのマップは以下のように行います。
データインポートが終了後、テーブルの内容を確認すると、検索列のデータが正しく設定されました。
クラウドフロー作成段階でお気づきの方もいると思いますが、Power Automateで作成した処理の概要は以下となります。
- Dataverseデータのレコードが作成
- 作成されたレコードの「CustomerID」文字列を取得
- 「Customerss」テーブルのプライマリ列を、2で取得した「CustomerID」を元に行を取得
- 3で取得した「Customerss」テーブルの「OData ID(OData 行ID)」を「Orderss」の検索列へ設定
処理の実行履歴を確認すると、次のように成功していることが分かります。
さいごに
今回の記事では、「Dataverse」でのリレーションシップの実用的な使用方法の他、「PowerAutomate」を使用した項目のインポート方法についてもご紹介しました。次回の記事では「Microsoft Access」からのエクスポートする方法についてご紹介しますので、そちらも是非ご覧ください。
弊社では「Dataverse」をはじめとした、SaaSサービスのWeb APIと連携可能なJavaScriptライブラリを提供しています。SaaSサービスのデータを利用した高機能なWebアプリケーションを作成したい方は、是非Webサイトをご確認ください。
JavaScript帳票ライブラリ「ActiveReportsJS(アクティブレポートJS)」と「Dataverse」の連携についてはこちらの記事でご紹介。