CodeZine(コードジン)

特集ページ一覧

PHPとSQL Serverで実践する「帳票出力」の新しい考え方

PHPからMicrosoft SQL Serverを使おう! 第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

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を使用して実装してみてください。

図4 製品の構成、ポートを調整すれば一台でも可能
図4 製品の構成、ポートを調整すれば一台でも可能

 本記事では引き続きほかの方法論に注目してより深い解説を続けましょう。

 SQL Server本体を制御するAPIとしては共有管理オブジェクト(SMO、注2)というのがあり、Feature Packの一部として入手が可能です。.NETアプリケーションからはこれを使用して容易にSQL Serverを制御できます。ただこれは基本的に制御・管理を行うためのAPIであって、アプリケーションとは直接関係ありません。

注2

 以前はSQLDMO(DMO:分散管理オブジェクト)と呼ばれていました。

 アプリケーションとの連携という意味ではReporting ServicesにレポートサーバーWebサービスと呼ばれる機能があります。SOAP APIを使用したXML Webサービスになっており、SOAP over HTTPを利用してクライアントプログラムからSQL Server Reporting Servicesの機能を使うことが可能です。

 どの拡張方法も基本的にこのWebサービスの仕組みを利用しており、例えば、レポートのメニューになっているレポートマネージャーもクライアントアプリケーションの一つの例です。

図5 Reporting Servicesを利用する最初のWebサイト、レポートマネージャー
図5 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との構文違いが心配という方にとっても、クエリーをビジュアルに組み立ててくれるため悩む必要はありません。一度お試しになることをお奨めしておきます。

 各ソフトウェアの入手先を再度整理しておきます。

 PHPをよく利用されていらっしゃる方で帳票ソリューションを求めている時に、こんな話もあったなとぜひ思い出してください。でもこれはあくまでもPHPとマイクロソフト製品の連携例であり、他のパターンもいろいろと考えられるはずです。最後にマイクロソフトが次第に増やしている相互運用のさまざまなシナリオを網羅したサイトをご紹介しておきます。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:PHPからMicrosoft SQL Serverを使おう!

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5