
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()」関数で購入商品の配列を取得し、その配列に商品が入っていれば、「お客様情報」などを保持する購入サマリ文書を作成します。購入サマリ文書の作成手順は以下のようになります。
- Lotus Dominoセッションを示すグローバル変数「session」から「getCurrentDatabase()」メソッドで、ショッピングカートアプリのデータベースを示す「NotesDatabase」クラスのインスタンスを取得し、変数「db」に設定
- 「createDocument()」メソッドで新規の「文書」を作成。作成された文書は「NotesDocument」クラスのインスタンスとして変数「summary」に設定される
- 「NotesDocument」クラスの「replaceItemValue()」メソッドで「文書」内の「フィールド」にデータを設定。このとき設定するデータはスコープ変数に保持されている
- 最後に「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 | ||||||
|
![]() |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
![]() |
|
|
|
![]() |