【Excelアドイン】Dynamics 365 Business CentralのレポートをExcel上に作成してみる

今回は、[Dynamics 365 Business Central](https://dynamics.microsoft.com/ja-jp/business-central/overview/)のコネクター(データモデル)を設定し、デモデータベースに接続してレポートを作成してみます。
### データモデルの入手 ###
Sharperlightのホームページに行きます。
https://www.sharperlight.com/
**Resources**をクリックし、プルダウンメニューを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9b2a2204-5b24-a647-bdcd-92047118c18b.png)
**Datamodels**メニューアイテムを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5b081214-a1a1-df75-b4af-5e750e522a04.png)
Datamodelsのページのツリービューより、**BUSCENTRAL - Dunamic 365 Business Central**を選択します。すると、右側に様々なアイテム一覧が表示されます。 
その一覧から、**BusCentral**データモデルを探し出し、`Download`ボタンをクリックします。データモデルのダウンロードが直ぐに開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8051daf1-abf9-ee09-bd80-a098eaed31cb.png)
### デモデータベースの入手 ###
データベースは、このデータモデルに組み込まれているAPIとの対話機能を利用して、計画的かつ緻密にシンクロされるようになっているのですが、今回は概要ということで、あらかじめ用意したデモデータベースを使用します。

同じアイテム一覧から**Demo Database**フォルダを開き、ZIPされたデモデータベースをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0c1fd241-2a04-4766-813c-3951e2125960.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/3213e509-99de-8ff0-db4b-a6b89071c56b.png)
### データモデルのインストール ###
Sharperlightアプリケーションメニューから、`データモデルのインストーラー`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c60826be-5ec0-ad9f-0371-a7be460819e7.png)
`追加`ボタンをクリックし、先ほどダウンロードしたデータモデルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5e15b180-a1e8-6d80-9636-b295a6046688.png)
このように追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/efa3bc20-3d89-b222-1365-76f72b93a19d.png)
`再コンパイル`ボタンをクリックして、データモデルをコンパイルします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f4874126-6988-2ced-3bf7-90b985c25534.png)
### デモデータベースのリストア ###
Microsoft SQL Server Management Studio(以下SSMS)を起動し、ご利用のデータベースサーバーに接続します。
先ほどダウンロードしたデモデータベースZIPファイルからバックアップファイルを解凍します。
SSMSのデータベースリストア機能を利用して、デモデータベースをインストールします。
（バックアップは、SQL Sever 2017で作成され、バックアップされています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a7c8a2ce-5d72-bc64-8e3f-63945a57e682.png)
### データモデルとデータベースの接続 ###
データモデルとデータベースの接続は**クライアントのセットアップ**で行います。
Sharperlightアプリケーションメニューから`クライアントのセットアップ`を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f1ccfa58-b070-765e-cbbf-60376e08e386.png)
ローカル接続のDynamics 365 Business Centralの接続詳細を設定します。
Microsoft SQL Sever (Windows認証)あるいはMicrosoft SQL Sever (データベースサーバーの認証)どちらかを選択します。
設定が終了したら、`接続テスト`で接続が正しく行われるか確認します。
`OK`ボタンを押して設定を保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f3a437a9-2953-eca5-7887-bff4c6ca15df.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/529167e6-601c-f488-3862-a1beeb4c4612.png)
### レポートの作成 ###
Microsoft Excel上にレポートを作成してみます。
Microsoft Excelを起動します。`SharperlightXL`タブに移動します。
SharperlightXLのリボンが表示され、様々な機能アイコンが見えます。
セル**F5**を選択してから`テーブル`アイコンをクリックします。テーブル作成をサポートする**クエリビルダ**が起動します。
#### フィルターの設定 ####
`モード`には**概要レポート**を選択します。
`製品`はもちろん**Dynamics 365 Business Central**を選択します。
`Company`の値フィールドをダブルクリックし検索ダイアログを表示させ、一覧から**DEFAULT**を選択します。
`テーブル`には**Customer Ledger Entry**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8a46e79a-d4f1-c9b3-fe22-9dfde3ff517c.png)
#### 出力アイテムの選択 ####
選択領域のツリー一覧から**Customer No**と**AmountLCY**をそれぞれダブルクリックして出力領域に転送します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/114d7e10-a364-3e6c-0a40-88279153d32c.png)
`18\Customer`フォルダ(JOINを表す)を展開し、**Name**を出力領域に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c933b49d-c354-0b81-1981-95158c8cc715.png)
出力領域に設定されたフィールドの説明をレポート用に編集します。それぞれのフィールドを選択し、右クリックメニューから`説明の変更`を選択し、それぞれ**顧客番号**、**顧客名**、**金額**と変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/cdf4096e-87d9-ef7d-4437-1a62eb85f276.png)
`プレビュー`ボタンでクエリを走らせてみましょう。このような結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/005c16e0-5f50-ad7c-9209-73f78faa71b3.png)
では、`OK`ボタンで保存、実行とします。
クエリー名編集ダイアログが表示されますが、そのまま`OK`を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/663a4d5c-09c9-72a9-1b46-8f133f312929.png)
Excelシート上にテーブルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b5818f27-515b-dd35-4cd0-497c4eacc500.png)
テーブルアイコンをクリックする前に選択したセル**F5**を再度選択してみてください、Sharperlightのテーブル式が設定されているのが見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0f45877b-1bb2-1185-5727-548e15e9f4d2.png)
セル**F5**をダブルクリックすると再度クエリビルダが起動して、クエリの編集が行えます。
#### フィルターへのセル参照の設定 ####
このままでは、フィルター値を変更するには毎回クエリビルダを起動する必要があります。シート上でフィルター値を変更可能にします。
先ず、セル**C7**に```<DEFAULT>```と入力します。
セル**F5**をダブルクリックしてクエリビルダを起動します。
`Company`の値フィールを選択した状態にします。セル**C7**をダブルクリックします。セル参照式が`Company`の値フィールドに設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/258e02e7-f558-260a-9b73-94e49b48f4e6.png)
`OK`ボタンで保存します。
セル**C7**をダブルクリックしてみてください。検索ダイアログが起動し、Companyが選択可能になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/98877a18-57c2-c9a2-af57-081a8fbc29c2.png)
もう少しクエリを編集してみましょう。今度は3つほどフィルターを追加します。
選択領域で、下記の3つのフィールドを探しフィルター領域にドラッグ＆ドロップします。
- Document
- Due Date
- Open

それぞれのフィルター値を下図のように設定します。Due Dateフィルターにはセル参照が使用されていることに注意してください。上記で行ったように、設定したい値フィールドを選択し、参照したいセルをダブルクリックします。このケースでは、セル**C8**が参照されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/01585236-a024-87f5-e19b-14a618fb7c30.png)
`OK`ボタンで保存します。
Due Dateフィルターで参照したセル、すなわちC8をダブルクリックします。日付オプションダイアログが表示されます。30/06/2022を設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a41ed331-9f1e-76c5-6e59-87cba0360647.png)
日付を選択しOKボタンを押した直後、Sharperlightのテーブル式が再計算されてテーブルが更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4687ad0d-5774-d8d5-54f8-e5d3c52919b3.png)
これでレポートはできました。
あとはちょっと見た目を整えて完了:v:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0de1503a-ddde-6f7b-7a86-6a6db77e1c2b.png)
### データの同調 ###
Dynamic 365 Business Centralはクラウドベースのソリューションです。
上記の記事では、サンプルデータベースを利用しましたが、Sharperlight Business Centralデータモデルは、基本的にクラウドからデータをローカルデータベースに同調させてレポーティングを行うよう設計されています。但し、書き戻し機能ではBusiness CentralのAPIを利用したクラウドへの直接な書き戻しを実現しています。

データの同調には、Sharperlightスケジューラが使用されています。
Sharperlightスケジューラのデータ同調タスクをスケジューリングして、毎日決まった時間にデータの同調を行うことで常に最新のデータを利用したレポーティングが可能になります。
また以下の方法でお好きな時に同調タスクを実行することもできます。

Sharperlightアプリケーションメニューから**ソリューション**を起動し、`Dynamic 365 Business Central`ノードの`Homepage`を選択し、右クリックメニューから`実行`を選択すると、主ダッシュボードページが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5ea202ab-c0c3-90e6-6255-74cc71a82a9b.png)
`Scheduler`タブで`Scheduled Tasks`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/55c32501-4a00-18e3-2938-3c270c99331b.png)
スケジューラのタスク一覧が表示されます。この画面より手動でデータ同調タスクを実行することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4f1bc167-9302-1d17-8330-861a7e343338.png)

Sharperlight で Dynamics 365 Business Central のレポート作成をお楽しみください!!