Morning Girl

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

Dynamics 365 Business Central GraphAPI(Beta)を触ってみる:トライアル取得からGraphエクスプローラーでアクセスするまで

Dynamics シリーズとしては初となる、GraphAPI エンドポイントが Dynamics Business Centralで提供されはじめましたー。

まだ、Betaの状況ですが、基本的な機能は試せる感じです。

今回はトライアルアカウントの取得方法とGraphエクスプローラーでテストするまでを書き留めておきたいと思います。

Dynamics 365 Business Centralって?

f:id:sugimomoto:20190414155422p:plain

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/

f:id:sugimomoto:20190414155937p:plain

Business Central Graph APIドキュメント

以下のURLで API ドキュメントが提供されています。

docs.microsoft.com

f:id:sugimomoto:20190414155437p:plain

もともとはDynamics 365 BC のユーザー画面やWeb Serviceの画面から認証用のKeyを発行したり、有効化を行ったりしていましたが、今回からGraphAPIに統合されたので、認証もAzure ADベースで行います。

docs.microsoft.com

Azure ADでのアクセス方法は以前私のBlodでも書いていましたが、今回はGraphエクスプローラーで簡易的に試すので割愛します。

kageura.hatenadiary.jp

GraphAPIなのでもちろんODataベースでの提供です。

docs.microsoft.com

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

f:id:sugimomoto:20190414155531p:plain

Business Central の Free Trial を申し込む

US版Office365アカウントを取得してしまえば、環境の取得は結構簡単です。

以下のURLにアクセスして、「START FREE」をクリック

https://dynamics.microsoft.com/en-us/business-central/overview/

f:id:sugimomoto:20190414155556p:plain

取得したUS版Office365アカウントを入力して、SignUP

f:id:sugimomoto:20190414155608p:plain

あとは2クリックくらいするだけで、特に難しい設定はなく作業が完了します。らくちん。

f:id:sugimomoto:20190414155617p:plain

Graphエクスプローラーで戯れる

それでは、APIを試してみたいと思います。

以下のURLにアクセスして、取得したアカウントでサインインします。

https://developer.microsoft.com/ja-jp/graph/graph-explorer

f:id:sugimomoto:20190414155625p:plain

ログイン後、必要な委譲権限を追加します。権限はシンプルで、一つだけ。

Financials.ReadWrite.All

f:id:sugimomoto:20190414155631p:plain

以下のようにドキュメントに記載されています。

f:id:sugimomoto:20190414155638p:plain

これを付けて再度認証すればOKです。

APIの実行

Dynamics 365 BCは会社情報(Companies)を中心としてデータが集積されています。

なので、とりあえずCompaniesを取得してみます。

docs.microsoft.com

GET https://graph.microsoft.com/beta/financials/companies

f:id:sugimomoto:20190414161632p:plain

{
    "@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

f:id:sugimomoto:20190414155715p:plain

こんな感じで取得できました。

{
    "@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,
}

f:id:sugimomoto:20190414155730p:plain

「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リリースはいつになるのか、気になるところですねー。