SharePoint OnlineとJavaScript帳票ライブラリで作る帳票システム（1）

# はじめに
「[SharePoint Online](https://www.microsoft.com/ja-jp/microsoft-365/sharepoint/collaboration)」は、ファイル管理やチームコラボレーションに優れた機能を提供し、多くの企業が活用しています。SharePoint Online上でファイル管理を行ったり、「[Microsoft Lists](https://www.microsoft.com/ja-jp/microsoft-365/microsoft-lists)（SharePointリスト）」を使ってデータを管理している方も多いのではないでしょうか？

JavaScript帳票ライブラリ「[ActiveReportsJS（アクティブレポートJS）](https://developer.mescius.jp/activereportsjs)」では、多くの方が利用されているSharePoint Online上でも使用できる「Microsoft Lists」のようなクラウドサービスのデータをデータソースとして活用し、Web帳票を簡単に作成することが可能です。
さらに、ActiveReportsJSの帳票デザインファイルをSharePoint Online上に格納し、Web画面から選択可能にしておくことで、複数の帳票を表示することが可能な帳票システムの構築も可能です。

請求書などの帳票は外部のサービスなどを使っているという方もいらっしゃるかもしれませんが、SharePoint Onlineを使っている場合は、ActiveReportsJSを活用すると内製化も可能ですので、参考にしていただけると幸いです。

![activereportsjs-sharepointonline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/46db72ce-2835-5fb4-ffee-61eaba1b92d7.png)

## 事前準備

事前準備として次の環境やツールを準備します。

### Microsoft 365環境

企業向けの「Microsoft 365」を使用するため、今回は記事では[Microsoft 365 E5 開発者サンドボックス サブスクリプション](https://learn.microsoft.com/ja-jp/office/developer-program/microsoft-365-developer-program-get-started)の環境を利用していきます。この環境は[Microsoft 365 開発者プログラム](https://learn.microsoft.com/ja-jp/office/developer-program/microsoft-365-developer-program)に参加することで使用可能です。今回の記事では管理者向けの機能も必要となります。「Microsoft 365」を既にご利用中の方でも、管理者権限が無い方や、既存環境で試すことができない場合は、こちらの環境を準備してください。

環境のセットアップ手順については、Microsoft Learnの[セットアップ手順](https://learn.microsoft.com/ja-jp/office/developer-program/microsoft-365-developer-program-get-started#set-up-your-microsoft-365-e5-sandbox-subscription)を参考にデフォルトの状態でセットアップしてください。

### Graph エクスプローラー

SharePoint Onlineへの接続に関しては、「[Microsoft Graph API](https://learn.microsoft.com/ja-jp/graph/overview)」を通じて行います。[Graph エクスプローラー](https://learn.microsoft.com/ja-jp/graph/graph-explorer/graph-explorer-overview)は、Graph APIで提供されているさまざまなAPIの動作を確認する為のツールです。今回はこちらを利用して、動作確認を行うために利用します。

* [https://developer.microsoft.com/en-us/graph/graph-explorer](https://developer.microsoft.com/en-us/graph/graph-explorer)
    <small>※ 事前準備したMicrosoft365環境のアカウントでログインします。</small>

### Visual Studio Code

Webアプリケーションの開発・実行時に使用します。以下から最新バージョンを取得しインストールしてご使用ください。
<small>※ 今回の記事では使用しません。次回Webアプリケーションの作成にて使用します。</small>

### ActiveReportsJS

今回はActiveReportsJS「V5J（v5.0.3）」を使用します。事前準備として、あらかじめ製品版、またはトライアル版をインストールしてください。トライアル版は無料で以下より入手可能です。
* [トライアル版](https://developer.mescius.jp/my-account/trial-product/ActiveReportsJS)

## Listsの作成

最初に帳票のデータソースとなるListsとデータを準備します。今回は以下のExcelファイルのデータを元に作成します。事前にダウンロードし任意のローカルフォルダへ展開しておいてください。

* [Listsデータ用Excelファイル](https://download.mescius.jp/blogs/devlog/sampleresources/20240911/ListsData.zip)

まずはじめに、SharePoint Onlineのデフォルトサイトを表示し、次の図のように「新規」-「リスト」を選択します。

![add-lists-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/4dcdc34f-fbc9-0e3d-3372-4c1330b42b1f.png)


「リストを作成」画面の表示後、「Excelから」を選択します。
![add-lists-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/96ab55dc-8f30-f346-a92d-b1f154a790db.png)



「Excelから」画面の表示後、［ファイルのアップロード］ボタンを押します。
![add-lists-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/29750536-e565-ecf3-f57c-c2f17973dfc7.png)


フォルダダイアログから、事前に用意しておいた「Listsデータ用Excelファイル」内からファイルを一つを選択してアップロードします。
![add-lists-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/579f9042-df83-3de6-dec2-203198bcd9d8.png)


ファイルのアップロードが完了すると、以下のようにListsの作成画面となります。必要に応じて「列の種類（型）<sup>※</sup>」を変更して［次へ］ボタンを押します。
<small>※ Excelファイル上で日付時刻の形式の列の場合については、「日付と時刻」の種類に変更する必要があります。</small>
![add-lists-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/53898213-5003-3319-f053-4954ed940cdb.png)
続いて、Listsの名称を設定し、［作成する］ボタンを押します。
![add-lists-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/587b4776-376e-39a8-8dd7-b5a0249c40a5.png)


最終的に、次のような「Lists」が作成されます。この手順を「Invoice.xlsx」、「Orders.xlsx」、「bsdata.xlsx」それぞれのファイルに対して繰り返し行い3つの「Lists」を作成してください。
![add-lists-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/740443f6-d3cd-0644-897a-6a76dd6c9362.png)


## フォルダの作成

続いてレポートファイルを保存する為のフォルダを作成します。今回はサイトのドキュメント配下に「ActiveReportsJS_ReportsFile」というフォルダを作成しました。
![create-folder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/321581c0-0b12-dca2-c4cb-43b01f2426ed.png)


## SharePoint Onlineの情報を取得する

リストの作成終了後、帳票システム構築の為に以下のSharePoint Onlineの情報を[Graph エクスプローラー](https://developer.microsoft.com/en-us/graph/graph-explorer)を利用して取得します。

<figure class="wp-block-table">

| 取得項目 | 内容 |
| --- | --- |
| サイトID | ファイルの格納先、Listsの作成先となる、サイト情報 |
| リストID | 作成したListsのID情報 |
| ドライブID | サイトの配下にあるドライブのID情報 |
| フォルダID | ドライブ配下に存在していて、ファイルを格納しているフォルダのID情報 |
| アクセストークン | Share Point Onlineにアクセスする為の認証情報 |

</figure>

### アクセストークンの取得

Graphエクスプローラーを開き、今回利用するSharePoint Onlineと同じアカウントでログインすると、以下の画面が表示されます。画面内のオレンジ枠で示された「Access token」を選択すると、SharePoint Onlineにアクセスするための認証情報を取得できます。この情報は、帳票デザイン時にSharePointのリストに接続する際に使用します。
![graph-explorer-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/bf6f3996-32d2-028c-0439-b2af3ded5fc5.png)

### サイトIDの取得


Graphエクスプローラーを使い各種情報を取得するには、次の図のように左側のSample queriesから取得対象となるクエリを選択します。選択後、必要に応じて情報を追加し［Run query］を押すと、情報が取得できます。

次の図では、使用する環境のサイトIDの情報を取得しています。今回はデフォルトで作成済みのサイト「Communication site」を取得して、使用していきます。

![graph-explorer-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/fa51c0e1-b0bb-cabe-5379-ae5bcdf4dd49.png)

### リストIDの取得

続いて、リストIDを取得します。先ほどと同様にSample queriesから取得対象となるクエリを選択します。今回は、「ルートサイトのリストを列挙する」を選択します。クエリを実行すると、対象のサイト下に存在するリストが列挙されていますので、その中から今回作成した「Orders」、「Invoice」、「bsdata」のLists情報から、IDの項目を取得します。
![graph-explorer-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/2c3bcb66-6bcf-5c00-0a03-cc5a52ce012c.png)


### ドライブIDの取得

続いて、ドライブIDを取得します。「ルート サイトの下のドキュメント ライブラリを列挙する」のクエリを実行し、以下のようにIDを取得します。
![graph-explorer-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/4d29f5da-0d98-85b8-f2b9-85a034db803c.png)


### フォルダIDの取得

最後に、フォルダIDを取得します。フォルダID取得用のサンプルクエリはありませんので、以下のクエリを実行してフォルダIDを取得します。

<div class="hcb_wrap">

```
https://graph.microsoft.com/v1.0/drives/{取得済みドライブID}/items/root/children
```

</div>

![graph-explorer-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/1588892c-a54a-07b8-b98a-c16180cfedd3.png)


## レポートファイルの作成

一連の準備が出来たら、ActiveReportJSデザイナを用いて、SharePoint Online上での帳票作成のため、レポートファイルを作成していきます。

### レポートパラメータの追加

最初に、SharePoint Onlineの情報を格納する為のレポートパラメータを追加します。デザイナの「データ」タブを選択すると、次の図のようにパラメータセクションを表示されます。このセクションの「＋追加」にてパラメータを追加していきます。
![create-parameter-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/8d751af6-d4a5-4416-611f-5ff148c7ef03.png)

はじめに「Bearer」パラメータを追加します。このパラメータはWebアプリ側で生成されたSharePoint Onlineの認証情報を、ActiveReportJSのデータソースとして指定するWeb APIの認証情報として使用します。帳票デザイン時点では「Graph エクスプローラー」で取得した「Access token」を設定することで、Web APIよりデータを取得することが可能です。
![create-parameter-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/42e4bda7-fc1e-c26d-92e9-8e616dcd05a4.png)

続いて、「siteId」パラメータを追加します。このパラメータは、SharePoint Onlineのサイト情報を格納します。なお、このパラメータはWebアプリ側から情報を渡すものではなく、取得済みのサイトIDをあらかじめ設定しておくための変数として使用します。

![create-parameter-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/83cebda0-8ad2-0227-888a-de0e5e97931b.png)


さらに「listId」パラメータを追加します。このパラメータは、作成する帳票に応じたSharePoint OnlineのListsのIDを設定します。こちらのパラメータも取得済みのリストIDをあらかじめ設定しておくための変数として使用しています。

![create-parameter-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/b8697fab-17f7-a77b-2ac9-d86a41c66e01.png)

### データソースの作成

レポートパラメータの準備ができましたら、デザイナよりデータソースの作成を行います。「SharePoint Online」のListsへ接続する為、エンドポイントに「`https://graph.microsoft.com/v1.0/`」を設定します。さらにHTTPヘッダへ「`Authorization`」を追加し、その値にはレポートパラメータとして作成した「`{@Bearer}`」を設定します。

![create-datasource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/cf4124ef-6387-7cf5-b80a-d37d8c73f4a2.png)


### データセットの作成

続いてデータセットの作成を行います。追加した「データソース」から「＋」を選択し作成します。ダイアログ表示後、次の図と表のように設定を行います。

![create-dataset-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/0f84a5e3-2b69-542b-8339-424cf618e8e6.png)


<figure class="wp-block-table">

| 設定 | 設定値 | 備考 |
| --- | --- | --- |
| URI/パス | sites/`{@siteId}`/lists/`{@listId}`/items | SharePoint OnlineのListsを取得。レポートパラメータとして、作成した`{@siteId}`、`{@listId}`を設定する。 |
| パラメータ | パラメータ：expand 値：fields | 取得したListsのfieldsを取得する為の設定 |
| JSONパス | `$.[*].[fields]` | データ取得のJSONパス |

<figcaption class="wp-element-caption">上記設定後、［検証］ボタンを押すと、次の図のようにパラメータ値の設定ダイアログが表示され設定済みの値がセットされています。このままの状態で［保存して実行］ボタンを押します。</figcaption>

</figure>

![create-dataset-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/2a5db20e-3f5f-cc9f-6431-ea6da5a0c6f6.png)

実行後、次の図のようにフィールドセクション内に対象のListsのデータベースフィールドが追加されますので、［変更を保存］ボタンを押せばデータセットが追加されます。


![create-dataset-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/90600248-4bb5-a92d-7ead-1dbcc119c965.png)

自動設定されたデータベースフィールドには帳票作成に不要な項目を含まれています。また、ExcelファイルからListsを作成した場合、Lists内部の列名が自動的に「field_“数値の連番"」に設定されますので、この点も留意してください。

今回作成するレポートでは最終的に以下の表のような設定となります。

<div class="accordion"><details><summary>「Invoice」データのフィールド設定</summary>

<div class="content">

<figure class="wp-block-table is-style-regular">

| フィールド名 | データフィールド |
| --- | --- |
| ID | Title |
| BillNo | field_1 |
| SlipNo | field_2 |
| CustomerID | field_3 |
| CustomerName | field_4 |
| Products | field_5 |
| Number | field_6 |
| UnitPrice | field_7 |
| TaxRate | field_8 |
| Date | field_9 |

</figure>

</div>

</details><details><summary>「Orders」データのフィールド設定</summary>

<div class="content">

<figure class="wp-block-table is-style-regular">

| フィールド名 | データフィールド |
| --- | --- |
| OrderID | Title |
| CustomerID | field_1 |
| EmployeeID | field_2 |
| OrderDate | field_3 |
| RequiredDate | field_4 |
| ShippedDate | field_5 |
| ShipVia | field_6 |
| Freight | field_7 |
| ShipName | field_8 |
| ShipAddress | field_9 |
| ShipCity | field_10 |
| ShipRegion | field_11 |
| ShipPostalCode | field_12 |
| ShipCountry | field_13 |

</figure>

</div>

</details><details><summary>「bsdata」データのフィールド設定</summary>

<div class="content">

<figure class="wp-block-table is-style-regular">

| フィールド名 | データフィールド |
| --- | --- |
| name | Title |
| bs_id | field_0 |
| bs_name | field_1 |
| accounting_id | field_2 |
| category_id | field_3 |
| category | field_5 |
| amount | field_6 |

</figure>

</div>

</details></div>

### レイアウトの作成

データソースとデータセットの作成が完了したら、レイアウトを作成していきます。今回は3つのレイアウトを作成しますが、レイアウトの詳しい内容については[こちらのレイアウトファイル](https://download.mescius.jp/blogs/devlog/sampleresources/20240911/ReportsFile.zip)をダウンロードしてご確認ください。また、ActiveReportsJSでの帳票デザイン方法については、以下の記事もご参考ください。
![reports-design-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/5d756f74-4bce-420a-9904-d2b1f2ee8b00.png)
![reports-design-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/54e03191-286d-09f8-e882-2f84598f1057.png)
![reports-design-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/b8dd53c8-c30f-ca70-f2e6-bad627fbcf75.png)

### プレビューの実行

レイアウトを完成したら、デザイナ上部の「プレビュー」をクリックしてプレビューを実行すると、次のように「SharePoint Online」のListsから取得したデータが帳票で表示されました。
![sharepointlists-invoice-preview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/6966ef74-acbe-5220-ccd7-98e11b0c8f95.gif)

![sharepointlists-orders-preview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/b967edba-1b87-cfea-a333-5328db2cf134.gif)

![sharepointlists-bsdata-preview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2507810/da08de46-d216-2007-c9a9-aea094691a79.gif)


## さいごに

今回は「ActiveReportsJS」と「SharePoint Online」を利用した帳票システムを開発方法として、使用する環境の準備や「SharePoint Online」の情報の取得方法、レポートファイルの作成について解説しました。

次の記事では、SharePoint Online上に配置したレポートファイルを参照し、複数の帳票を表示可能なWebアプリケーションの作成方法について解説していきます。

https://qiita.com/masataka-yonei/items/4ae627a53640a9c59f24