Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Power Apps Common Data Service のAPIをPostmanとExcel(CData Add-in)で使ってみる

Power Appsは様々なWeb サービスをベースに独自のアプリケーションをUIベースで開発できるマイクロソフトのサービスです。

f:id:sugimomoto:20180516001329p:plain

powerapps.microsoft.com

基本的には、様々なクラウドサービス、SharePointやOffice365、Dynamics 365等のサービスに接続してカスタムアプリを作るのですが、Power Apps独自でデータベース的な構成を持つこともでき、それをベースにカスタムアプリを作成することもサポートしています。そのPower Appsのデータベース的要素がCDS・Common Data Serviceと呼ばれています。

docs.microsoft.com

初期状態で各種ビジネスケースに応じたベースとなるエンティティ(例えば顧客を管理するエンティティや)が定義されているので、あまりデータベースを扱ったことが無い人でも、使いやすい親切設計です。

さて、そんなCDSなんですが実は裏側ではDynamics 365 for Customer Engagement のアーキテクチャが使われており、個人的にはとても親しみやすいサービスです。

しかも、APIもDynamics 365 for Customer Engagementベース! 

というわけで、今回はCommon Data Serviceの構成からAPI接続までをざっくりとまとめてみました。

やってみたこと

以下のようなCommon Data Serviceのデータを

f:id:sugimomoto:20180515225532p:plain

Postmanを使って、Web API経由で取得

f:id:sugimomoto:20180515225514p:plain

また、そのWeb APIをCdata Driver Excel-addin を通じてExcelにロードするところをやってみようと思います。

f:id:sugimomoto:20180515225255p:plain

必要なもの

  • Power Apps ライセンス

Office 365 および Dynamics 365 向けの PowerAppsライセンス

ライセンスの概要 - PowerApps | Microsoft Docs

私は今回Dynamics 365 のトライアルを取得して、実施しています。

Common Data Service環境の構成

まず、Office365管理画面にログインして、Power appsの環境管理画面へ移動します。

f:id:sugimomoto:20180515225601p:plain

Power Apps管理センターの「環境」から「+新しい環境」をクリックして、Common Data Serviceを構成するための環境を追加します。   f:id:sugimomoto:20180515225607p:plain

はじめに環境の基本プロパティを設定します。環境名やリージョン、環境の種類を選択して、「環境の作成」をクリックします。

f:id:sugimomoto:20180515225612p:plain

少しすると環境が作成されるので、データベースを作成します。

f:id:sugimomoto:20180515225620p:plain

Common Data Serviceでは予め売上高などの通貨ベースの入力を行うフィールドも提供されるため、初期設定で通貨単位を設定する必要があります。ここでは日本円(JPY)と日本語(Japanese)を選択して、「データベースの作成」をクリックします。

サンプルアプリとデータを含めるは任意で選択していいかと思います。今回はデフォルトで進めます。

f:id:sugimomoto:20180515225626p:plain

少しすると、新しい環境が構成されます。

f:id:sugimomoto:20180515225631p:plain

環境の中にはCommon Data Serviceとサンプルデータも登録されているので、確認してみます。

メニューからPower appsを選択し

f:id:sugimomoto:20180515225637p:plain

右にあるナビゲーションから、作成した環境を選択します。

f:id:sugimomoto:20180515225643p:plain

「データ」メニューの下にエンティティがあるので、クリックすると

Common Data Serviceの初期定義として構成されたエンティティの一覧が表示されます。

これを用いて、Power appsのアプリを作成することが可能です。

データを確認する場合はここから例えば「取引先担当者」をクリックし

f:id:sugimomoto:20180515225649p:plain

「データ」タブをクリックすることで、初期のサンプルデータを含めたデータ一覧を確認することができます。

f:id:sugimomoto:20180515225653p:plain

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」をクリックします。

f:id:sugimomoto:20180515225702p:plain

Azure Active Directory 管理センターが立ち上がるので「Azure Active Directory」→「アプリの登録」→「新しいアプリケーションの登録」をクリックします。

f:id:sugimomoto:20180515225711p:plain

ここで、OAuth2.0認証を通すためのアプリ登録を行います。

今回はWeb アプリ/APIベースとして、以下のように入力を行います。

サインオンURLは後々ローカルアプリケーションからも接続することを考慮して、https:localhost:33333を指定しました。

f:id:sugimomoto:20180515225720p:plain

アプリ作成後、このアプリがアクセスできるサービスに対する権限を付与します。

「設定」→「必要なアクセス許可」→「追加」をクリックし

f:id:sugimomoto:20180515225726p:plain

APIの選択から「Dynamics CRM Online」を選択します。

Common Data ServiceはDynamics CRMAPIをベースとして構成されているサービスのため、これで問題ありません。(将来的には修正されるかもしれませんが)

f:id:sugimomoto:20180515225731p:plain

続いて、スコープとして「Access Dynamics 365 as organization users」(これ一個しか無いですが)を選択し、保存すればアクセス許可の設定はOKです。

f:id:sugimomoto:20180515225739p:plain

次に、OAuth2.0認証の時に必要となるClient Secretを設定・取得します。

「キー」からキーの任意の名称と有効期限を設定し、保存をクリックします。

f:id:sugimomoto:20180515225745p:plain

保存後にClient Secretが生成されるので、これを控えておきます。

f:id:sugimomoto:20180515225750p:plain

あとは、Client IDとなるアプリケーションIDとリダイレクトURLとなるはじめに設定したURLを控えておけば準備完了です。

f:id:sugimomoto:20180515225758p:plain

ちなみにCommon Data ServiceのAPIエンドポイントURLは 「https://(環境名).crm7.dynamics.com/api/data/v9.0/」となりますが Dynamics 365 管理センターからも確認できます。

管理センターに移動すると、先程Powe Apps 管理センターで構成した環境が表示されるので、対象の環境を選択し「オープン」をクリック

f:id:sugimomoto:20180515225803p:plain

上のナビゲーションメニューから「設定」→「カスタマイズ」→「開発者リソース」を選択すると

f:id:sugimomoto:20180515225809p:plain

以下のようにWeb APIエンドポイントURLが確認できます。

ここを見てしまうと、まさにDynamics 365ですね。

f:id:sugimomoto:20180515225813p:plain

Postmanからアクセス

それでは、実際にAPIにアクセスしてみましょう。

まず、Postmanからアクセスしたいと思いますが、Postmanはローカルアプリにもかかわらず、独自のCallbuck URLが指定されているので、事前に先程構成したAzure ADのリダイレクトURL一覧に加えておきます。

f:id:sugimomoto:20180515225819p:plain

その後、Postmanを立ち上げて、認証方式でOAuth 2.0 を選択し、「Get New Access Token」をクリックします。

f:id:sugimomoto:20180515225825p:plain

以下のような画面が表示されるので、必要事項を入力し、「Request Token」をクリックしましょう。

f:id:sugimomoto:20180516002213p:plain

入力する情報のサンプルは以下の通りです。

プロパティ 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」をクリック後、以下のようにログイン画面が表示されるので、ログインと権限の委譲許可を行えば、

f:id:sugimomoto:20180515225837p:plain

以下のようにAccess Tokenが取得できます。

f:id:sugimomoto:20180515225854p:plain

このアクセストークンを使用した状態で、以下にGetリクエストを送ることで、CDSの取引先担当者一覧が取得できます。

https://(CDS環境ID).api.crm7.dynamics.com/api/data/v9.0/contacts

f:id:sugimomoto:20180515225902p:plain

細かな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は以下からトライアルを入手できます。

www.cdata.com

インストール後、Excelを立ち上げると、以下のようにCdataタブが表示されるので、そこから「取得元Dynamics 365」をクリックします。

f:id:sugimomoto:20180516000554p:plain

接続ウィザードが表示されるので、各種項目を入力し、「OK」をクリックします。

f:id:sugimomoto:20180516000618p:plain

必要な接続プロパティは以下の通りです。

接続プロパティ 設定値
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をクリックします。

f:id:sugimomoto:20180516000635p:plain

すると以下のようにWeb API経由でデータが取得でき、Excel上に一覧が表示されます。

f:id:sugimomoto:20180516000719p:plain

ちなみに、CData Excel add-inでは、ここからデータの作成・更新・削除も可能です。

終わりに

いかがでしたでしょうか! 

Dynamics 365のAPIがわかっている方であれば、かなり気軽に使えるAPIです。

知らない方でも、この機会に是非触ってみて、CDSの可能性を広げてもらえればと思います。

次回はもうちょっと具体的な利用方法を交えた記事にしてみたいと目論んでいます。