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

Dynamics 365 for Customer Engagement (Dynamics CRM) のデータを ローカルの SQL Server に1時間に1回バックアップする:CData Sync

クラウドサービスを使っていて、一番面倒なことの筆頭として、「バックアップどうするの?」があげられるんじゃないかなと思います。

もちろん、何を観点として「バックアップ」と言うのか? については多くの議論が必要になるでしょう。

Dynamics 365 自体もクラウドとしてディザスタリカバリやデータセンターのバックアップについては十分ちゃんとした対応を取っています。

でも、自分たちの手元に自分たちがコントロールできる状態にデータを持っておきたい、という考えはベンダーに依存するよりも健全であるし、多様なクラウドサービスの選択肢がある今の時代においては適切な判断ではないかと思っています。

それは採算やコスト度外視なアプローチではなく、現実的なラインで自分たちが適切にコントロールしメリットを感じられるスケールで行うことが大事かなと。

今回はそんなバックアップ手段の一つの選択肢として、Dynamics 365 for Customer Engagement のデータをローカルのSQL Serverにバックアップする方法を書き留めておきたいと思います。

続きを読む

2月20日にWindows女子部で「Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用のポイント-」の発表をしてきました

久しぶりに Dynamics 365 一色なセッションを2月20日Windows女子部で発表してきました。

(Burikaigi 2019ではちょっといろいろ手を出していたのと共同セッションだったので、また今回は毛色が違いますね。)

f:id:sugimomoto:20190226205241p:plain

connpass.com

第して、「Dynamics 365 Customer Engagement 理解のススメ -サブスクリプションビジネスモデルから読み解くカスタマーサポート機能活用のポイント-」

以下でセッションスライドを公開しています。

www.slideshare.net

なんでこんな発表をしようと思ったのか?

今回 Windows 女子部という、あまり普段 Dynamics に馴染みが無い層の方々向け、ということを考えていた部分もありますが、

おそらく大きく影響したのは私自身が「SIerでは無くなったこと」が大きなきっかけとしてあるなと思います。

視点が実際にCRMを使って、業務を効率化したり、可視化する側のエンドユーザーサイドに立ったことで、今までの自分自身の知っているコンテンツを棚卸しし、かつ私自身のエンドユーザー経験も踏まえて、Dynamics ってこういうことじゃないの? というお話をまとめてみたいなーという野望がありました。

かつ、昨今 Power Platform (Power Apps / Power BI / Flow)が広まって、徐々に認知されるようになってきた Dynamics 365 シリーズですが、まだ実際に触った方は少ないのではないかなと思うので、そもそも Dynamics 365 を理解するためには、何から始めるべきなのか? という下地の部分を訴えてみたかったところもあります。

機能とかデータモデルとか触ってみるとかのその前に、「考え方」「捉え方」から伝えてみたい。それが以下の1スライドのメッセージでも掲げられているところかなと思っています。

Dynamics 365 CEを理解するためには Dynamics 365 CE を知る・触るよりも前に 何かの課題を解決しようとした ビジネスモデル・手法を理解する必要がある

それをより明確に伝えるため、昨今のビジネスモデルの流れ、サブスクリプションビジネスモデルを取り上げることで、よりよく Dynamics 365を理解するための礎になればという感じでした。

個人的にテクニカルな内容は5%くらいで、かなり新しい試みのセッションになりました。

すごく独断と偏見と経験にまみれた内容ではあります。(Microsoftはこんなことを言ってはいないw)

でも、ビジネスモデルに多様な「解」があるように、おそらくこれも一つの「解」なのだと思って見てもらえると嬉しいです。

今後 Dynamics 365 の導入を予定されている会社の参加者からも「すごく参考になった、ここのなぜ? どうやって?使うのかという意識の部分は、私の会社でも根付かせていかなければいけない」といったコメントをいただけて、個人的な棚卸しも含めてとても有意義なセッションだったなと思います。

せっかくなので、このあたりの「考え方」の部分は、今後もどこかで発表しつつ棚卸ししていきたいなと思った次第です。

Microsoft MVP更新の季節。CData Excel Add-Inを使って、Twitter での活動情報をさくっと可視化してみる

f:id:sugimomoto:20190222144331p:plain

Microsoft MVP 更新の季節がやってまいりました。

昨年から Microsoft MVP の更新スケジュールが代わって、年度末である3月に統一されましたね。

Microsoft MVPの申請・更新には日々どのような形でコミュニティに貢献したかどうかを数値化、文書化して貢献度を可視化する必要があります。

昨今ですと、Twittter や FacebookなどSNSでの活動状況も入力するシチュエーションがあるかと思います。

ただ、ちまちまと記録をさかのぼって、集計するのもなかなか骨が折れる作業ですね・・・。

そこで、そんな面倒な作業を CData Excel-Addinを使って、Excel上でさくっと集計・可視化する方法を紹介します。

f:id:sugimomoto:20190222145219p:plain

Microsoft MVP 向け CData ツール・ドライバーの無償提供

f:id:sugimomoto:20190222144804p:plain

ちなみに、通常 CData Driver は有償のツールなのですが、Microsoft MVP向けには個人利用の範囲で無償のライセンスを提供しています!

以下のURLから申請することが可能ですので、是非申し込んでみてください。

https://www.cdata.com/jp/community/mvp/

私のTwitterFacebookに直接ご質問頂いても大丈夫です。

ちなみに、今回はTwitterですが、FacebookInstagramYoutubeWordpress などのExcel Add-inもあるので、そちらも集計することが可能です。

必要なもの

Twitter アカウント

Twitter ClientID・ClientSecret・AccessToken・AccessTokenSecert

・CData Twitter Excel-Addin

実施手順

それでは具体的な実施手順を説明していきます。

Twitter アプリ登録・認証用情報の取得

まず CData Excel Add-inを通じて Twitter APIにアクセスするために、Twitter APIアクセスに必要な各種情報を入手します。

詳しい入手方法は以前私がBlogにしたためているので、参考にしてみてください。若干UIが変わっていますが、大筋は同じです。

kageura.hatenadiary.jp

CData Twitter Excel-Addinのダウンロード・インストール

次に、CData Twitter Excel-Addinを入手します。

以下からトライアル、もしくはMVP用のライセンスがあればそれを使って、ダウンロードし、セットアップしておいてください。

https://www.cdata.com/jp/drivers/twitter/excel/

f:id:sugimomoto:20190222144453p:plain

セットアップは特に難しい設定はありません。

そのまま次へ次へと進めていくだけでインストールが完了します。

f:id:sugimomoto:20190222145849p:plain

CData Twitter Excel-Addin の 接続設定

インストールが完了するとこのようにExcelにCData タブが追加され、アドインを利用できるようになります。

f:id:sugimomoto:20190222150003p:plain

それでは、実際に接続をしてみましょう。「取得元Twitter」をクリックして、接続画面を表示します。

表示された接続プロパティ画面に、事前に取得しておいた「ClientID・ClientSecret・AccessToken・AccessTokenSecert」を入力します。

f:id:sugimomoto:20190222150107p:plain

OKをクリックして、接続テストを行い、以下のように「サーバーに接続できました」というメッセージが表示されれば、OKです。

f:id:sugimomoto:20190222150159p:plain

CData Excel Add-inでは、SQLベースでTwitterのデータが取得できるようになっています。

SQLを知らなくとも、Twitter データがテーブルやビュー・カラムの構造になっているので、かなり直感的にTwitterのデータが取得できると思います。

今回は自分自身のツイートデータを取得したいので「Tweets」テーブルを選択します。

f:id:sugimomoto:20190222150232p:plain

そして、下のSQL入力フォームに、各種条件のSQLを記述します。

例えば今回私はDynamics のデータを取得したいので、「[From_User_Screen_Name] = 'sugimomoto'」で私のツイートの絞り込み、「Text Like '%Dynamics%'」で Dynamics に部分一致の指定を行います。

SELECT * FROM [CData].[Twitter].[Tweets] WHERE [From_User_Screen_Name] = 'sugimomoto' and Text Like '%Dynamics%'

入力完了後、OKをクリックすれば

f:id:sugimomoto:20190222150515p:plain

このように過去に私がDynamics についてつぶやいたツイートの一覧が取得できます!

f:id:sugimomoto:20190222150533p:plain

あとはピボットテーブルで、IDの合計でツイート数、Favorite_CountとりRetweet_Countを取得すればOKですね。

(私の今年度の Dynamics ツイート少ないな・・・orz)

f:id:sugimomoto:20190222150605p:plain

注意事項

Twitterの無償APIは最新のものから最大3200件までしか、ユーザータイムラインのツイートを取得できません。

上記出力結果は3200件のデータを裏で取得して、そのなかの Dynamics が含まれているキーワードだけ算出しています。

1年間に3200ツイート、1ヶ月260ツイートくらいまでが取得の目処になるので、Twitter中毒の方は要注意。4半期に1回とかやっておくといいかもしれないですね。

有償のAPIを使えば、もっと柔軟に取得できますが、なかなかお高いです・・・。(最低1万円はくだらない。)

終わりに

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

今回はTwitter データだけでしたが、前述の通り他にもFacebookInstagramYoutubeなどのDriverもあるので、是非各種Driverでも試してもらえればと思います。

何かわからないこと、こんなことできないの? みたいなご質問があれば、TwitterFacebookでお気軽にどうぞー。

2月20日(水)に虎ノ門で「Windows女子部/初心者向け:Dynamics365 カスタマーサポート業務での活用ポイント解説」を開催します!

f:id:sugimomoto:20190214184050p:plain

Burikaigi 2019に続いて、Dynamics 365 関係で登壇することになりました。

今回はMS MVP の方々がリレー形式で登壇を担当する企画を開催している「Windows女子部」で発表します。

connpass.com

そして、珍しくというか、久しぶりにというか、初心者向けと銘打って、カスタマーサポート機能を中心に「Dynamics 365 Customer Engagement」を解説する予定です。

具体的にどんなお話をするの?

でも、そもそも今回お話する「Customer Engagement」、名前からして、今までDynamics 365 に関わってこなかった方々にはよくわかんないですよね。

顧客管理とかSFAとかMAとか、キーワードや世の中の風潮?みたいなもので大事っぽいっていうのはなんとなく理解している。

でも、じゃあ Dynamics 365 を使ったからって何が変わるの? っていうのがイメージできない。そんな方が多いのではないかなーと漠然と思ってます。

今回実は初心者向けとは銘を打ちつつも、個人的に結構新しい試みをしていて、昨今のビジネスモデルを土台にしながら、Dynamics 365 をどのように解釈すればいいのか? その上で、なんでこんな機能があるのか? どんな風に使えるのか? というのをお話する予定です。

是非、今まで Dynamics 365 を触ったことが無い人も、触っている人も、開発している人も、参加してもらいたいなーと思います。

3月1日(金)に仙台で「【JAZUG TOHOKU】ZOZO前澤社長お年玉リツイート企画のビッグデータに立ち向かう方法」を開催します!

f:id:sugimomoto:20190208000317p:plain

1月28日(月)に日本マイクロソフト品川本社セミナールームで開催した「ZOZO 前澤社長のお年玉リツイート企画は、どのくらい世の中に影響を与えたのか?」の仙台スピンオフを開催することになりました!

イベントページはこちらからどうぞ。

【JAZUG TOHOKU】ZOZO前澤社長お年玉リツイート企画のビッグデータに立ち向かう方法 - connpass

東京開催時のTwitterまとめもあるので、どんな感じなのかなーと気になっている方は見てみてください。

togetter.com

会場は以前も Azure 勉強会でお世話になりましたSRIAさんのオフィスです! 仙台駅から徒歩圏内。

www.sria.co.jp

セッション終了後には LT & ビアバッシュ会になっていますので、是非お気軽にご参加ください!

大量の JSON データからスキーマを解析して、Azure SQL Database にレプリケートする:CData Sync

先日公開した「500万件を超えるTwitterリツイート データを取得・分析する方法」で取得したJSONデータをAzure SQL DataBaseにレプリケートして分析するアプローチを紹介しました。

bit.ly

ただ、元記事ではアプローチの紹介が中心で、実際の手順や機能に関する紹介ができなかったので、本記事で改めてこのCData Syncの使い方・およびJSONデータのスキーマを解析して Azure SQL DataBaseにレプリケートする方法を紹介しようと思います。

f:id:sugimomoto:20190205154120p:plain

続きを読む