Morning Girl

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

Dynamics 365 Business Central のトライアル取得方法と API の使い方

Dynamics 365 Business Central のトライアルは個人的に何回か取得しているんですが、かなり毎回勘所を忘れてしまうので、書き残しておきたいと思います。

また、ざっとAPIを使うための下地も見えたので、OAuthやAzureADへの登録などのあたりも併せて。

Dynamics 365 Business Centralって何?

https://dynamics.microsoft.com/ja-jp/business-central/overview/

Dynamics 365 Business Central は中小企業向けに最適化されたMicrosoftが提供するERPパッケージの一つです。他にもう少し大きな企業向けの Finance がありますが、アーキテクチャAPI仕様は全然違うので注意しましょう。

f:id:sugimomoto:20191129175200p:plain

Business Central のトライアル取得方法

今回はそんなBusiness Centralのトライアルを取得するのですが、今の所日本の環境ではトライアルを取得できません。なので、英語版にうまくアクセスできるようにしたり、USリージョンのOffice365アカウントが必要だったりするので、注意が必要です。

何はともあれ、まずはUSリージョンのOffice365アカウントを取得しておきます。いろんな方法がありますが、せっかくなので Dynamics 365 ライセンスで取得してしまいましょう。

まず、以下のURLにアクセスして、Dynamics 365 CRM系(SalesやCustomer Service)を選択し、「こちらからサインアップ」をクリックします。

https://trials.dynamics.com/Dynamics365/Signup/sales

f:id:sugimomoto:20191129175207p:plain

以下のようなダイアログが表示されますが、「いいえ、サインアップを続行します」をクリックします。

f:id:sugimomoto:20191129175214p:plain

サインアップ画面にたどり着いたら、一番最初にリージョンを選択するプルダウンリストがあるので、ここで「United States」を選択します。あとは、そのまま案内通りにアカウントを作成すればOKです。(以降は割愛)

f:id:sugimomoto:20191129175219p:plain

次に、作成したOffice365アカウントを使って、Business Centralのトライアルを取得します。取得しますが、ここで一点注意が必要です。

Dynamics 365 はユーザーの言語設定で表示するアイテムを変えています。なので、ブラウザの言語設定を英語に変更してください。Chromeですと、以下のようにSettings→Advanced→LangageからEnglishを選択することで、対応可能です。設定後、一度ブラウザの再起動が必要なので注意してください。

f:id:sugimomoto:20191129175227p:plain

そうしたら、再度トライアルのセットアップ画面に移動します。すると、Business Centralのメニューが増えているのがわかるかなと思います。ここでBusiness Centralを選択し、事前に取得したUSリージョンのアカウントでGET STARTEDを実行します。

https://trials.dynamics.com/Dynamics365/Signup/sales

f:id:sugimomoto:20191129175236p:plain

ライセンスの確認などのチェックが完了すれば晴れて以下のように環境のデプロイメントが開始されます。

f:id:sugimomoto:20191129175242p:plain

少し待てば、このように、Business Centralの画面が表示されます。USのアカウントや言語設定など、ひっかかりポイントはあるものの、そこさえ押さえてしまえば難しいところはあまりありません。

f:id:sugimomoto:20191129175251p:plain

API を使う準備

さて、せっかく環境を手に入れたので、APIを叩いてみましょう。

Business CentralのAPI Referenceは以下のURLで公開されています。

https://docs.microsoft.com/en-us/dynamics-nav/api-reference/v1.0/

https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps

認証にはいくつかアプローチがありますが、今後スタンダードとして間違いの無い、Azure ADベースのOAuth 2.0 で行ってみます。

まず、Office365 管理センターなどから、Azure ADの管理画面に移動し、アプリケーションの登録を行います。

今回はローカルホストから接続するので、リダイレクトURLは「http://localhost:33333」としました。ここはポートがあいていれば、任意のものでOKです。

f:id:sugimomoto:20191129175305p:plain

次に、APIのアクセス許可を設定します。Dynamics 365 Business Centralが一覧にあるので、こちらを選択し

f:id:sugimomoto:20191129175313p:plain

「委任されたアクセス許可」から「user_impresonation」を選択します。この場合、最終的にユーザーログインが必須となるので、注意しましょう。

アプリケーション認証もあるようですが、私は現在未チェック。今後余裕があればきっと、、、。

f:id:sugimomoto:20191129175322p:plain

あとはクライアントシークレットを生成し

f:id:sugimomoto:20191129175330p:plain

アプリケーションIDをコピーすれば準備完了です。

f:id:sugimomoto:20191129175337p:plain

APIアクセスを行う前に、自身の環境情報をチェックしておきましょう。

Business Central のTOPページに移動したときに表示されるこのURLに必要情報が含まれています。

f:id:sugimomoto:20191129175353p:plain

このGUID(edb74166-0f9c-4489-92ff-9e2d3c1b68f4)とCompany(CRONUS%20USA%2C%20Inc.)をAPIリクエストで利用します。

https://businesscentral.dynamics.com/edb74166-0f9c-4489-92ff-9e2d3c1b68f4/?company=CRONUS%20USA%2C%20Inc.&dc=0

APIリクエストを行う

それでは実際にAPIリクエストを行います。ここはお馴染みPOSTMANでいってみましょう。Postmanを立ち上げて、新しいリクエストを作成し、「Authorization」→「OAuth2.0」を選択、「Get New AccessToken」をクリックします。

f:id:sugimomoto:20191129175530p:plain

OAuth 2.0 の設定値は以下のような感じです。ここで予め取得しておいたAzure ADアプリの情報を使います。(ちなみにこれらの情報は削除済みなので、使えません。あしからず。わかりやすいように生の情報を置いています)

f:id:sugimomoto:20191129175408p:plain

設定後、Request Tokenをクリックすると、ログイン画面が立ち上がるので、対象のアカウントでログインしましょう。

f:id:sugimomoto:20191129175715p:plain

ログイン後、Permissionの許可を行えば、完了です。

f:id:sugimomoto:20191129175751p:plain

無事、アクセストークンが取得できました。

f:id:sugimomoto:20191129175816p:plain

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

API Endpointは「https://api.businesscentral.dynamics.com/v1.0/{GUID}/ODataV4/」で、

Metadata APIはこんなURLになります。「https://api.businesscentral.dynamics.com/v1.0/{GUID}/ODataV4/$metadata」

まずは、Metadata APIから。GETリクエストで「https://api.businesscentral.dynamics.com/v1.0/{GUID}/ODataV4/$metadata」を指定するだけでOKです。

f:id:sugimomoto:20191129175853p:plain

次に、SalesOpportunitiesを取得してみましょう。Business CentralではTenantIDの他に、Companyでそれぞれリソースが分けられているので、URIにその指定を挟む必要があります。

その指定の後に、取得したいリソース名を付与するので、こんな感じのURIになります。

https://api.businesscentral.dynamics.com/v1.0/edb74166-0f9c-4489-92ff-9e2d3c1b68f4/ODataV4/Company('CRONUS%20USA%2C%20Inc.')/SalesOpportunities

Companyは知っていれば以下のようにGUID指定でもかまいません。

https://api.businesscentral.dynamics.com/v1.0/edb74166-0f9c-4489-92ff-9e2d3c1b68f4/ODataV4/Company('246d9e77-cf80-4bba-8f28-5047c573a9cc')/SalesOpportunities

こんな感じで取得できます。

f:id:sugimomoto:20191129175921p:plain

URIのポイントさえ押さえれば、Dynamics 365 CRM系と同じ用にアクセスできるのではないかなと思います。

APIを追加したい場合

さて、Business Centralは多数のリソースを抱えているので、予め定義されたリソースやクエリしかAPIとしてアクセスできません。なので、このビューで取得したいなーと思った場合には、API設定を追加する必要があります。

例えば、この Customer And Salesperson のビューを追加したい場合は

f:id:sugimomoto:20191129175934p:plain

検索ボタンから「Web」で検索し、「Web Services」を選択します。

f:id:sugimomoto:20191129175942p:plain

すると、現在Web APIでアクセス可能なリストの一覧が表示されるので、新しくここに追加するために「+NEW」をクリック

f:id:sugimomoto:20191129175949p:plain

後ろの方に行が追加されるので、Object TypeでQueryを選択します。

f:id:sugimomoto:20191129180005p:plain

次に定義するリソースを探します。Object IDのところから「select from full list」を選択し

f:id:sugimomoto:20191129180017p:plain

一覧画面を開いてから、Customerと入力。すると、「Cusotmer and Salesperson」のビュー定義が見つかるので、これを選択して追加します。

f:id:sugimomoto:20191129180025p:plain

最後にAPIでアクセスする際のリソースIDを指定します。ここは重複しない任意のIDを入力すればOKです。

f:id:sugimomoto:20191129180032p:plain

Publicにチェックを入れて、他の行にカーソルを合わせると、以下のようにURIが定義されます。これでAPIアクセスが可能になります。

f:id:sugimomoto:20191129180041p:plain

生成されたURLはこんな感じです。

https://api.businesscentral.dynamics.com/v2.0/edb74166-0f9c-4489-92ff-9e2d3c1b68f4/Production/ODataV4/Company('CRONUS%20USA%2C%20Inc.')/CustomerAndSalesperson

f:id:sugimomoto:20191129180049p:plain

もちろん、Postmanからも。

f:id:sugimomoto:20191129180057p:plain

以上です。