...

既存の けるポイント Notes 2012/4/10

by user

on
Category: Documents
465

views

Report

Comments

Transcript

既存の けるポイント Notes 2012/4/10
2012/4/10
Lotus Technical Update Workshop
既存のNotesアプリケーションのXPages化にお
けるポイント
日本アイ・ビー・エム システムズ・エンジニアリング株式会社
コラボレーション&モバイル 青木 悟大
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
当セッションについて
ƒ
主な対象
– LotusScriptや式言語を用いて、NotesDBを開発したことのある開発者
ƒ
目的
– NotesDBをXPages化する際のポイントと、XPages特有の考慮点と対応方法について把握
いただく
ƒ
前提
– 既存のアプリケーションの機能をそのまま実装
•
•
ƒ
2
本来はXPages化にあたって、Web2.0にふさわしい新機能の追加や機能の取捨選択等含めて再設
計を行うことが本来は望ましい
当サンプルでは割愛
–
バージョンはLotus Domino 8.5.3 Upgrade Pack 1が前提
–
ブラウザからの利用を前提
サンプルのダウンロード先
– developerWorks Japan Lotus(http://www.ibm.com/developerworks/jp/lotus/)
に4/13公開予定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
当資料での標記方法
ƒ
SSJS・・・サーバーサイドのJavaScript。
ƒ
CSJS・・・クライアントサイドJavaScript。
ƒ
LS・・・LotusScript
3
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
アジェンダ
ƒ XPages化するNotesアプリケーションの紹介
ƒ XPages化の手順
– 画面・レイアウト設計・実装
– フォームの実装
– 入力補助ボタンの実装(日数計算)
– 主要アクションの実装(承認依頼)
ƒ 参考.XPagesの設計でつまずかないために
4
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化するNotesアプリケーションの紹介(デモ)
5
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化したアプリケーションの紹介(デモ)
6
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
実装順序
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
7
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
実装順序
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
8
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化するNotesクライアントの画面レイアウト
ƒ
9
画面レイアウト
設計・実装
下記の画面をXPages化する
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
画面設計方針
ƒ
画面設計方針
– Notesと同様の見た目、画面遷移とする
– OneUI(参考.p19∼参照)を利用する
•
各コンポーネントはOneUIに沿って配置
ロゴ
DBタイトル
ログイン/ログアウト
検索ボタン
メッセージバー
アクションバー
グローバルナビゲータ
ナビゲータ
ビュー/フォーム
10
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
画面の大枠作成
ƒ
Application Layoutコントロールを使ってレイアウトを作成する
–
–
カスタムコントロール上に配置して使用する
プロパティ定義とテーマの設定(次項)だけで画面の大枠が作成可能
•
Application LayoutコントロールはUpgrade Pack 1で追加
Logo
Application Links
Utilitiy Links
Place Bar
Search
footer Links
legal Text
11
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
アプリケーションテーマの設定方法
ƒ
Lotus Domino Designerから[アプリケーションのプロパティ]-[XPage]-[テーマの
デフォルト]-[アプリケーションのテーマ]で指定する
– サンプルでは[oneuiv2.1_silver]を指定
– 指定方法と画面イメージ詳細(http://goo.gl/HMqJ2)
③
②
①
12
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面の大枠作成完了
ƒ
13
画面レイアウト
設計・実装
Application Layoutコントロールのロゴやリンクを設定し、アプリケーションテーマを
設定した画面
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.Application Layoutコントロールのリンクの設定方法
画面レイアウト
設計・実装
ƒ
[プロパティ]-[Application Links/Utilitiy Links]-[AddItem]-[Basic Node]
ƒ
[Basic Node]の[href]プロパティと[label]プロパティを設定
14
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
画面レイアウトを構成する①
ƒ
ƒ
ナビゲーターの箇所にはNavigatorコントロールを配置
メインコンテンツの箇所にはアクションバー/メッセージバー、ビュー/フォームを配置
–
フォームの開発については後述
ナビゲーター
メインコンテンツ
メッセージバー(カスタムコントロール)
ナビ
ゲーター
コント
ロール
15
アクションバー(カスタムコントロール)
ビュー または フォーム
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
画面レイアウトを構成する②
ƒ
Application Layoutコントロールの編集可能領域を編集する
–
–
下図の緑丸の箇所が編集可能
サンプルでは「Left Column」にナビゲーターとメインコンテンツの箇所を編集
LeftColumn
16
メインコンテンツ
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウトの構成要素の作成・配置
ƒ
画面レイアウト
設計・実装
NavigatorコントロールをLeftColumnに配置
–
リンクをリスト形式で表示するコントロール
•
•
リンクはアプリケーションコントロールと同様にプロパティから追加(p14)
Upgrade Pack 1で追加
ƒ
メッセージバーをメインコンテンツ上部に配置
– カスタムコントロールを作成し、計算結果フィールドコントロール配置(詳細後述)
ƒ
アクションバーをメインコンテンツ上部に配置
– カスタムコントロールを作成し、ボタンコントロールを配置
ƒ
ビューをメインコンテンツ下部に配置
– ビューコントロールをドラッグ&ドロップで追加
•
17
参考. XPages コントロールの紹介: 「ビュー」 コンテナコントロール
(http://goo.gl/IU3zw)
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面・レイアウト実装完了
ƒ
18
画面レイアウト
設計・実装
ナビゲーター、アクションバー、ビューを配置した画面
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.Upgrade Pack 1のコントロールの詳細を確認するには
ƒ
画面レイアウト
設計・実装
Lotus Notes and Domino Application Development wikiの下記参照
– [Product Documentation]タブ-[Domino Designer XPages Extension Library]
•
Using controls from the XPages Extension Library
http://goo.gl/iNf88
–
•
サンプルで使用しているコントロール
»
Application Layout & Page Navigator Controls(画面作成で使用)
http://goo.gl/cGPyA
»
Value and name pickers(申請者の入力補助で使用)
http://goo.gl/0QjUW
»
valuePicker - Value Picker (申請者の入力補助で使用)
http://goo.gl/KUiz9
»
dialog - Dialog (差し戻しアクションで使用)
http://goo.gl/MIYXo
Control reference
http://goo.gl/ykxiz
ƒ
デモファイル
– XPages Extension Library
•
19
アーカイブに含まれる「XPagesEXT.nsf」
http://goo.gl/g1Bt8
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.OneUIとは
ƒ
画面レイアウト
設計・実装
統一されたルック&フィールを提供するためのユーザーインターフェースの標準化ガイドライン
– Lotus製品で共通のテーマとして利用されている
•ディスカッションテンプレートでも利用
–
ドキュメント
•IBM Lotus User Interface Developer Documentation
各種ドキュメントやExampleページがある
http://www-12.lotus.com/ldd/doc/oneuidoc/docpublic/index.htm
•サンプルでは下記参照
–Notesフォームの調整で使用
» Forms(Formに使用するスタイル)
http://www-12.lotus.com/ldd/doc/oneuidoc/docpublic/components/forms.htm
» General Style(スタイルの微調整に使用する)
http://goo.gl/5H6C9
–
CSSファイルはLotus/Notes Domino 8.5.1から製品に同梱
•パスは下記
–(Dataフォルダ)¥domino¥html¥oneui (v2/v2.1)
ƒ
20
XPagesの開発ではOneUIフレームワークの利用を推奨
– Webデザインの熟練者がいない場合
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.OneUIのレイアウトとクラス概要
ƒ
21
画面レイアウト
設計・実装
3Columns,summary viewの例
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
参考.OneUIのレイアウトとクラス概要
ƒ
3Columns,summary viewのクラス
lotusBanner
lotusTitleBar
lotusFrame
lotus
ColLeft
lotusContent
lotus
ColRight
lotusMain
lotusFooter
22
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
設計・実装
参考.OneUIのレイアウトとクラス概要
ƒ
3Columns,summary viewのクラス詳細
lotusLogo
lotusInline list lotusLinks
lotusInline list lotusUtility
lotusSearch
lotusTabs
lotusMenu
lotusFrame
lotusMain
lotus
Section
lotusHeader
lotusMessage lotusInfo
lotusActionBar lotusBtnContainer
lotusPaging
lotusSection
lotusFirst
lotusSort
lotusSection
lotusFooter
23
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ログイン/ログアウトのリンクの作成①
ƒ
画面レイアウト
設計・実装
ログイン/ログアウトリンクの作り方の例
前提:セッション認証が有効
– 1.[Application Layou]コントロールの[プロパティ]-[utility link]を開く
– 2.[Add Item]-[Basic Node]
– 3 .[label] プロパティを[値の計算]とし、下記のロジックを記述
var userName:NotesName = session.createName(@UserName());
if (userName.getCommon()=="Anonymous")
{
var rtnvalue = "Log In"
}
else
{
var rtnvalue = "Logout"
}
return(rtnvalue);
24
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ログイン/ログアウトのリンクの作成②
ƒ
画面レイアウト
設計・実装
ログイン/ログアウトリンクの作り方の例
– 4. [href]プロパティを[値の計算]とし、下記のロジックを記述
var userName:NotesName = session.createName(@UserName());
if (userName.getCommon()=="Anonymous")
{
facesContext.getExternalContext().getRequestContextPath() + "?login";
}
else
{
facesContext.getExternalContext().getRequestContextPath() + "?logout";
}
※facesContextはJSFのグローバルオブジェクト。詳細は「Notes開発者向け
XPagesのサーバーサイドJavascriptガイド(http://goo.gl/UqUuZ)p46-47参照」
ƒ
ƒ
25
参考.Lotus Domino Designer ヘルプ『認証を要求する URL コマンド』
参考. XPages Tutorial Part 7: バナーのログイン/ログアウトボタン
http://notesdominoliaison.blogspot.com/2009/12/xpages-tutorial-part7.html
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
画面レイアウト
参考.Application Layoutコントロールのプロパティで全文検索を実装
設計・実装
ƒ
検索後に表示するビューを含むXPageを指定する
– Application Layoutコントロールの[プロパティ]-[Search]-[Page name]
ƒ
全文検索がないとエラーとなる(検証により確認)
26
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
実装順序
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
27
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化するNotesのフォーム
ƒ
28
フォームの実装
下記のフォームをXPages化する
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームの実装順序
ƒ
ƒ
ƒ
フィールドを配置する
– フォームにコントロールを配置・バインド
フォームのリフレッシュの指定
– リフレッシュのタイミング(フォーム検証の実行)の設定
入力値チェック(入力確認式)の置き換え
–
29
フォームの実装
妥当性検査の設定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームの実装順序
ƒ
ƒ
ƒ
フィールドを配置する
– フォームにコントロールを配置・バインド
フォームのリフレッシュの指定
– リフレッシュのタイミング(フォーム検証の実行)の設定
入力値チェック(入力確認式)の置き換え
–
30
フォームの実装
妥当性検査の設定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フィールドを配置する
ƒ
フォームの実装
フォームにコントロールを配置・バインドする
– Notesフォームのフィールドなどに対応するコントロールをドラッグ&ドロップで配
置
•
•
編集可能
–
–
–
テキストフィールド ・・・編集ボックスコントロール
名前フィールド
・・・編集ボックスコントロール
日付/時刻フィールド・・・日付ピッカーコントロール
–
など
計算結果
–
•
•
–
計算結果テキスト ・・・計算結果フィールドコントロール
ホットスポットボタン ・・・ボタンコントロール
etc…
データソースにNotesのフォームを指定し、各コントロールとフィールドをバインド
•
サンプルでは休暇申請フォームを指定
XPage
31
データソース
コントロールA
バインド
フィールドA
コントロールB
バインド
フィールドB
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.データソースの指定とバインド手順
ƒ
XPage/カスタムコントロールのデータソースにフォームを指定する
– [XPage]/[カスタムコントロール]-[データ]-[追加]-[Domino文書]
– [フォーム]に対応するフォームを指定
–
対応するコントロールを配置し、バインド
•
32
フォームの実装
下記は日付コントロールをフォーム上の種類が[日付/時刻]のフィールドをバインドした
例
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
データソースを指定するときの注意事項 複数値を持つフィールド
ƒ
フィールドのプロパティの[複数値も可」が無効の場合、フィールドの最初の値しか読
み込まれない(検証により確認)
– Notesのフォーム上では、「複数値も可」が無効であっても、複数値として保存可
能
– XPagesでは標記のプロパティが有効でないと、複数値と認識されず、単一の値
(最初の値)として読み込む
– XPageとバインドしてないフィールド(非表示フィールドなど)でも発生する
•
33
フォームの実装
読者フィールドや作成者フィールドで特に注意
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
コントロールとフィールドをバインドする時の注意事項①複数値
フォームの実装
XPageで入力した値を複数値としてフィールドに格納する場合、プロパティを設定
ƒ
–
コントロールの[すべてのプロパティ]-[multipleSeparator]で区切り記号を指定
※区切り記号に”,”を指定した例
ƒ
一部の複数値はXPagesではNotesの種類と表示タイプが異なる(表示タイプについ
ては次項参照)
–
表示形式を誤ると、値が正常に読み込まれなかったり、XPage自体が開けなくなるため注
意(検証により確認)
数値の複数値
日付/時刻の複数値
Notes
XPages
数値
日付/時刻
テキスト
テキスト
NotesよりXPagesでは型の扱い方が厳密で、型を誤るとバグの原因になるた
め注意
34
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォーム
の実装
コントロールとフィールドをバインドする時の注意事項②名前フィールド
ƒ
Notesのフォーム上で、[名前][読者][作成者]フィールドに入力する場合と、XPages
から入力する場合の動作が異なる
– Notesのフォーム上では、UI上は省略形式で表示されるが、実際には階層名形
式で格納されている
–
Test User1/TEST
CN=Test User1/O=TEST
同様の動作とするためには、SSJSで変換してセットしなおすか、コンバーター(下記)を使
用する必要がある(次項)
コンバーターとは
•
35
保存されているデータ
XPageでは自動的に上記の動作にはならない(検証により確認)
•
–
表示
編集ボックスなどのコントロールに設定できる[表示タイプ]
–
[プロパティ]-[データ]-[表示タイプ]
–
–
日付や数値の表示形式はプロパティから指定可能
プロパティでは名前に該当するものはない(次項)
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPagesで編集ボックスコントロールを名前フィールドと同様の動きにする フォーム
の実装
ƒ
名前フィールドとバインドしたコントロールにコンバーターのCustomConverterを設
定
– CustomConverterを使うことで自由に設定することが可能
•
–
入力変換式の代替としても使用可能(次項)
設定方法
•
•
•
設定するコントロールのプロパティ-[データ]-[converter]で[xp:customConverter]を
選択し、下記のプロパティを設定する
getAsObject・・・データを格納するときの変換方法を指定
getAsString・・・データを表示するときの表示方法を指定
getAsObject
//階層名形式で格納
@Name('[Canonicalize]', value);
getAsString
//省略形式で表示
@Name('[Abbreviate]', value);
※valueはコントロールの値が格納されている予約語
サンプルでは申請者名のコントロールで実装。コンバーターの詳細は
『Converters on an XPage』(http://goo.gl/uwFNy)参照
36
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.入力変換式をカスタムコンバーターに置き換える
フォームの実装
ƒ
入力変換式はp36のカスタムコンバーターを用いて置き換え可能
ƒ
ただし、保存時にフォーム検証を実行すれば入力変換式が実行されるので、置き換え
は必須でない
– 妥当性検査(後述)やサーバーサイドのイベントで変換後の値が必要であれば、
置き換える。実行順序については最後の節のp105など参照。
ƒ
下記は入力変換式の置き換え例(検証により確認)
– 余分な空白を入れずに、[Subject] フィールドの単語の頭文字だけを大文字に変
換し、その他を小文字に変換するロジックの例
Notes(入力変換式)
XPages(customConverter)
getAsObject
@Trim(@ProperCase(Subject))
@Trim(@ProperCase(value));
getAsString
value;
37
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームの実装順序
ƒ
ƒ
ƒ
フィールドを配置する
– フォームにコントロールを配置・バインド
フォームのリフレッシュの指定
– リフレッシュのタイミング(フォーム検証の実行)の設定
入力値チェック(入力確認式)の置き換え
–
38
フォームの実装
妥当性検査の設定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームのリフレッシュの指定
ƒ
ƒ
ƒ
フォームの実装
リフレッシュのタイミング(フォーム検証の実行)を設定する
フォーム検証の実行とは
– ComputeWithFormと同様
– フィールドの計算結果、入力確認式、入力変換式などが実行される
– イベントは実行されない
データソースに[Domino文書]を追加したときに指定する
– Notesのフォームと同様の動作とするためには[両方]を指定
•
•
新規文書作成時に、フィールドの計算結果やデフォルト値を反映するためには[文書ロー
ド時]に実行する必要がある
保存するときに必ず再計算させるためには[文書保存時]に実行する必要がある
※XPage/カスタムコントロールの[プロパティ]-[データ]-[データソース:Lotus Domino 文書]
39
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームの実装順序
ƒ
ƒ
ƒ
フィールドを配置する
– フォームにコントロールを配置・バインド
フォームのリフレッシュの指定
– リフレッシュのタイミング(フォーム検証の実行)の設定
入力値チェック(入力確認式)の置き換え
–
40
フォームの実装
妥当性検査の設定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
Notesフォーム上の入力確認式
ƒ
41
フォームの実装
下記のロジックをXPages化する
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
入力値チェック(入力確認式)の置き換え
フォームの実装
ƒ
妥当性検査を設定する
ƒ
編集ボックスコントロール、日時ピッカーコントロールは[必須]または[最小/最大]をプ
ロパティから設定可能
入力確認式(式言語)
XPages(妥当性検査)
REM{"入力必須のチェック"};
@If(
HdStartDate="";@Failure("休暇期間(開始日)を
入力してください。");
@Success)
※休暇開始日の例
42
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.妥当性検査の表示
ƒ
フォームの実装
妥当性検査のメッセージを表示するためには、[エラー表示コントロール]を配置し、関
連付ける
設定方法
表示
ƒ
43
妥当性検査プロパティは、[値の計算](SSJS)を用いていない場合、クライアントサイドで実行さ
れます
– クライアントサイドで実行される場合、プロンプトを表示
– クライアントサイドのチェックを無効にする場合は[すべてのプロパティ][disableClientSideValidation]を[true]に設定
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.妥当性検査の応用
ƒ
フォームの実装
必須・最小/最大以外も対応可能
⇒[すべてのプロパティ]-[validators]
–
正規表現
•
–
[Validate Constraint]
–
Regex・・・正規表現を指定
–
» アルファベットのみ [A-Za-z]*
» 数値のみ [0-9]*
Message・・・表示するメッセージを指定
任意のSSJSの式で判定
•
[Custom Validator]
–
–
validate・・・true/falseを返すSSJSのロジックを記述
message・・・表示するメッセージを指定
–
注意点
» 妥当性検査が行われるフェーズでは、各コンポーネント/NotesXSPDocumentに送信後の
値は反映されていない(参考.コンポーネント・ツリーのライフサイクル)。送信された値を取得
するにはgetComponent関数でコントロールを直接取得し、getSubmittedValueメソッドを使
用する必要がある
詳細は『Validation On An XPage』(http://goo.gl/peHUa)参照
44
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォーム画面の完成
ƒ
45
フォームの実装
作成した画面
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.フォーム検証で実行される入力確認式のエラー表示
ƒ
ƒ
フォームの実装
フォーム検証(保存時)に入力確認式で失敗した場合、文書は保存されない
上記のエラーのメッセージを表示するためには複合エラー表示コントロールを配置す
る(下図、検証により確認)
– 上記を用いれば、妥当性検査を実装せずとも入力確認式で入力値チェックが可能
•
ただし、実行順序を考慮するとサブミット後すぐに妥当性検査で行ったほうがよい(参考.
XPagesの設計でつまずかないためにのp105など参照)
複合エラー表示コントロール
46
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考. 編集モードと読み込みモードの違い
ƒ
ƒ
フォームの実装
変換されるhtmlのタグが変更される
– 編集可能なときはinputタグ
– 読み取りモードのときはspanタグやtableタグ(ラジオボタングループやチェック
ボックスグループ)など
CSJSでコントロールの値を取得する場合はロジックに注意
– 編集ボックスコントロールの場合、編集モードのときはvalue、読み取りモードのと
きはinnerHTMLを取得する
CSJS
var subject = dojo.byId("#{id:inputText1}");
if (subject.nodeName=="INPUT"){
dojo.byId("#{id:inputHidden1}").value = subject.value;
}
else if(subject.nodeName=="SPAN"){
dojo.byId("#{id:inputHidden1}").value = subject.innerHTML;
}
alert("submitvalue=" + dojo.byId("#{id:inputHidden1}").value);
※編集ボックスコントロールの値を取得、非表示の入力コントロールに入れ、
表示するサンプル
47
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考. 読み取りモードから入力する
ƒ
フォームの実装
バインドされたコントロールから入力は不可能
– 非表示の入力コントロールも同様
XPages:読み込みモードの文書において <xp:inputHidden> フィールドが利
用できない
https://www-304.ibm.com/support/docview.wss?uid=swg21569342
ƒ
XSP Client Side JavaScriptのsetSubmitValueを用いると、読み取りモードからで
もサーバーサイドのロジックへ値を渡すことが可能
SSJS
CSJS
//サブミット時に下記に値をセット
XSP.setSubmitValue(“任意の値”);
//クライアントからサブミットした値を取得
var temp=context.getSubmittedValue();
詳細はサンプルの「差し戻し」アクション参照
48
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
実装順序
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
49
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
日数計算アクションのロジックを置き換える
ƒ
入力補助ボタン
の実装
XPagesで置き換える日数計算の処理
実行前
休暇期間が入力
されてない場合は
警告を表示
50
実行後
土日を除く営業日
を計算
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
入力補助ボタンの実装(日数計算)
ƒ
入力補助ボタン
の実装
日数計算アクションのロジックをUIで動作するものとサーバーサイドで計算するもの
に分離する
– 日数計算アクションのロジック
Notes(式言語)
REM{"休暇期間の入力チェック"};
@If((HdStartDate=""|HdEndDate=""); @Return(@Prompt([Ok];"エ
ラー";"休暇期間を入力してください")); "");
REM{"営業日を計算してセット"};
FIELD DayCount :=@BusinessDays(HdStartDate;HdEndDate;1:7);
前半・・・ブラウザのUIの動作(ポップアップ表示)なのでCSJSに置き換える
後半・・・ブラウザのUIの動作ではないので、SSJSに置き換え部分更新する
51
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
クライアントサイドスクリプトとサーバーサイドスクリプト
入力補助ボタン
の実装
ƒ
1つのイベントにはクライアントサイドのスクリプト(CSJS)とサーバーサイドのスクリプ
ト(SSJS)の2つが記述可能
ƒ
CSJS ⇒ SSJSの順で実行される
– ただしCSJSの途中で「false」が返されると、処理は中断され、Submitされない
return falseで
処理中断
クライアントサイド
スクリプト
52
Submit(POST)
サーバーサイド
スクリプト
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
日数計算ロジックの前半部分をCSJSへ置き換え
ƒ
入力補助ボタン
の実装
日数計算のロジックをCSJSに置き換える
Notes(式言語)
@If(
(HdStartDate=""|HdEndDate="");
@Return(@Prompt([Ok];"エラー";"休暇期間
を入力してください")); "");
XPages(CSJS)
var startDate =dojo.byId("#{id:hdStartDate1}");
var endDate =dojo.byId("#{id:hdEndDate1}");
if(startDate.value=="" ||endDate.value=="" ){
alert('休暇期間を入力してください');
return false;
}
ƒ
XPagesのCSJS
– 通常のJavaScriptとDojoのライブラリが使用可能
ƒ
注意:idの指定時
– XPagesのコントロール名(id)はhtml変換時に変更されるため
•
変更されるidは予測できないため、必ず下記の形式で指定する
"#{id:control_name}"
53
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
日数計算アクションの入力値チェック
ƒ
54
入力補助ボタン
の実装
CSJSで実装した入力値チェックのプロンプト
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
ロジック後半部分の置き換え
入力補助ボタン
の実装
Notes(式言語)
FIELD DayCount :=@BusinessDays(HdStartDate;HdEndDate;1:7);
XPages
営業日をSSJSで
@BusinessDays
を実行して計算
55
部分更新で
日数を入力する
コントロールのみ更新
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
日数計算ロジックの後半部分のSSJSへ置き換える
入力補助ボタン
の実装
Notes(式言語)
FIELD DayCount :=@BusinessDays(HdStartDate;HdEndDate;1:7);
XPages(SSJS)
var startDateObj = document1.getItemValueDate("HdStartDate");
var endDateObj = document1.getItemValueDate("HdEndDate");
①入力値取得(後述)
startDateStr =startDateObj.toLocaleDateString()
endDateStr =endDateObj.toLocaleDateString()
②yyyy/mm/ddへ変換
var formula = '@BusinessDays([' + startDateStr + '];[' + endDateStr +
'];1:7)';
var dayCount = session.evaluate(formula);
③営業日計算(後述)
document1.replaceItemValue("DayCount",dayCount);
④日数のセット
56
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
SSJSで休暇開始日、終了日に入力された値を取得する①
ƒ
入力補助ボタン
の実装
休暇開始日、終了日に入力された日付を取得するロジック
var startDateObj = document1.getItemValueDate("HdStartDate");
var endDateObj = document1.getItemValueDate("HdEndDate");
※HdStartDate/HdEndDateは休暇開始日/終了日のフィールド名
ƒ
document1とは
– デフォルトのデータソース名
•
–
[プロパティ]-[データソース]で指定した名前(任意の名前に変更可能)
NotesXSPDocumentオブジェクトというXPages特有のオブジェクト
•
•
概念としてはNotesUIDocumentに近い
プロパティ、メソッドはNotesDocumentオブジェクトに近い
–
–
57
ただしSSJSは内部的にはJavaのクラスをコールするため型の扱いが厳密
例.getItemValueString/getItemValueInteger/getItemValueDateなど
SSJSでは、特に宣言することなくデータソース名で呼べる
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
入力補助ボタン
の実装
参考.SSJSで入力された値を取得する3つの方法
ƒ
データソースに指定したフィールドの値を取得する
•
ƒ
フィールドにバインドされていない値を取得する
– getComponent関数を用いてコントロールの値を直接取得する
•
•
ƒ
NotesXSPDocumentを用いる
取得できるオブジェクトはJavaのオブジェクト
getValue()/setValue()メソッドはどのオブジェクトでも使用可能(ロジックのサンプル次
項)
NotesDocumentオブジェクトを取得する
– NotesXSPDocumentのgetDocumentメソッドを用いる
•
引数でtrueを指定すると入力された値を反映した状態で取得する(ロジックのサンプル
データソース名.getItemValueXXX
次項)
getComponent関数
NotesXSPDocument
コントロールA
バインド
フィールドA
コントロールB
バインド
フィールドB
コントロールD
58
フィールドC
NotesDocument
フィールドA
get
Docu
ment
メソッド
フィールドB
フィールドC
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.各値を取得/セットするロジックサンプル
ƒ
入力補助ボタン
の実装
データソースにバインドされている値
temp=document1.getItemValueString(“フィールド名”);
document1.replaceItemValue(“フィールド名”,”任意の値”);
※”document1”をデータソース名に指定している場合
ƒ
データソースにバインドされていない値(コントロールの値)
temp=getComponent(“コントロール名”).getValue();
getComponent(“コントロール名”).setValue(“任意の値”);
ƒ
バックエンドのNotes文書の値
Var doc:NotesDocument=document1.getDocument(true);
temp=doc.getItemValueString(“フィールド名”);
doc.replaceItemValue(“フィールド名”,”任意の値”);
59
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
営業日を計算する
ƒ
入力補助ボタン
の実装
営業日を計算するロジック
– SSJSで式言語を実行するロジックを実装
var formula = '@BusinessDays([' + startDateStr + '];[' + endDateStr + '];1:7)';
var dayCount = session.evaluate(formula);
ƒ
SSJSで式言語と同様の機能を持つ関数を約1/3ほど用意
– @BusinessDaysはない
詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド(http://goo.gl/UqUuZ)p34参照」
ƒ
SSJSで対応する関数がない場合の対応方法
– NotesSessionオブジェクトのevaluateメソッドから呼び出せる場合がある
•
メソッドの使い方はLSと同様
–
–
•
60
Webから機能しない関数には注意
参考.デザイナーヘルプ「Web での @関数 」
NotesSessionオブジェクトの取得方法は次項
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.NotesSessionオブジェクトの取得方法
入力補助ボタン
の実装
SSJSではNotesSessionオブジェクトは「session」という文字列に予め割り当てられ
ている
LSでは、出発点となるオブジェクトはNewを用いて取得
– Dim session as New NotesSession
– Dim ws as New NotesUIWorkspace
SSJSでは、あらかじめ予約語に出発点となるオブジェクトが割り当てられている
ƒ
ƒ
ƒ
–
このようなプログラムのどこからでも参照可能なオブジェクトを「グローバルオブ
ジェクト」と呼ぶ
•
•
NotesXSPDocumentオブジェクトもグローバルオブジェクト
SSJSではどのようなグローバルオブジェクトがあるかを予め把握する必要あり
LS
Dim session As New NotesSession
Dim user As String
user = session.EffectiveUserName
SSJS
//session(予約語)がNotesSessionクラスの
//グローバルオブジェクト
var user = session. getEffectiveUserName();
詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド(http://goo.gl/UqUuZ)p11
参照」
61
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.SSJSのライブラリ
ƒ
入力補助ボタン
の実装
XSPライブラリ
– 現在表示しているXSPライブラリやブラウザコンテキストにアクセスする(一部後
述)
詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド(http://goo.gl/UqUuZ)p15参照」
ƒ
Dominoライブラリ
– LSのバックエンドのオブジェクトと同様の処理が可能
詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド(http://goo.gl/UqUuZ)p21参照」
62
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.SSJSの落とし穴 Java/JSFのオブジェクトを扱う
入力補助ボタン
の実装
SSJSでは、処理途中でJavaのオブジェクトを扱うことがある
– SSJSのXSPライブラリ/Dominoライブラリのメソッドの戻り値が配列の場合など
ƒ
•
•
戻り値の型はjava.util.Listかjava.util.Vector
上記の型のメソッド/プロパティはJavaのAPIDocを参照する必要あり
–
–
–
http://java.sun.com/javase/ja/6/docs/ja/api/index.html?java/util/List.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Vector.html
SSJSではJavaクラスを介してDominoオブジェクトへアクセスしているため
•
SSJSのアクセス順序
SSJS
•
Lotus Domino
Javaクラス
LotusScript
Back engine
LotusScript
Back engine
Lotus Domino
のオブジェクト
Lotus Domino
のオブジェクト
LSのアクセス順序
LS
詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド
(http://goo.gl/UqUuZ)p41参照」
63
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化された日数計算のロジック
ƒ
入力補助ボタン
の実装
SSJSに置き換えた日数計算のロジック
SSJSで置き換えられたロジック
var startDateObj = document1.getItemValueDate("HdStartDate");
var endDateObj = document1.getItemValueDate("HdEndDate");
//yyyy/mm/dd形式に変換
startDateStr =startDateObj.toLocaleDateString()
endDateStr =endDateObj.toLocaleDateString()
var formula = '@BusinessDays([' + startDateStr + '];[' + endDateStr +
'];1:7)';
var dayCount = session.evaluate(formula);
document1.replaceItemValue("DayCount",dayCount);
64
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
部分更新の設定
営業日をSSJSで
@BusinessDays
を実行して計算
65
入力補助ボタン
の実装
部分更新で
日数を入力する
コントロールのみ更新
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
フォームの値を部分更新する
ƒ
サンプルでは以下、 2つの設定を行う
– 部分更新でdayCount1(日数を入力するコントロールのID)を指定
•
–
66
入力補助ボタン
の実装
部分更新では選択されたWebページの一部のみ更新(後述)
「検証を行わずにデータを処理する」を有効にする(後述)
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
入力補助ボタン
の実装
部分更新理解の前提-XPagesの「ページ」ƒ
XPagesの「ページ」には2つの意味がある
クライアントサイド
のページ
=
Webページ※1
サーバーサイド
のページ
≒
JSFページ※2
XPagesの「ページ」
※1以下、当資料ではクライアントサイドのページを、「Webページ」と記載する
※2以下、当資料ではサーバーサイドのJSFページを「ページ」と記載する
ƒ
67
ページはJavaのインスタンスの集合で、これをhtmlに変換し、レスポンスを返してい
る。レスポンスを返した後はキャッシュされる(詳細はp94∼参考.コンポーネント・ツ
リーとは参照)
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
NotesとXPagesの”フロントエンド”のメカニズムの違い
ƒ
ƒ
入力補助ボタン
の実装
XPagesではNotesの入力フォーム(NotesUIDocument)の役割を「ブラウザ」と
サーバー上の「ページ」が担う
– 入力中のデータはページが保持し、明示的に保存するまで文書には反映されない
全体更新も部分更新も処理順序、処理内容は変わらない
– いずれも下図の「送信」に該当
N
o
t
e
s
サーバー
Notesクライアント
①編集
NotesUI
Document
②保存
Notes
文書
編集中の
データ・状態を保持
68
X
P
a
g
e
s
①④編集
ブラウザ
②送信
XPage
HTML出力
③更新
サーバー
ページ
⑥保存
Notes
文書
⑤送信
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
日数計算アクションの部分更新の設定
ƒ
入力補助ボタン
の実装
日数計算の部分更新では妥当性検査を無効にする
– 日数は必須入力のため、無効にしない場合、SSJSで日数をセットする前に必須入
力チェックが実行されてしまう(処理順序は最後の節、p105など参照)
–
そのため「検証を行わずデータを処理する」を有効にする
サーバーオプションの設定と解説
すべて更新
サブミットする。サーバー/ブラウザの両方のページをすべて更新
部分更新
サブミットする。サーバーのページを更新し、ブラウザ側は指定した
一部のみ更新
更新なし
サブミットする。サーバーのページのみ更新。ブラウザ側は更新しな
い。
サブミットなし
サブミットしない。サーバーページは更新されない。
データの検証または
更新を行わない
サーバーのページを更新しない。
検証を行わずデータ
を処理する
妥当性検査を行わない。
※フォーム検証が有効な場合、入力確認式は行われない
部分更新はパフォーマンスの観点/レスポンスの観点から有用のため積極的
69に活用ください
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化した日数計算アクション
70
入力補助ボタン
の実装
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
実装順序
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
71
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化する承認依頼の処理順序
承認依頼ボタン押下
主要アクション
の実装
ステータスを変更して文書を保存、メールで通知
72
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼の処理順序
サブミット
XPageで置き換える要素
ポップアップ表示
(処理継続確認)
CSJS
遅延判定
73
遅延理由入力
プロンプト表示
SSJS + フォーム入力
主要ロジックの実行
(文書更新・通知メール送信)
SSJS(+スクリプトライブラリ)
終了処理
(メッセージを表示して、
フォームを閉じる)
SSJS + メッセージバー
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼の処理順序
サブミット
XPageで置き換える要素
ポップアップ表示
(処理継続確認)
CSJS
遅延判定
74
遅延理由入力
プロンプト表示
SSJS + フォーム入力
主要ロジックの実行
(文書更新・通知メール送信)
SSJS(+スクリプトライブラリ)
終了処理
(メッセージを表示して、
フォームを閉じる)
SSJS + メッセージバー
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
承認依頼を例に-ポップアップの表示の置き換えƒ
CSJSに置き換える
– [承認依頼]ボタンのイベントタブの[クライアント]に記述
–
キャンセルされた場合などは、“return false”とすると処理が中断される
LS
'処理継続確認
askme = ws.Prompt (PROMPT_YESNO, _
"継続確認", "休暇申請を承認します。よろしいで
すか?")
If askme = 0 Then Exit Sub
75
主要アクション
の実装
CSJS
//処理継続確認
var askme = window.confirm("承認依頼を行
います。よろしいですか?");
if(askme != true){return false};
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼の処理順序
サブミット
XPageで置き換える要素
ポップアップ表示
(処理継続確認)
CSJS
遅延判定
76
遅延理由入力
プロンプト表示
SSJS + フォーム入力
主要ロジックの実行
(文書更新・通知メール送信)
SSJS(+スクリプトライブラリ)
終了処理
(メッセージを表示して、
フォームを閉じる)
SSJS + メッセージバー
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼を例に-遅延理由入力の置き換えƒ
遅延理由の入力はフォームから入力するように置き換える
– CSJSへの置き換えは行わない(次項)
※遅延判定はLSからSSJSに書き換える。詳細はサンプル参照。
Notes
XPages
+
77
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
承認依頼を例に-遅延理由入力の置き換えƒ
主要アクション
の実装
プロンプトの表示
– view.postScriptメソッドを利用
•
•
クライアントにロード後に実行されるCSJSを文字列として指定
viewは画面全体を現すグローバルオブジェクト(Notesのビューとは異なる、後述)
SSJS
view.postScript("alert('遅延理由を入力してください。');");
78
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
承認依頼を例に-遅延理由入力の置き換えƒ
主要アクション
の実装
フォームに遅延理由を表示
– 承認依頼のロジック・・・フラグを立て、”return”で処理を中断
SSJS
document1.replaceItemValue("DelayFlag","1");
return false;
–
フォーム・・・遅延理由のラベル/編集ボックスを配置した表のセルの[可視]プロパ
ティを、フラグがたっている場合のみ表示する
•
プロパティから[可視]プロパティを[値の計算]とし、下記のロジックとする
SSJS
document1.getItemValueString("DelayFlag") == "1";
79
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
補足-遅延理由入力の置き換えƒ
プロンプトを置き換える際の考慮点
– CSJSのwindow.promptメソッドを使用するのがもっともLSのプロンプトの
[PROMPT_OKCANCELEDIT]オプションの操作感に近い
–
ただし、IE7/IE8では、デフォルトでwindow.promptメソッドがブロックされる
•
80
主要アクション
の実装
「ツール」→「インターネットオプション」→「セキュリティタブ」→「レベルのカスタマイズ」「スクリプト化されたウィンドウを使って情報の入力を求めることをWebサイトに許可す
る」を有効にする必要あり
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼の処理順序
サブミット
XPageで置き換える要素
ポップアップ表示
(処理継続確認)
CSJS
遅延判定
81
遅延理由入力
プロンプト表示
SSJS + フォーム入力
主要ロジックの実行
(文書更新・通知メール送信)
SSJS(+スクリプトライブラリ)
終了処理
(メッセージを表示して、
フォームを閉じる)
SSJS + メッセージバー
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼を例に-主要ロジックの置き換えLSをSSJSに置き換える
ƒ
–
バックエンドロジックの置き換えは、原則、文法やネーミングルールの違いの修正
のみ
LS
Set db = ss.currentdatabase
Set doc = db.Createdocument()
Set rtitem = New
NotesRichTextItem(doc,"Body")
Call rtitem.Appendtext(db.Title)
Call rtitem.AppendDocLink( linkdoc,
db.Title )
Call rtitem.Appendtext(":" & bodymessage)
doc.Subject = Subject
doc.SendTo = Sendto
doc.Copyto = Copyto
doc.Send( False )
SSJS
var doc:NotesDocument =
database.createDocument();
var rtitem:NotesRichTextItem =
doc.createRichTextItem("Body");
rtitem.appendText(database.getTitle());
rtitem.appendDocLink( linkDoc,
database.getTitle() );
rtitem.appendText(":" + bodyMessage);
doc.replaceItemValue("Subject",subject);
doc.replaceItemValue("Sendto",sendto);
doc.replaceItemValue("Copyto",copyto);
doc.send(false);
※通知メールを送信するスクリプトライブラリのロジック抜粋
※JavaScriptは大文字小文字を厳密に判定するので注意
LSとSSJSの差異の詳細は「Notes開発者向けXPagesのサーバーサイドJavascriptガイド
(http://goo.gl/UqUuZ)p21-31参照」
82
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.スクリプトライブラリの置き換え
ƒ
主要アクション
の実装
LSのスクリプトライブラリはSSJSのスクリプトライブラリに置き換え可能
– SSJSのスクリプトライブラリの呼び出し方法は下記いずれか
•
SSJSの冒頭でimport文で呼び出し
SSJS
import jsLibCommon;
•
下記からリソースに追加しておくと、都度importにより呼び出す必要はない
–
83
[XPages]/[カスタムコントロール]-[リソース]-[追加]-[JavaScriptライブラリ]
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
参考.SSJSのスクリプトライブラリの考慮点
ƒ
SSJSのスクリプトライブラリ上でグローバル変数を使用することは非推奨
グローバル変数
ローカル変数
–
アプリケーションスコープ(後述)のようにページ/セッションを越えて共有するよう
な動作をする
•
–
異なるユーザーとも共有される
メモリ上に保持する時間は定義されておらず、任意の時間(OSが要求するまで)
で破棄されるため、使用は推奨されない
•
詳細は下記参照
『Are global variables in server-side JavaScript libraries shared across
sessions in XPages?』
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-globalscriptlibrary-variables.htm
84
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼の処理順序
サブミット
XPageで置き換える要素
ポップアップ表示
(処理継続確認)
CSJS
遅延判定
85
遅延理由入力
プロンプト表示
SSJS + フォーム入力
主要ロジックの実行
(文書更新・通知メール送信)
SSJS(+スクリプトライブラリ)
終了処理
(メッセージを表示して、
フォームを閉じる)
SSJS + メッセージバー
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPages化した終了処理
ƒ
86
主要アクション
の実装
ビューページへ遷移し、メッセージバーにメッセージを表示する
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
主要アクション
の実装
承認依頼を例に-終了処理-①画面遷移
ƒ
画面遷移(次の画面を表示)
– 他のXpageへのリダイレクトはメソッドをひとつ呼ぶだけで可能
XPage以外へリダイレクトする方法は「Notes開発者向けXPagesのサーバー
サイドJavascriptガイド(http://goo.gl/UqUuZ)p47参照」
LS
'画面を閉じる
Call uidoc.close
87
SSJS
//画面遷移、contextはグローバルオブジェクト
context.redirectToPage("holidayView")
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
承認依頼を例に-終了処理-②メッセージの表示
ƒ
メッセージバーに表示できるように、sessionScope.Msgにメッセージを格納(次項に
詳細)
•
sessionScopeとはページを越えて共有できるスコープ変数。
LS
SSJS
MsgBox "休暇申請を行いました。"
ƒ
主要アクション
の実装
sessionScope.Msg="休暇申請を行いました。"
スコープ変数とは
•
–
スコープ変数を用いると、宣言を行わず、[xxxScope.”任意の名前”]に値やオブジェクト
を格納できる
※事前に変数名の定義/宣言などを行う必要はない
スコープ変数の種類と有効範囲はp97参照
–
例.値を格納する場合
var userName = "IBM User";
sessionScope.name = userName;
–
例.値を呼び出す場合
var userName = sessionScope.name;
88
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
補足.メッセージバーの実装方法
ƒ
ƒ
カスタムコントロールを作成
パネルコントロールに計算結果フィールドコントロールを配置
ƒ
計算結果フィールドに下記の値をバインド
– ページ間をまたぐのでセッションスコープを使用する(後述)
主要アクション
の実装
SSJS
//メッセージを表示
sessionScope.Msg
ƒ
パネルの[可視]プロパティに下記のロジックを記述
//メッセージがあるときのみ表示
sessionScope.Msg != null;
ƒ
カスタムコントロールの[afterRenderResponse]イベントに下記のロジックを記述
※afterRenderResponseイベントは、HTML生成後に実行される(詳細は後述)
SSJS
//メッセージを初期化
sessionScope.Msg = null;
89
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
作成手順の完了
画面レイアウト設計・実装
フォームの実装
入力補助ボタンの実装
(日数計算)
主要アクションの実装
(承認依頼エージェント)
90
© 2012 IBM Corporation
参考.XPagesの設計でつまずかないために
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
XPagesの設計でつまづかないために
ƒ
ƒ
ƒ
ƒ
ƒ
92
ページとコンポーネント・ツリー
オブジェクトの生成と破棄のタイミング
スコープ変数の有効範囲
イベント順序
実行順序
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
NotesとXPagesの主要なオブジェクトの違い
Notes
クライアント
フロントエンド
バックエンド
NotesUI
Document
Notes
Document
XPages
サーバー(メモリ)
ブラウザ
GET/POST
Web
ページ
93
HTML
生成
ページ
コンポーネント NotesXSP
Document
・ツリー
Notes
Document
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
コンポーネント・ツリーとは
ƒ
JSFの仕組みで、XPageのコントロール(タグ)の階層構造をJavaオブジェクトのインス
タンスの階層構造に置き換えたもの
– コントロール(タグ)1つが1つのJavaオブジェクトに対応
– 入力されたフィールドの値や、表示/非表示などの状態(ステート)を、文書に保存
することなく、サーバー側で保持する
•
新規にWebページにアクセスした段階で生成され、クライアントにレスポンスを返した後
もキャッシュされる
対応するコントロール
対応するタグ
コンポーネントツリー
<xp:view>
View※
ラベル
<xp:label>
Label1
編集ボックス
<xp:inputText>
InputText2
ボタン
<xp:button>
Button1
※ViewはMVCのVで、コンポーネントツリー全体をあらわす。Lotus Notes/Dominoのビューとは異なる
94
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
コンポーネント・ツリーのライフサイクル
Restore View
コンポーネント・ツリーを作成/復元
新規アクセス
Apply Request Value
送信されてきた値をSubmitted Valueとして、
各コンポーネントに格納(p44と関連)
Process Validations
コンバーター/妥当性検査の実行
妥当性検査エラー
Update Model Value
Invoke Application
イベントのサーバーサイドスクリプトの実行
Render Response
HTMLを出力し、レスポンスを返す
キャッシュ
95
各コンポーネントの値へ反映
ページをメモリまたはディスクに格納(次項)
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ページの有効範囲-キャッシュされるページの最大数ƒ
ƒ
デフォルトでは16(ページをディスクに保存)
ページが破棄された場合、Submitを行って保存しようとしても処理されない
–
–
初めてそのページを開いた状態に戻ってしまう
XPagesでは、なるべく同一ページを遷移する設計がのぞましい
•
•
ƒ
キャッシュされるページの数は下記のプロパティから変更可能
– [アプリケーションのプロパティ]-[XPage]-[サーバーページの保持:」
•
•
•
•
96
「Xpages:保存のアクションを実施したのに内容が保存されないことがある」
http://www-01.ibm.com/support/docview.wss?uid=swg21465472
サーバーのデフォルト(何も設定していない場合「ページをメモリの保存」と同様
ページをメモリの保存・・・キャッシュされるページは4つまで
ページをディスクに保存・・・キャッシュされるページは16まで
現在のページのみをメモリに保存・・・上記2つの組み合わせ。キャッシュされるページは
16まで。
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
NotesDocumentオブジェクトの有効範囲
ƒ
NotesDocumentオブジェクトはページにアクセスがあった段階で生成され、ページ
がキャッシュされるタイミングで破棄される
– データソースにDomino文書を指定している場合
– 各イベント(後述)の変更は、保存しない限り、1回のリクエストの間だけ引き継が
れる(検証により確認)
HTMLレスポンス
URLへリクエスト
ページ
イベント発生
生成
ページ
生成&文書
イベント発生
読取
キャッシュ
破棄
NotesDocument
※新規アクセスの場合
97
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
スコープ変数とその有効範囲
ƒ
スコープ変数一覧
– applicationScope・・・アプリケーションの範囲。異なるユーザー間でも共有され
る
–
sessionScope・・・セッションの範囲。一人のユーザーのセッションの間保持され
る
※sessionScopeはアクセスしているDBに保存されるため、複数DBで共有はできない。
–
viewScope・・・表示の範囲。1つのページ内でのみ有効。ページを遷移すると無
効
–
requestScope・・・要求の範囲。1つのページ内の1回のリクエスト(サーバーへ
のサブミットとそのレスポンス)の間のみ有効
次項に注意事項を記載。非常に便利だが、動きを把握するまでは多用するこ
とは控えるほうがベター
98
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.スコープ変数の注意点①有効範囲
ƒ
applicationScopeとsessionScopeの有効時間はデフォルトでは30分
–
–
上記のスコープ変数を用いる場合、アプリケーションの設計として、タイムアウトを
考慮する必要がある
上記変数が無効になった場合にも正常に処理が行われるように設計する
•
–
有効時間の設定はアプリケーションのプロパティから変更可能
•
ƒ
99
参考. XPages のスコープ変数の有効範囲とタイムアウト(http://goo.gl/3RbjG)
[アプリケーションのプロパティ]-[XPage]-[エラーとタイムアウト]
サーバー文書/Webサイト文書で[アイドル状態のセッションのタイムアウト」をデフォ
ルトより長くしている場合は特に注意
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.スコープ変数の注意点②格納可能なものとそうでないもの
ƒ
Notesのオブジェクトは格納できない
– Can I cache Notes objects (like a NotesDocument object) in scoped
variables in XPages?
– http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-cache-notesobjects-in-scoped-variables.htm
ƒ
シリアライズ可能ではないオブジェクトをviewScopeに格納している場合、[ページを
ディスクを保存]を有効にしているとエラーになる
– Do's and Do Not's for XPages Scoped Variables
– http://www10.lotus.com/ldd/ddwiki.nsf/dx/Dos_and_Do_Nots_for_XPages_Scop
ed_Variables#Serialization+Issue
100
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
イベント-ページイベントƒ
XPageには6つのページイベントが用意されている
※アウトラインで[XPage]を選択した
状態で[イベント]タブを開いた画面
ƒ
設定できるのはサーバーサイドの処理のみ
– onClientLoadのみクライアントサイドが記述可能
ƒ
実行順序は次ページ参照
101
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
ページイベントの実行順序
新規アクセス(GET)
ライフサイクルのフェーズ
継続アクセス(POST)
Restore View
beforePageLoad
afterPageLoad
afterRestoreView
Apply Request Value
Process Validations
Update Model Value
beforeRenderResponse
afterRenderResponse
Invoke Application
Render Response
beforeRenderResponse
afterRenderResponse
onClientLoad(CSJS)
102
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
文書イベント
ƒ
文書イベントは7つ
– queryNewDocument
– queryOpenDocument
– querySaveDocument
– postNewDocument
– postOpenDocument
– postSaveDocument
– computeDocument
ƒ
ƒ
それぞれ文書に対して操作を加えたタイミングで発生
[データ]-[イベント]タブから文書に関するイベントが記述可能
–
103
実行できるスクリプトはすべてサーバーサイド
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
NotesとXPagesのページイベント/文書イベントのマッピング
ƒ
1対1では対応しない
Notesフォームイベン
ト
XPagesで対応するイ
ベント(候補)
Notesフォームイベン
ト
XPagesで対応するイ
ベント(候補)
QueryOpen
Querymodechange
なし(文書モードの変
更に紐づけて実行)
PostOpen
queryNewDocumen
t/queryOpenDocu
ment/beforePageL
oad
postNewDocument
Postmodechange
なし(文書モードの変
更に紐づけて実行)
Queryrecalc
afterRestoreView
Querysend
なし(sendを行うロジッ
クの前に記述)
Postrecalc
computeDocument
またはなし
Postsend
なし(sendを行うロジッ
クの後に記述)
Querysave
querySaveDocume
nt
Queryclose
なし(CSJSの
onUnLoadなど)
Postsave
postSaveDocument
104
/postOpenDocume
nt/afterPageLoad/o
nClientLoad
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.XPagesの実行順序
新規アクセス(GET)
サブミット(POST)
queryNewDocument
イベント-CSJS実行-
フォーム検証(文書ロード時)
RestoreView
afterRestoreView
postNewDocument
computeDocument
beforePageLoad
RestoreView
beforeRenderResponse
Render
Resnponse
妥当性検査
イベント-SSJS実行-
ページ読み込み時に計算
afterPageLoad
コンバーター
Process
Validations
querySaveDocument
Invoke
Application
フォーム検証(文書保存時)
(文書の保存)
動的に計算
postSaveDocument
(HTMLレンダリング)
computeDocument
afterRenderResponse
beforeRenderResponse
value-動的に計算-
onClientLoad(CSJS)
Render
Resnponse
(HTMLレンダリング)
afterRenderResponse
文書イベント
ページイベント
値の計算のタイミング
その他
検証により確認。POSTするときに文書を保存する前提。http://goo.gl/Y3IhJも参照推奨
105
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.XPagesでのCGI変数/URLコマンド
ƒ
XPagesでのCGI変数でのアクセス方法
– How to access CGI variables in XPages
– http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-cgivariables.htm
ƒ
Domino URL コマンドと同様 XPagesでもURLによる操作が可能
–
–
–
106
データソースのプロパティに関連したパラメータを用いる
参考.XPages データソース解説 - URL パラメータ
http://goo.gl/qn3Gr
参考.デザイナーヘルプ『data - データソース』
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.XPagesでのHTMLタグの書き方
ƒ
計算結果フィールドコントロールを利用して動的に出力する
– XPages コントロールの紹介:「計算結果フィールド」コントロール
– http://goo.gl/ue4mn
ƒ
ビューの列の出力をHTMLにする
– XPages のビューコントロールのリンクを別ウインドウで開くようにする
– http://goo.gl/yuX8U
ƒ
直接記述する
– XPages における範囲指定要素: <DIV> と <SPAN>
– http://goo.gl/gGvnY
– How can I use native html tags inside XPages?
– http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-using-nativehtml-tags.htm
107
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
まとめ
ƒ
XPagesはNotesをWeb化する際にも開発生産性が高い
– Upgrade Pack 1では豊富なコントロールを追加
•
画面作成を容易にするアプリケーションレイアウトコントロール
–
•
Notesのピックリスト/宛先リストやダイアログもコントロールで実装可能
–
•
–
Dojoを用いずともリッチなUIが開発可能
モバイル対応も容易
部分更新
•
ƒ
html + CSSでデザインを一から行う必要はない
Webサービスを開発することなく、部分更新が実装可能
ただし、NotesDBをXPages化するためには、Notesの幅広い技術要素とXPagesの
対応を知る必要がある
– 幅広いXPagesの理解があるとよりよい
XPages 技術者コミュニティー
http://goo.gl/cQtYp
• IBM XPages Japan イケヤマ君のつぶやき
http://ja-jp.facebook.com/xpagesjapan?sk=app_206014466086412
•
108
ぜひまず1つNotesDBのXPages化の設計・開発をしてみてください!
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.XPagesのヘルプ
ƒ
Standard版のみ参照可能
ƒ
Lotus Domino Designer User Guideの
一部とLotus Domino Designer XPage
のリファレンスに記載
109
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ヘルプ以外の情報源①
ƒ
Lotus Notes and Domino Application Development wiki
– XPagesの情報はwikiに多く掲載されている。
•
•
日本語のカテゴリ
http://goo.gl/2kg8l
XPages リンク集
–
•
各コントロールやOneUIの解説などへのリンク集
http://goo.gl/ZD6sp
Domino Designer XPages Extension Library(英語)
http://goo.gl/engyS
•
API Documentation(英語)
http://goo.gl/wzqjz
XPages開発のお供に「Demonstration Application for XPages」
http://goo.gl/cMg2k
Notes 開発者のための XPages SSJS 解説
•
SSJSサンプルコード(英語)
•
•
http://goo.gl/QHTZ6
–
“クラス名” + “sample JavaScript code for XPages ” というタイトルで各クラスのサンプルコードがある
http://goo.gl/qk4Bv
※ページを開いたタイミングでエラーが表示される場合は、各ページをタイトルで検索しなおしてくだ
さい
110
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ヘルプ以外の情報源②
ƒ
Developer Works Lotus/Notes Domino
– 主にアプリケーション開発の項目に多くのXPagesの情報を掲載
http://www.ibm.com/developerworks/jp/lotus/products/lnd/
– Lotus Domino 8.5.1 を使用した Domino Web アプリケーションの構築
http://goo.gl/Am2fa
–
チュートリアル
•
XPages入門
http://www.ibm.com/developerworks/jp/lotus/education/xpages/
•
新人SEが学ぶ XPages
http://goo.gl/S4uwc
•
111
Lotus Domino Designer での XPages 機能の活用
http://www.ibm.com/developerworks/jp/lotus/education/ls-ddxpages/
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ヘルプ以外の情報源③
ƒ
ƒ
ƒ
112
XPages技術者コミュニティー
– ディスカッションやwiki/ファイルなどを共有
http://goo.gl/ApvMS
XPages.Info
– サンプルアプリの操作が可能。一部のサンプルはDL可能
http://xpages.info/XPagesHome.nsf/DemosJapan.xsp#
OpenNTF
– http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-8427T9
© 2012 IBM Corporation
既存NotesアプリケーションのXPages化におけるポイント
参考.ヘルプ以外の情報源④
ƒ
テクてく Lotusコミュニティー
– テクてくLotus 技術者夜会の資料を公開。デベロッパー編にはXPagesのハンズ
オンなどがある
http://goo.gl/XH0mk
ƒ
ƒ
ICS Business Partner Technical Enablement team Japan Blog
– XPagesのTipsや製品の最新情報の提供など
http://goo.gl/uCLNw
notes/domino liaison
– Teamstudio社のテクニカルディレクター、加藤氏のサイト
•
113
XPagesのチュートリアル、Tipsなども掲載
http://notesdominoliaison.blogspot.com/
© 2012 IBM Corporation
Fly UP