1-2. PHPアプリケーションからReporting Servicesを使用するシナリオの考察
それではPHPアプリケーションからReporting Servicesをどう活用するかという点に踏み込んでみましょう。いくつかのシナリオが考えられます。
この場合、データの更新処理だけは前回のアクセス方法でPHPアプリケーションから行い、あくまでも切り離された利用方法で、例えばメニュー画面で分かれているようなケースです。同一のマシンで実行することも可能ですが、レポートサーバーは既定で80番ポートを利用するのでWebサーバーとの競合になるので注意しましょう。
この場合はPHPというよりはHTMLのレベルでフレームを分けるという発想ですが、ブラウザ内での画面遷移などを考慮するとURLのパラメーター渡しで操作するRESTのような手法がとれます。
SQL Server Reporting ServicesはSOAPを使ったAPIでの制御が可能です。
- PHPアプリケーションとはまったく別にレポートサーバーを運用する
- PHPアプリケーションの画面に取り込む
- より密接に連携してPHPアプリケーションからSOAP APIを利用してReporting Servicesを制御する
最初の方法についてはPHPアプリケーションを開発されている方であればどういう仕掛けにするかはすぐに想像できるのではないでしょうか。ぜひPDOを使用したアプリケーションを作り、SQL Serverのデータを更新し、それによって動的に変化するレポートをReporting Servicesを使用して実装してみてください。
本記事では引き続きほかの方法論に注目してより深い解説を続けましょう。
SQL Server本体を制御するAPIとしては共有管理オブジェクト(SMO、注2)というのがあり、Feature Packの一部として入手が可能です。.NETアプリケーションからはこれを使用して容易にSQL Serverを制御できます。ただこれは基本的に制御・管理を行うためのAPIであって、アプリケーションとは直接関係ありません。
以前はSQLDMO(DMO:分散管理オブジェクト)と呼ばれていました。
アプリケーションとの連携という意味ではReporting ServicesにレポートサーバーWebサービスと呼ばれる機能があります。SOAP APIを使用したXML Webサービスになっており、SOAP over HTTPを利用してクライアントプログラムからSQL Server Reporting Servicesの機能を使うことが可能です。
どの拡張方法も基本的にこのWebサービスの仕組みを利用しており、例えば、レポートのメニューになっているレポートマネージャーもクライアントアプリケーションの一つの例です。
1-3. WebサービスへのURLアクセス
XML Webサービスとして公開されている点から、RESTのようなアクセス方法が第一の選択肢であり、実装方法例の2番目はこの手法を用いるのが最適と言えるでしょう。
以下はMSDNサイトから抜粋してきたサンプルです。
<a href="http://server/reportserver?/SampleReports/Territory Sales Drilldown&rs:Command=Render&rc:LinkTarget=main" target="main" > Click here for the Territory Sales Drilldown sample report </a>
このようにHTMLで参照する先としてURLにコマンド(例ではRender)およびターゲットとなるフレームを指定して継続的に窓の中でレポートを参照できるようなテクニックを用います。このようなHTMLをPHPアプリケーションの出力するページに埋め込めばいいことになります。
1-4. SOAPを使用したAPIアクセス
下記は/SamplesフォルダーにあるReport1というレポートを削除(DeleteItem)するように指定したSOAPメッセージです。なんとなくイメージできるでしょうか。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <DeleteItem xmlns="http://www.microsoft.com/sql/ReportingServer"> <item>/Samples/Report1</item> </DeleteItem> </soap:Body> </soap:Envelope>
PHPでもSOAPメッセージをpdo_soap.dll拡張およびSoapClientクラスを使用して送信できますから、このサービスとの連携を行えます。このSOAP APIを使用したアプローチではURLでのアクセスよりも広範囲な制御が可能で、この仕組みを完全にマスターしたい上級者の方はこちらにチャレンジすることをオススメします。
これらに関してはMSDNオンラインにある「アプリケーションへのReporting Servicesの統合」という記事とそのサブツリーが参考になるのでご覧ください。また、PHPとの連動部分に関してはPHP on Windows Training Kitにサンプルが入っていますが、データベースのバージョンがR2に対応していないなど環境面で苦労すると思いますので、手順などの詳細はTechNet IIS TechCenterに掲載しているPHP on Windowsガイドラインおよびブログで順次書いていくことにします。
2. まとめ
新しいビジネスを本番環境で行うのはStandard以上のエディションが必要になりますが、開発用途あるいはそれほど規模が大きくない環境では無償版のSQL Server 2008 R2 Express with Advanced Servicesも使えます。無償版というと通常GUIツールが付いていなかったりして不便だったりしますが、Reporting Servicesに関しては同じように使えるのですぐにでも前述の内容をお試しいただけます。また、レポートビルダーは非常に便利なツールであり、SQL ServerとMySQLとの構文違いが心配という方にとっても、クエリーをビジュアルに組み立ててくれるため悩む必要はありません。一度お試しになることをお奨めしておきます。
各ソフトウェアの入手先を再度整理しておきます。
- Microsoft SQL Server2008 R2 RTM - Express with Advanced Services
- Microsoft SQL Server 2008 R2 レポート ビルダー 3.0
- SQL Server 2008 R2 自習書シリーズ
PHPをよく利用されていらっしゃる方で帳票ソリューションを求めている時に、こんな話もあったなとぜひ思い出してください。でもこれはあくまでもPHPとマイクロソフト製品の連携例であり、他のパターンもいろいろと考えられるはずです。最後にマイクロソフトが次第に増やしている相互運用のさまざまなシナリオを網羅したサイトをご紹介しておきます。