SharePointのデータをSQL Serverリンクサーバー+CData ODBC Driverを利用してデータベースのようにアクセスできるようにしてみる
SQL Serverの機能の一つ、リンクサーバーってご存知ですか?
不勉強なことに、私は今の会社に入社するまで知らなかったんですが、これがなかなかおもしろい機能なのです。
公式サイトからの画像がわかりやすいので、引用してみました。
リンク サーバー (データベース エンジン) | Microsoft Docs
上記イメージのように、つまるところSQL Serverのデータベースにアクセスするような形で、OracleやAccessなんかにアクセス(OLE DB プロバイダ経由)することができるようになるという、面白い機能です!(知っている方からすれば、当たり前じゃんと思われるかもですが)
そして、今日はこのリンクサーバー機能を拡張して、SharePointにアクセスできるようにする方法を紹介したいと思います。
ちなみに、この記事はOffice 365 Advent Calendar 2017の12日目です!
で、何が嬉しいの?
結構ここが重要なポイントだと思います。
結果的にどんなイメージになるかと言えば、以下のような形で、SharePointのリストやタスクなどのデータがSQL Server上で扱えるテーブルとして表示されるようになり
SharePointのデータをSQLで扱えるようになります。
え? SharePointのデータをSQL Serverデータベースのように表示できるだけなの? って、私も初めは思っていました。
それって、例えば開発するのであれば、ADO.NET SharePointドライバー単体でもいいじゃん? と。
でも、実はリンクサーバーの本質ってそこじゃないんですよね。
MSDN公式でも記載されているんですが
>リンク サーバーを使用すると、OLE DB データ ソースに対する異種の分散クエリの利用が可能になります。 リンク サーバーを作成すると、このサーバーに対して分散クエリを実行でき、クエリを使用して複数のデータ ソースのテーブルを結合できます。 リンク サーバーを SQL Serverインスタンスとして定義した場合は、リモート ストアド プロシージャを実行できます。
異種間データベースをJOINできる!?
つまり、以下のような感じで、SQL ServerデータベースのテーブルとCData ODBC Driver経由で取得したSharePointのデータをJoinして扱えるようになるのです!
面白いですねー! SQL Serverを普段から扱っている方であれば、当たり前のことかもしれませんが、これでCdata ODBC Driverラインナップを組み合わせれば、シームレスに内部データベースとリンクさせながら、データを扱うことができるようになります!
ちなみに、もちろん、InsertやUpdateもサポートしています。
必要なもの
必要なものは以下の通りです。ちなみにリンクサーバーの機能を使うからって、SQL Serverデータベース本体が不要になるわけではありません。ベースとなるデータベースを構成した上で、試してみてください。
・SQL Server データベース
・SQL Server Management Studio
・CData SharePoint ODBC Driver
ちなみに、SharePoint ODBC Driverは以下から、試用版がダウンロードできます。
構成手順
SQL Serverのリンクサーバ機能を利用する場合、ODBC DSNの設定と共にCDATA SQL Brokerを設定する必要があります。
1.ODBC DSNの設定
Cdata ODBC Driverインストール後、最初にODBC データソースアドミニストレーターにて、対象となるドライバーのDSNを構成・設定します。
ユーザーDSNまたは、システムDSNからCdata SharePoint Sourceを選択し
接続先SharePointの認証情報を入力します。
通常のシンプルなSharePointOnlineであれば、
URL(対象のSharePointサイト)・User・Passwordを入力し、それからShare Point EdtionでSharePoint Onlineを選択するだけで大丈夫です。
2.SQL Brokerサービスの設定
ODBC DSN構成後、SQL Brokerに手順「1.」で構成したDSNを設定します。
WindowsメニューからCData SQL Brokerを起動します。(Cdata SQL BrokerはCdata ODBC Driverをインストールすると、一緒にインストールされます。2016版だけちょっと違うので要注意。)
SQL Broker起動後、[Service]タブ→[Add]をクリック
以下の通り、SQL Broker Serviceの値を入力し、[OK]をクリックします。
[Service Name] ← 任意の値を入力。
[TDS・MySQL] ← リンクサーバの利用対象サービスを選択します。SQL Serverの場合は、TDSを選択。
[Data Source] ← 手順[1]で構成した対象のODBC DSNを選択。
[Port] ← リンクサーバ機能で接続する際のポート番号を指定します。任意の未使用ポートを指定してください。
他設定項目の詳細については、マニュアルを参照してもらえれば
Service構成後、構成したServiceを選択し、[Start]をクリックします。
Service一覧左にあるランプが緑色に変わると、Serviceの起動が完了したサインとなります。
続いて、[Users]タブ→[User]をクリックし、リンクサーバ機能でアクセスする際のUser情報を設定します。
任意のUserName・Passwordと、アクセス対象Serviceを選択します。
3.SQL Serverリンクサーバ機能の構成
手順[2]で構成したSQL BrokerのServiceを元に、SQL Serverへリンクサーバの構成を実施します。
まずリンクサーバを設定する任意のSQL サーバへ接続します。
[サーバーオブジェクト]→[リンクサーバ]を選択し、右クリックメニューから「新しいリンクサーバ」をクリック。
以下の通り、リンクサーバの値を入力します。
[リンクサーバ] ← 任意のリンクサーバ名を入力。
[サーバの種類] ← その他のデータソースを選択。
[プロバイダー] ← SQL Server Native Client を選択。
[製品名] ← 利用するCdata Driver Nameを入力。
[データソース] ← SQL BrokerServiceを構成していただいたサーバーの名前とServiceで指定したポート番号を入力します。同一環境内の場合はlocalhostを指定すればOKです。
「セキュリティ」タブでは、[このセキュリティ コンテキストを使用する]を選択し、SQL Brokerで作成したUser情報を入力します。
以上で、リンクサーバの設定は完了となります。
以下のようにリンクサーバの接続されたサービスのテーブル情報等が表示されていれば、アクセスできています。
あとは、通常通りSQLを書けば、SharePointのデータにアクセスできるようになります。
おわりに
今回はSharePointだけでしたが、これを応用すれば、Dynamics 365とSharePointとExchangeをデータソースにして、全部結合させて、必要のデータベースのように扱うことも可能です。
結構面白い機能なので、是非試してみてください!