Dynamics 365 Business Central GraphAPI(Beta)を触ってみる:トライアル取得からGraphエクスプローラーでアクセスするまで
Dynamics シリーズとしては初となる、GraphAPI エンドポイントが Dynamics Business Centralで提供されはじめましたー。
まだ、Betaの状況ですが、基本的な機能は試せる感じです。
今回はトライアルアカウントの取得方法とGraphエクスプローラーでテストするまでを書き留めておきたいと思います。
Dynamics 365 Business Centralって?
https://dynamics.microsoft.com/ja-jp/business-central/overview/
公式サイトから引用すると
財務、営業、サービス、運用を結び付けることができるオールインワンの ERP ビジネス管理ソリューション
もともとはDynamics NAVとして提供されていた製品が Dynamics 365に統合され、正式にクラウド版として提供を開始され、製品名をリブランディングした、といった形でしょうか。
日本では、PBCが日本語へのローカライゼーションを行って、提供していますね。
https://www.pbc.co.jp/product/microsoft-dynamics-nav/dynamics-365-business-central/
Business Central Graph APIドキュメント
以下のURLで API ドキュメントが提供されています。
もともとはDynamics 365 BC のユーザー画面やWeb Serviceの画面から認証用のKeyを発行したり、有効化を行ったりしていましたが、今回からGraphAPIに統合されたので、認証もAzure ADベースで行います。
Azure ADでのアクセス方法は以前私のBlodでも書いていましたが、今回はGraphエクスプローラーで簡易的に試すので割愛します。
GraphAPIなのでもちろんODataベースでの提供です。
Dynamics 365 BC自身も以前からODataでAPIを提供していたので、あまり操作感は変わらないでしょう。
ページングやフィルター、バッチ要求なども恐らくGraphAPIの機能範囲でサポートされると思いますが、細かなサポート範囲は特に記載がありませんでした。
トライアルを申し込む前に
トライアルにはUSのOffice365アカウント(XXX@XXX.onmicrosoft.com)が必要です。現在日本地域で取得したOffice365アカウントでは作成することができません。
Dynamics 365 のページからはアカウントを作ることができなくなっているみたいなので、適当にOffice365 USサイトからE3のトライアルを申し込むのがいいと思います。
https://products.office.com/en-us/business/office-365-enterprise-e3-business-software
Business Central の Free Trial を申し込む
US版Office365アカウントを取得してしまえば、環境の取得は結構簡単です。
以下のURLにアクセスして、「START FREE」をクリック
https://dynamics.microsoft.com/en-us/business-central/overview/
取得したUS版Office365アカウントを入力して、SignUP
あとは2クリックくらいするだけで、特に難しい設定はなく作業が完了します。らくちん。
Graphエクスプローラーで戯れる
それでは、APIを試してみたいと思います。
以下のURLにアクセスして、取得したアカウントでサインインします。
https://developer.microsoft.com/ja-jp/graph/graph-explorer
ログイン後、必要な委譲権限を追加します。権限はシンプルで、一つだけ。
Financials.ReadWrite.All
以下のようにドキュメントに記載されています。
これを付けて再度認証すればOKです。
APIの実行
Dynamics 365 BCは会社情報(Companies)を中心としてデータが集積されています。
なので、とりあえずCompaniesを取得してみます。
GET https://graph.microsoft.com/beta/financials/companies
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#financials/companies", "value": [ { "id": "c79fb153-0632-4e09-bad7-ccb78bd13dac", "systemVersion": "29776", "name": "CRONUS USA, Inc.", "displayName": "CRONUS USA, Inc.", "businessProfileId": "" }, { "id": "a5d0bc68-7ab8-4ab5-99ab-a30aa5d250f3", "systemVersion": "29776", "name": "My Company", "displayName": "", "businessProfileId": "" } ] }
次に対象のCompaniesが特定できたので、その会社に紐付いた顧客を取得してみます。
companiesに対象の会社GUIDを渡して、accountsエンドポイントを叩きます。
companies('c79fb153-0632-4e09-bad7-ccb78bd13dac')/accounts
GET https://graph.microsoft.com/beta/financials/companies('c79fb153-0632-4e09-bad7-ccb78bd13dac')/accounts
こんな感じで取得できました。
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#financials/companies('c79fb153-0632-4e09-bad7-ccb78bd13dac')/accounts", "value": [ { "@odata.etag": "W/\"JzQ0O3RRQ2NNZUZNMUtWa2VmQytLRHZQbmFtZW9od2JjTThFR3ZjbWpNWGtmQ3c9MTswMDsn\"", "id": "fed40b9a-754d-420a-82b0-03530193b3dc", "number": "40100", "displayName": "Income, Services", "category": "Income", "subCategory": "Income, Services", "blocked": false, "lastModifiedDateTime": "2019-03-24T13:21:11.5Z" }, { "@odata.etag": "W/\"JzQ0O3pCWG9YN2MxVnNGY0xSdWRYWWh6VVFiSTBkWUNmWVB4NHlvS2tBaXVQa2s9MTswMDsn\"", "id": "aa758160-4702-4a48-bb56-03dc92845959", "number": "10600", "displayName": "Prepaid Insurance", "category": "Assets", "subCategory": "Prepaid Expenses", "blocked": false, "lastModifiedDateTime": "2019-03-24T13:21:10.63Z" } ] }
せっかくなので、顧客情報の作成も試してみようと思いましたが、
https://docs.microsoft.com/ja-jp/graph/api/dynamics-create-customer?view=graph-rest-beta
POST https://graph.microsoft.com/beta/financials/companies('c79fb153-0632-4e09-bad7-ccb78bd13dac')/accounts
{ "number": "10000", "displayName": "Coho Winery", "type": "Company", "address": { "street": "192 Market Square", "city": "Atlanta", "state": "GA", "countryLetterCode": "US", "postalCode": "31772" }, "phoneNumber": "", "email": "jim.glynn@cronuscorp.net", "website": "", "taxLiable": true, "taxAreaId": "taxAreaId-value", "taxAreaDisplayName": "tax area", "taxRegistrationNumber": "28012001T", "currencyId": "currencyId-value", "currencyCode": "USD", "paymentTermsId": "paymentTermsId-value", "shipmentMethodId": "shipmentMethodId-value", "paymentMethodId": "paymentMethodId-value", "blocked": false, "overdueAmount": 0, "totalSalesExcludingTax": 0, }
「Entity does not support insert.」と怒られてしまいました。このあたりはまだBetaだからなんでしょうか?
{ "error": { "code": "BadRequest_MethodNotAllowed", "message": "Entity does not support insert.", "innerError": { "request-id": "ca27a7a2-caca-485e-86b4-4e5138f760a6", "date": "2019-04-14T06:50:37" } } }
とりあえず、試せるだけ試せることがわかったので、今回はこれで満足です。
Publicリリースはいつになるのか、気になるところですねー。