Power Apps Common Data Service のAPIをPostmanとExcel(CData Add-in)で使ってみる
Power Appsは様々なWeb サービスをベースに独自のアプリケーションをUIベースで開発できるマイクロソフトのサービスです。
基本的には、様々なクラウドサービス、SharePointやOffice365、Dynamics 365等のサービスに接続してカスタムアプリを作るのですが、Power Apps独自でデータベース的な構成を持つこともでき、それをベースにカスタムアプリを作成することもサポートしています。そのPower Appsのデータベース的要素がCDS・Common Data Serviceと呼ばれています。
初期状態で各種ビジネスケースに応じたベースとなるエンティティ(例えば顧客を管理するエンティティや)が定義されているので、あまりデータベースを扱ったことが無い人でも、使いやすい親切設計です。
さて、そんなCDSなんですが実は裏側ではDynamics 365 for Customer Engagement のアーキテクチャが使われており、個人的にはとても親しみやすいサービスです。
しかも、APIもDynamics 365 for Customer Engagementベース!
というわけで、今回はCommon Data Serviceの構成からAPI接続までをざっくりとまとめてみました。
やってみたこと
以下のようなCommon Data Serviceのデータを
Postmanを使って、Web API経由で取得
また、そのWeb APIをCdata Driver Excel-addin を通じてExcelにロードするところをやってみようと思います。
必要なもの
- Power Apps ライセンス
Office 365 および Dynamics 365 向けの PowerAppsライセンス
ライセンスの概要 - PowerApps | Microsoft Docs
私は今回Dynamics 365 のトライアルを取得して、実施しています。
Common Data Service環境の構成
まず、Office365管理画面にログインして、Power appsの環境管理画面へ移動します。
Power Apps管理センターの「環境」から「+新しい環境」をクリックして、Common Data Serviceを構成するための環境を追加します。
はじめに環境の基本プロパティを設定します。環境名やリージョン、環境の種類を選択して、「環境の作成」をクリックします。
少しすると環境が作成されるので、データベースを作成します。
Common Data Serviceでは予め売上高などの通貨ベースの入力を行うフィールドも提供されるため、初期設定で通貨単位を設定する必要があります。ここでは日本円(JPY)と日本語(Japanese)を選択して、「データベースの作成」をクリックします。
サンプルアプリとデータを含めるは任意で選択していいかと思います。今回はデフォルトで進めます。
少しすると、新しい環境が構成されます。
環境の中にはCommon Data Serviceとサンプルデータも登録されているので、確認してみます。
メニューからPower appsを選択し
右にあるナビゲーションから、作成した環境を選択します。
「データ」メニューの下にエンティティがあるので、クリックすると
Common Data Serviceの初期定義として構成されたエンティティの一覧が表示されます。
これを用いて、Power appsのアプリを作成することが可能です。
データを確認する場合はここから例えば「取引先担当者」をクリックし
「データ」タブをクリックすることで、初期のサンプルデータを含めたデータ一覧を確認することができます。
Power apps、Common Data Service側の環境構成は以上です。
Azure ADの準備
それでは、続いてCommon Data ServiceのAPIを利用するために、Azure ADのアプリ登録を行っていきます。
Common Data Serviceは他のOffice365 やDynamics 365と同様にAzure ADベースのOAuth2.0認証を通じてアクセスすることになります。
まず、再度Office365 管理画面に移動し管理センターから「Azure Active Directory」をクリックします。
Azure Active Directory 管理センターが立ち上がるので「Azure Active Directory」→「アプリの登録」→「新しいアプリケーションの登録」をクリックします。
ここで、OAuth2.0認証を通すためのアプリ登録を行います。
今回はWeb アプリ/APIベースとして、以下のように入力を行います。
サインオンURLは後々ローカルアプリケーションからも接続することを考慮して、https:localhost:33333を指定しました。
アプリ作成後、このアプリがアクセスできるサービスに対する権限を付与します。
「設定」→「必要なアクセス許可」→「追加」をクリックし
APIの選択から「Dynamics CRM Online」を選択します。
Common Data ServiceはDynamics CRM のAPIをベースとして構成されているサービスのため、これで問題ありません。(将来的には修正されるかもしれませんが)
続いて、スコープとして「Access Dynamics 365 as organization users」(これ一個しか無いですが)を選択し、保存すればアクセス許可の設定はOKです。
次に、OAuth2.0認証の時に必要となるClient Secretを設定・取得します。
「キー」からキーの任意の名称と有効期限を設定し、保存をクリックします。
保存後にClient Secretが生成されるので、これを控えておきます。
あとは、Client IDとなるアプリケーションIDとリダイレクトURLとなるはじめに設定したURLを控えておけば準備完了です。
ちなみにCommon Data ServiceのAPIエンドポイントURLは 「https://(環境名).crm7.dynamics.com/api/data/v9.0/」となりますが Dynamics 365 管理センターからも確認できます。
管理センターに移動すると、先程Powe Apps 管理センターで構成した環境が表示されるので、対象の環境を選択し「オープン」をクリック
上のナビゲーションメニューから「設定」→「カスタマイズ」→「開発者リソース」を選択すると
以下のようにWeb APIエンドポイントURLが確認できます。
ここを見てしまうと、まさにDynamics 365ですね。
Postmanからアクセス
それでは、実際にAPIにアクセスしてみましょう。
まず、Postmanからアクセスしたいと思いますが、Postmanはローカルアプリにもかかわらず、独自のCallbuck URLが指定されているので、事前に先程構成したAzure ADのリダイレクトURL一覧に加えておきます。
その後、Postmanを立ち上げて、認証方式でOAuth 2.0 を選択し、「Get New Access Token」をクリックします。
以下のような画面が表示されるので、必要事項を入力し、「Request Token」をクリックしましょう。
入力する情報のサンプルは以下の通りです。
プロパティ | Value |
---|---|
Auth URL | https://login.microsoftonline.com/(Office365テナントID).onmicrosoft.com/oauth2/authorize?resource=https://(CDS 環境ID).api.crm7.dynamics.com/ |
Access Token URL | https://login.microsoftonline.com/(Office365テナントID).onmicrosoft.com/oauth2/token |
CallbuckURL | https://localhost:33333 |
Client ID | Azure ADに登録したアプリのアプリケーションID |
Client Secret | Azure ADに登録したアプリで生成したキー |
Grant Type | Authorization Code |
「Request Token」をクリック後、以下のようにログイン画面が表示されるので、ログインと権限の委譲許可を行えば、
以下のようにAccess Tokenが取得できます。
このアクセストークンを使用した状態で、以下にGetリクエストを送ることで、CDSの取引先担当者一覧が取得できます。
https://(CDS環境ID).api.crm7.dynamics.com/api/data/v9.0/contacts
細かなAPIの操作方法は以下のDynamics 365 APIリファレンスの参照がおすすめです。
Microsoft Dynamics 365 Web API の使用
私のBlogにもいくつかアクセスサンプル記事があります。
CData Excel Add-inでアクセス
続いて、CData Excel Add-inを使って、Web API経由で、Excelにデータをロードしてみたいと思います。
CData Exel Add-in for Dynamics 365は以下からトライアルを入手できます。
インストール後、Excelを立ち上げると、以下のようにCdataタブが表示されるので、そこから「取得元Dynamics 365」をクリックします。
接続ウィザードが表示されるので、各種項目を入力し、「OK」をクリックします。
必要な接続プロパティは以下の通りです。
接続プロパティ | 設定値 |
---|---|
Dynamics 365 Edition | Dynamics 365 Online を選択 |
Organization Url | https://(CDS 環境ID).api.crm7.dynamics.com/ |
Tenant | (Office365テナントID).onmicrosoft.com |
Callbuck URL | https://localhost:33333 Azure ADで指定したURL |
OAuth Client ID | Azure ADに登録したアプリのアプリケーションID |
OAuth Client Secret | Azure ADに登録したアプリで生成したキー |
「OK」をクリック後、Postmanの時と同様にOAuth認証が行われます。
無事認証が通れば、以下のようにテーブルやSQLを書くための画面が表示されます。今回はシンプルに取引先担当者(accounts)テーブルを選択し、OKをクリックします。
すると以下のようにWeb API経由でデータが取得でき、Excel上に一覧が表示されます。
ちなみに、CData Excel add-inでは、ここからデータの作成・更新・削除も可能です。
終わりに
いかがでしたでしょうか!
Dynamics 365のAPIがわかっている方であれば、かなり気軽に使えるAPIです。
知らない方でも、この機会に是非触ってみて、CDSの可能性を広げてもらえればと思います。
次回はもうちょっと具体的な利用方法を交えた記事にしてみたいと目論んでいます。