XPagesでLotus Notes/Dominoアプリ開発入門
連載インデックスへ
XPagesでLotus Notes/Dominoアプリ開発入門(3)

サーバサイドJavaScriptでXPagesのロジック実装


日本アイ・ビー・エム株式会社 ソフトウェア開発研究所
Lotusテクノロジー開発 ソフトウェアエンジニア 小峯 宏秋
2012/8/8


レジ画面の実装

 最後に3の「購入者の情報や支払いを入力し、ショッピングを完了する機能」の実装を紹介します。ショッピングカートから「レジへ進む」ボタンを押すと「お客様情報の入力」画面が表示されます(図6)。

図6 「お客様情報の入力」画面

 このページでは入力用の編集ボックスコントロールを配置し、氏名や住所などの「お客様情報」を入力できます。これらの編集ボックスのデータソースとしてセッション範囲のスコープ変数をバインドしており(図7)、「次へ」ボタンを押してページがサーバに送信されると、入力した値は自動的にセッションスコープの指定した変数に設定されます。

図7 編集ボックスをセッション変数とバインド

 公開しているサンプルアプリでは、「お客様情報」を入力する画面で代金の支払方法を選択できるようになっており、続いて支払い方法に関するページがいくつか表示され、最後の「ご購入の確認」画面の「ご購入を完了する」ボタンを押して購入が完了します。

 このボタンではサーバサイドJavaScriptが実行され、セッションに保持されたお客様情報や購入品目の情報が、ショッピングカートアプリの「文書」として保存されます。

図8 「ご購入の確認」画面

 リスト6では、そのスクリプトの一部を示しています。この処理ではエミュレートされた@関数とLotus Dominoバックエンドクラスが使用されています。

  リスト6 「ご購入を完了する」ボタンの処理
// 注文番号を取得
sessionScope.orderId = @Unique();
 
// 購入商品の一覧取得
var list = getAllOrder();
 
// 購入商品があれば、処理を実施
if ((null != list) && (list.length > 0)) {
    
    // ショッピングカートアプリのデータベースを取得
    var db:NotesDatabase = session.getCurrentDatabase();
 
    // 購入サマリ文書を作成
    var summary:NotesDocument = db.createDocument();
    summary.replaceItemValue("Form","OrderSummary");
    summary.replaceItemValue("OrderID", sessionScope.orderId);
    summary.replaceItemValue("CustomerLastName", sessionScope.customerLastName);
    summary.replaceItemValue("CustomerFirstName", sessionScope.customerFirstName);
    summary.replaceItemValue("CustomerLastNameYomigana",
                    sessionScope.customerLastNameYomigana);
    summary.replaceItemValue("CustomerFirstNameYomigana",
                    sessionScope.customerFirstNameYomigana);
    summary.replaceItemValue("CustomerZip", sessionScope.customerZip);
    summary.replaceItemValue("CustomerAddress", sessionScope.customerAddress);
    summary.replaceItemValue("CustomerPhoneNumber",
                    sessionScope.customerPhoneNumber);
    summary.replaceItemValue("CustomerEmail", sessionScope.customerEmail);
    summary.replaceItemValue("TotalAmount", getTotalAmount());
    
    //購入サマリ文書を保存
    var ret = summary.save(true,true);
 
    /*
     ***** 以下の処理は省略 *****
     */
}

 最初に注文番号としてユニークなIDを生成するために「@Unique()」という@関数が使用されています。スクリプトライブラリの「getAllOrder()」関数で購入商品の配列を取得し、その配列に商品が入っていれば、「お客様情報」などを保持する購入サマリ文書を作成します。購入サマリ文書の作成手順は以下のようになります。

  1. Lotus Dominoセッションを示すグローバル変数「session」から「getCurrentDatabase()」メソッドで、ショッピングカートアプリのデータベースを示す「NotesDatabase」クラスのインスタンスを取得し、変数「db」に設定
  2. 「createDocument()」メソッドで新規の「文書」を作成。作成された文書は「NotesDocument」クラスのインスタンスとして変数「summary」に設定される
  3. 「NotesDocument」クラスの「replaceItemValue()」メソッドで「文書」内の「フィールド」にデータを設定。このとき設定するデータはスコープ変数に保持されている
  4. 最後に「save()」メソッドで「文書」を保存

 実際のサンプルアプリでは、この処理の後で、この文書と親子関係のある「子文書」を作成して購入する商品の詳細を保存し、購入処理を完了します。

Java EE開発者もLotus Notes/Domino開発者も

 前回から2回にわたり、ショッピングカートアプリをサンプルとしてXPagesアプリ開発を解説しましたが、いかがでしたでしょうか。

 XPagesはLotus Notes/Dominoの技術をベースにしているためデータソースとしてLotus Notes/Dominoの「フォーム」「ビュー」が利用できます。

 またアプリのビジネスロジックの実装では、シンプルアクションやJavaScriptが利用できますが、サーバサイドのJavaScriptではエミュレートされた@関数やLotus Dominoクラスが利用できるなど、その動作環境を生かした拡張がされています。

 さらに、高度なWebアプリを開発するためにグローバルオブジェクトやグローバル関数を追加し、スコープ変数の保持やブラウザコンテキストにアクセスするための仕組みなども用意されています。

 このような特徴から、いままでLotus Notes/Dominoアプリを開発していた方も、あるいはJava EEでWebアプリでの開発をしていた方も、新しいXPagesによるアプリ開発の世界に飛び込んでいただけると思います。

■ @IT関連記事


Javaの常識を変えるPlay framework入門
サーブレット/JSPを基にする重厚長大なJavaのWeb開発のイメージを変える軽量フレームワーク「Play」について解説し、Webアプリの作り方を紹介する入門連載
Rooでアプリ開発をRapidしようぜ!
コマンドベースのSpringのRADツールを使って、超迅速にWebアプリを作る方法を紹介します
企業システムの常識をJBossで身につける
企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
Java初心者が超俊敏にWebアプリを作る方法
Eclipseプラグイン「Dolteng」のScaffoldという自動生成機能やSeasar 2.4のHOT deploy機能を利用して、DBの参照・更新・削除ができるSAStrutsのWebアプリを作ります。Java初心者だけでなくStrutsに慣れた開発者も必見です
オープンソースTERASOLUNAで作るWebアプリ
WebアプリをStrutsで構築する際の種々の問題点。そして、それを解決するSpring、iBATIS連携のオープンソースフレームワークTERASOLUNAのさまざまな機能を紹介していく
実用レベルに達したJRubyを体感してみよう
もはやJava技術者にとって無視できない存在になったRuby。Javaと融合したJRubyの特徴や利点について解説します。実用レベルになったといわれる、その実力を体感してみよう

1-2

 Index
第3回 サーバサイドJavaScriptでXPagesのロジック実装
  Page1
XPagesアプリにおけるビジネスロジックの実装
JavaScriptを書かずともロジックが書ける
サーバサイドJavaScriptの特徴
ショッピングカートの実装
Page2
レジ画面の実装
Java EE開発者もLotus Notes/Domino開発者も


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間