当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2011年12月18日日曜日

おじさんSEが学ぶXPages(11)

すっかり、週末更新ブログとして定着してしまった感がありますが、そんな事はありません!
週末(及び祝祭日)以外にも更新するようにしますよ。
間違っても、筆者の事を「週末ブロガー」とか呼ばないようにしてくださいね。

実際、今年は一週間に一本も書いてないんですよね。これではブロガーとは呼べませんものね。
ということで、もっと更新回数を増やすようにしますので応援よろしくお願いします!!

では、応援ボタンをポチッと押してから先へどうぞ。
にほんブログ村 IT技術ブログへ




さて、前回は・・・
そうですね。

「1.蔵書登録/編集画面から貸出が出来ない。」を実現させました。
ですが、最後にクイズ?にしたように、もう少しだけやることがあります。
このブログの読者の皆様は分かったでしょうか?

そうです。「蔵書登録/編集」画面のStatusを"貸出中"に変更したけど、
そもそもそんなフィールドは用意していないし、「蔵書登録/編集」のXPageや「蔵書一覧ビュー」XPageに表示するようにしていないのです。


では、それらを実際に設定してみましょう。
解決するべき問題点で言えば、「3.蔵書登録と蔵書貸出が連動していないので、蔵書が貸出可能状態にあるのかどうか不明。」になります。

まず、Statusフィールドです。通常、ノーツ文書に登録するフィールドは、フォーム上で定義しておく必要がありますが、これは必須ではありません。
前回作成したような、エージェントによるバックエンドでの更新であれば、フォームにフィールドを作成しておく必要はないのです。
ですので、今回は、フォームにはStatusフィールドは作成しない状態で進めます。

しかし、XPageにはこのフィールドを追加する必要があるので、「蔵書登録/編集」画面が定義してある「BookResource」カスタムコントロールを開きます。


「蔵書登録/編集」画面の表があるので、その中に「Status」フィールドの内容を表示させるようにしましょう。
 「購入日」と[保存]ボタンの間の行に、マウスカーソルを合わせて、右クリックします。
メニューが表示されるので、「行を下に挿入」を選択します(下図)。
行を下に挿入

すると、表に行が挿入されるので、左側のセルに「ラベル」、右側のセルに「計算結果フィールド」をそれぞれドラッグ&ドロップします。
ラベルと計算結果フィールドの追加

「ラベル」のラベルは、"状況:"に変更します。
「計算結果フィールド」は、「プロパティ」ビューの「値」タブを開いて、次のように変更します。
・「使用するバインドデータ」は、"JavaScript"に変更します。
・「JavaScript(サーバサイド)」のエディタ部分には、
document1.getValue( "Status" )
と記述します(下図参照)。
計算結果フィールドの値


上記の式の内容ですが、
document1というのは、「蔵書登録/編集」文書をXPagesに連結させたデータなので、文書中にあるStatusの値を取得するというものです。

これで、「蔵書登録/編集」のXPageを開いたときに、その蔵書が貸出中ならば、"貸出中"と表示されます。

次に「BooksCollectionView」カスタムコントロールに、Statusの値を表示するようにします。
この場合、先にノーツのビューを修正しておくと簡単です。
ということで、「蔵書一覧(BooksCollectionView)」ビューを開いて、最後尾に「Status」 を表示する列を追加します(列のタイトルは、"状況"としてください)。
このビューが保存できたら、「BooksCollectionView」カスタムコントロールを開きます。


ビューのデータが表示された表があるので、一番右側の列(購入日)にマウスカーソルを合わせて、右クリックします。
ポップアップメニューが表示されるので、「列を追加」を選択します(下図)。
列を追加

すると、列が追加されるので、「プロパティ」ビューの「データ」タブを開きます。
「列の値」にある「ビューの列」の右側のボックスをクリックすると、ビューに設定された列の一覧が表示されます。
先ほど追加した、「状況」列が確認できるでしょうか(下図参照)。

ビューの列に「状況」を追加

確認できたら、それを選択します。すると、表の列のタイトル部分のセルが「状況:」に変わり、値部分のセルが「Status」に変わります。
このままでも良いのですが、貸出中かどうかが目立たないので、フォントスタイルを変更してみましょう。
同じく「プロパティ」ビューの「フォント」タブを選択します。
カラーを赤に、スタイルは太文字にしてみましょう(下図参照)。
Status列のスタイルを変更


この状態で、「BooksCollectionView」カスタムコントロールを保存します。
これで、完了です。



順番が前後しましたが、「2.そのため、蔵書を貸し出しするのに、蔵書名を選択する必要がある。」についても、何か良い案がないか考えてみましょう。

まず、どんな問題なのかの再認識から。おじさんSEが学ぶXPages(9)で「蔵書貸出」のボタンを作成しました。
これは、単純に「蔵書貸出」画面を表示するだけなので、蔵書名が選択されない状態なので、正しい蔵書名を入力する必要があるのです。

解決方法はいくつか考えられますが、今回はXPagesの機能の一つである「タイプアヘッド」を使ってみましょう。


タイプアヘッドは、編集ボックスに何か入力されたら、それに関連する候補の一覧を表示するというものですので、貸出可能な蔵書の候補が表示される必要があります。
貸出可能な蔵書名の一覧は、現時点では、どこにもありませんので、専用のビューを作成しましょう。
ビューは、「蔵書一覧」をコピーして作成します。
変更点は、次の通り。
名前は、「在庫一覧」
別名は、「NonLendingBooksCollection」
選択式は、「SELECT Form ="BookResources" & Status =""」
これで、完了です。

次に、「LendData」カスタムコントロールを開きます。
蔵書名にタイプアヘッドを仕掛けることになります。
そこで、「BookName」の編集ボックスを選択した状態で、「プロパティ」ビューを開きます。
すると、その中に「タイプアヘッド」タブがあるので、選択します。
そうしたら、「タイプアヘッドを有効化」にチェックをつけます(下図参照)。
「タイプアヘッド」タブ

今度は、以下の変更を行います。
「モード」は"部分"に変更します。
「大文字と小文字を区別する」のチェックは外します。
そして、「候補」ボックスの右にある◇をクリックして、「値の計算...」を選択します。

候補は、さきほど作成したビューの1列目なので、
@DbColumn(@DbName(), "NonLendingBooksCollection", 1)
とします。
候補を表示する関数

記述できたら、[OK]をクリックします。
すると、「候補」の箇所が「{計算済み}」に変わります。

これで、タイプアヘッドの機能が完成です。
簡単ですね。
ちなみに、蔵書名が日本語(漢字含む)であっても、しっかりと反応してくれます。


今回は短いですが、ここまで。

次回は、返却関連ではなく、「6.蔵書登録/編集画面、蔵書貸出画面ともに入力チェックが行われていない。」について、作業を行います。







Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ


0 件のコメント: