パッケージJava製品開発担当の大です。こんにちは。

先月、弊社の関連会社である電脳販売のサイトがリニューアルオープンしました。私も少しお手伝いさせていただいたので、今日はその話を書こうかと思います。

新しい電脳販売のサイトでは、デザインが一新されたのはもちろんのこと、新たにショッピングカートシステムが導入されました。ウェブ上から手軽に商品を選択し、発注することが可能になっています。サイト全体はWordPressで管理され、ショッピングカートシステムにはWelcartという国産のプラグインを採用しています。

リニューアルした電脳販売のサイト

リニューアルした電脳販売のサイト(クリックで拡大)

旧システムからの移行

リニューアル前の電脳販売サイトには、弊社のシーオーリポーツを使用して開発された見積書発行システムがありました。このシステムは、ウェブ上の入力画面からお客様が自分でお客様情報や購入したい製品を入力して見積書を発行するもので、シンプルですが多くのお客様にご利用いただいていました。そのため今回のサイトにも同様の見積書発行システムを用意することになったのですが、旧システムそのままでは使えないいくつかの問題がありました。

  • 旧システムはASPで作成されていたが、今回はサーバがLinuxになるため、動作しない。
  • 製品のデータベースを自前で用意しており、ショッピングカートの製品データと2重管理になってしまう。
  • 入力画面もショッピングカートのものと被り、お客様の使い勝手を考えても両方で同じ情報を入力するのは手間。

このため新しいサイトでは、ショッピングカートシステムと統合された、より使い勝手の良い見積書発行システムを目指すことになりました。

新システムの概要

新しい見積書発行システム

新しい見積書発行システム(クリックで拡大)


新しい見積書発行システムでは、シーオーリポーツ 帳票クリエータ Ver.2を採用し、図のような構成にしました。処理の流れを簡単に説明します。

  1. お客様はショッピングカートシステムを使用し、製品を選択したりお客様情報を入力したりします。そして、カートの内容確認画面で、「見積りを発行する(PDF)」というボタンを押下します。
  2. ボタンが押下されると、見積書発行システムはWelcartの持っているカートの情報(お客様情報、選択した製品の情報)を収集して、帳票クリエータのWEB APIに送信します。
  3. WEB APIは送信されてきたデータと設定ファイルを引数に帳票クリエータを起動します。
  4. 帳票クリエータがPDFを生成します。
  5. WEB APIはPDF生成が成功したことを見積書発行システムに伝えます。
  6. 見積書発行システムはシステム管理者に見積書を作成したことをメールし、お客様へのレスポンスとして生成されたPDFを返します。

WordPressプラグイン

新しい見積書発行システムは、WordPressのプラグインとしてPHPで開発しました。WordPressのプラグイン管理画面から簡単に有効化したり停止したりできます。Welcartと連動はしますが、独立したプラグインになっていますので、Welcartのバージョンアップなどの妨げにもなりません。

フックの登録は以下のように行っています。

<?php namespace hos\estimate;
...
//
// 初期化処理
//
function init() {
        add_filter('usces_filter_confirm_inform', 'hos\estimate\button_filter');
        usces_register_action('estimate', 'get', 'estimate', NULL, 'hos\estimate\create_pdf');
}
add_action('plugins_loaded', 'hos\estimate\init');
...

WordPressのplugin_loadedのタイミングで初期化処理(hos\estimate\init)が走るようにしています。
初期化処理の中では、まず「見積りを発行する(PDF)」ボタンを表示するフィルタを登録します。このフィルタがカートの内容確認画面で適用されるので、画面上にボタンが挿入されます。

挿入されたボタン

挿入されたボタン(クリックで拡大)

次に、ボタンのアクション「estimate」を、Welcartのusces_register_actionで登録します。これにより、このアクションがあったときにWelcart側からhos\estimate\create_pdf処理を呼び出してもらいます。

hos\estimate\create_pdfの中では、カート内のデータを収集して、こんな感じのXMLのデータにしています:

<見積書>
  <見積ID>4f59cc298e80e</見積ID>
  <合計金額>1773765</合計金額>
  <顧客名>株式会社エイチ・オー・エス 御中</顧客名>
  <明細>
         <商品 品名='シーオーリポーツ for Java Ver.2 開発ライセンス(新規)' 標準価格='288750' 直販価格='259875' 数量='1' 金額='259875' />
         <商品 品名='シーオーリポーツ for Java Ver.2 追加ライセンス' 標準価格='187950' 直販価格='169155' 数量='3' 金額='507465' />
         <商品 品名='シーオーリポーツ 帳票クリエータ Ver.2 編集キット(新規)' 標準価格='141750' 直販価格='127575' 数量='2' 金額='255150' />
         <商品 品名='シーオーリポーツ 帳票クリエータ Ver.2 for Java 開発キット(新規)' 標準価格='351750' 直販価格='316575' 数量='1' 金額='316575' />
         <商品 品名='シーオーリポーツ 帳票クリエータ Ver.2 for Java サーバライセンス' 標準価格='483000' 直販価格='434700' 数量='1' 金額='434700' />
  </明細>
</見積書>

今回は帳票クリエータの設定でXMLのデータを使用するようにしたのですが、CSVや固定長のデータでも構いません。

作成したデータを、帳票クリエータのWEB APIのsourceパラメータに指定して呼び出せば、あらかじめ作製しておいた設定ファイルestimate.dcxの記述どおりにPDFが作成されます。

$params = array(
    'configuration' => ESTIMATE_DIR.'estimate.dcx',
    'source' => $src,
    'fileName' => $filename,
);
$str = post_form(DOCCREATOR_URL, http_build_query($params, "", "&"));

帳票クリエータ

シーオーリポーツ 帳票クリエータ Ver.2 for Javaには、WEB APIが付属しています。これはJAX-RSで動作しますので、GlassFishのようなJavaEE6サーバでは特に何も追加しなくてもすぐに動作します。今回は、GlassFish Web Profileを採用しましたので、インストールも簡単で動作も非常に軽快でした。

最終的に生成されるPDFはこのようなものになります。

生成されたPDF

生成されたPDF(クリックで拡大)

最後に

今回は、シーオーリポーツ 帳票クリエータ Ver.2 for JavaのWEB APIを利用することで、WordPressに簡単にPDF帳票出力処理を追加することができました。お客様からしてみれば、カート内のボタンを押したらPDFが表示される、カートシステムの機能のひとつにしか見えないように出来たと思います。

このシステムは、電脳販売サイト上でいつでもご利用いただくことが出来ますので、ご興味がありましたら是非触ってみてください。ユーザ登録は必須ではありませんし、見積書作成までなら自由にお試しいただけます。(ただし、隣にある「上記内容で注文する」ボタンを押したら請求が発生してしまいますので、ご注意ください)

なお、Welcartには実はもともとPDF見積書作成機能が備わっています。ユーザ画面からお客様が自由にダウンロードできる形ではなく、管理画面から呼び出す形ですが、ユーザ画面から呼び出すように改造することもおそらく可能でしょう。こんな多機能なシステムがオープンソースで手に入るなんて(いや、今回はOSからサーバ、CMSまで、HOS製品以外は全部オープンソースのものですが)、ほんとにすごい時代だなぁと改めて感じた次第でした。