Morning Girl

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

SharePointのデータをSQL Serverリンクサーバー+CData ODBC Driverを利用してデータベースのようにアクセスできるようにしてみる

SQL Serverの機能の一つ、リンクサーバーってご存知ですか?

不勉強なことに、私は今の会社に入社するまで知らなかったんですが、これがなかなかおもしろい機能なのです。

公式サイトからの画像がわかりやすいので、引用してみました。

リンク サーバー (データベース エンジン) | Microsoft Docs

f:id:sugimomoto:20171211225643p:plain

上記イメージのように、つまるところSQL Serverのデータベースにアクセスするような形で、OracleAccessなんかにアクセス(OLE DB プロバイダ経由)することができるようになるという、面白い機能です!(知っている方からすれば、当たり前じゃんと思われるかもですが)

そして、今日はこのリンクサーバー機能を拡張して、SharePointにアクセスできるようにする方法を紹介したいと思います。

ちなみに、この記事はOffice 365 Advent Calendar 2017の12日目です!

adventar.org

で、何が嬉しいの?

結構ここが重要なポイントだと思います。

結果的にどんなイメージになるかと言えば、以下のような形で、SharePointのリストやタスクなどのデータがSQL Server上で扱えるテーブルとして表示されるようになり

f:id:sugimomoto:20171211225733p:plain

SharePointのデータをSQLで扱えるようになります。

f:id:sugimomoto:20171211225740p:plain

え? SharePointのデータをSQL Serverデータベースのように表示できるだけなの? って、私も初めは思っていました。

それって、例えば開発するのであれば、ADO.NET SharePointドライバー単体でもいいじゃん? と。

でも、実はリンクサーバーの本質ってそこじゃないんですよね。

MSDN公式でも記載されているんですが

>リンク サーバーを使用すると、OLE DB データ ソースに対する異種の分散クエリの利用が可能になります。 リンク サーバーを作成すると、このサーバーに対して分散クエリを実行でき、クエリを使用して複数のデータ ソースのテーブルを結合できます。 リンク サーバーを SQL Serverインスタンスとして定義した場合は、リモート ストアド プロシージャを実行できます。

異種間データベースをJOINできる!?

つまり、以下のような感じで、SQL ServerデータベースのテーブルとCData ODBC Driver経由で取得したSharePointのデータをJoinして扱えるようになるのです!

f:id:sugimomoto:20171211225748p:plain

面白いですねー! SQL Serverを普段から扱っている方であれば、当たり前のことかもしれませんが、これでCdata ODBC Driverラインナップを組み合わせれば、シームレスに内部データベースとリンクさせながら、データを扱うことができるようになります!

ちなみに、もちろん、InsertやUpdateもサポートしています。

必要なもの

必要なものは以下の通りです。ちなみにリンクサーバーの機能を使うからって、SQL Serverデータベース本体が不要になるわけではありません。ベースとなるデータベースを構成した上で、試してみてください。

SQL Server データベース

SQL Server Management Studio

・CData SharePoint ODBC Driver

ちなみに、SharePoint ODBC Driverは以下から、試用版がダウンロードできます。

www.cdata.com

構成手順

SQL Serverのリンクサーバ機能を利用する場合、ODBC DSNの設定と共にCDATA SQL Brokerを設定する必要があります。

1.ODBC DSNの設定

Cdata ODBC Driverインストール後、最初にODBC データソースアドミニストレーターにて、対象となるドライバーのDSNを構成・設定します。

ユーザーDSNまたは、システムDSNからCdata SharePoint Sourceを選択し

f:id:sugimomoto:20171211225817p:plain

接続先SharePointの認証情報を入力します。

通常のシンプルなSharePointOnlineであれば、

URL(対象のSharePointサイト)・User・Passwordを入力し、それからShare Point EdtionでSharePoint Onlineを選択するだけで大丈夫です。

f:id:sugimomoto:20171211225827p:plain

2.SQL Brokerサービスの設定

ODBC DSN構成後、SQL Brokerに手順「1.」で構成したDSNを設定します。

WindowsメニューからCData SQL Brokerを起動します。(Cdata SQL BrokerはCdata ODBC Driverをインストールすると、一緒にインストールされます。2016版だけちょっと違うので要注意。)

f:id:sugimomoto:20171211225833p:plain

SQL Broker起動後、[Service]タブ→[Add]をクリック

f:id:sugimomoto:20171211225840p:plain

以下の通り、SQL Broker Serviceの値を入力し、[OK]をクリックします。

[Service Name] ← 任意の値を入力。

[TDSMySQL] ← リンクサーバの利用対象サービスを選択します。SQL Serverの場合は、TDSを選択。

[Data Source] ← 手順[1]で構成した対象のODBC DSNを選択。

[Port] ← リンクサーバ機能で接続する際のポート番号を指定します。任意の未使用ポートを指定してください。

他設定項目の詳細については、マニュアルを参照してもらえれば

cdn.cdata.com

f:id:sugimomoto:20171211225847p:plain

Service構成後、構成したServiceを選択し、[Start]をクリックします。

Service一覧左にあるランプが緑色に変わると、Serviceの起動が完了したサインとなります。

f:id:sugimomoto:20171211225953p:plain

続いて、[Users]タブ→[User]をクリックし、リンクサーバ機能でアクセスする際のUser情報を設定します。

f:id:sugimomoto:20171211230003p:plain

任意のUserName・Passwordと、アクセス対象Serviceを選択します。

f:id:sugimomoto:20171211230013p:plain

これで、ODBCSQL Broker側の設定は完了です。

3.SQL Serverリンクサーバ機能の構成

手順[2]で構成したSQL BrokerのServiceを元に、SQL Serverへリンクサーバの構成を実施します。

まずリンクサーバを設定する任意のSQL サーバへ接続します。

f:id:sugimomoto:20171211230025p:plain

[サーバーオブジェクト]→[リンクサーバ]を選択し、右クリックメニューから「新しいリンクサーバ」をクリック。

f:id:sugimomoto:20171211230038p:plain

以下の通り、リンクサーバの値を入力します。

[リンクサーバ] ← 任意のリンクサーバ名を入力。

[サーバの種類] ← その他のデータソースを選択。

[プロバイダー] ← SQL Server Native Client を選択。

[製品名] ← 利用するCdata Driver Nameを入力。

[データソース] ← SQL BrokerServiceを構成していただいたサーバーの名前とServiceで指定したポート番号を入力します。同一環境内の場合はlocalhostを指定すればOKです。

f:id:sugimomoto:20171211230052p:plain

「セキュリティ」タブでは、[このセキュリティ コンテキストを使用する]を選択し、SQL Brokerで作成したUser情報を入力します。

f:id:sugimomoto:20171211230059p:plain

以上で、リンクサーバの設定は完了となります。

以下のようにリンクサーバの接続されたサービスのテーブル情報等が表示されていれば、アクセスできています。

f:id:sugimomoto:20171211230106p:plain

あとは、通常通りSQLを書けば、SharePointのデータにアクセスできるようになります。

f:id:sugimomoto:20171211230118p:plain

おわりに

今回はSharePointだけでしたが、これを応用すれば、Dynamics 365とSharePointとExchangeをデータソースにして、全部結合させて、必要のデータベースのように扱うことも可能です。

結構面白い機能なので、是非試してみてください!