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

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

2012年3月26日月曜日

曜日の割り出し(XPages編)

なんと、気がついたら、ブログ開設から丸4年を過ぎました。ということで5年目突入です!
やっと5年目なのか、もう5年目なのかは分かりませんが、今後ともよろしくお願いします。


お祝いしてくれるという方は、是非このボタンをクリックしてやってください。
にほんブログ村 IT技術ブログへ


さて、今日はXPagesネタです。
ノーツで日付から曜日を割り出すというのはよくやっています(このブログでも紹介していますネ)が、XPages での方法を紹介します。

分かりやすくするために、あらかじめ
「Schedule」と言う名前でフォームを作成しておきます。
そこに「StartDate」という日付/時刻フィールドを用意しておきます。
SCheduleフォーム

次に、適当なXPageを作成します。
そうしたら、先ほど作成したフォームを「データソース」として定義します。

定義できたら、データソースをXPage上にドラッグ&ドロップします。
データソースをXPage上にドラッグ&ドロップ

すると、「startDate1」という名前で日時ピッカーが作成されますので、これのデフォルト値を設定します。
「startDate1」コントロールを選択して、プロパティビューを開きます。
「データ」タブを開き、デフォルト値の横にある◇をクリックして、「値の計算...」を選択します。
スクリプトエディタが開くので、
@Today()
と記述します。
ちなみにこれは、サーバサイドJavaScript上で使える@関数です。
従来の@関数と違うのは、()が付くかどうかです。
どのように書けばよいのか不安な場合は、
スクリプトエディタの左側部分にある[参照]タブを開き、そこから「@Functions」を選びましょう。
利用できる@関数とその構文が表示されます。
その関数をダブルクリックすれば、右側のエディタ欄に転記されるのでとても便利です。
startDate1のデフォルト値をセット

これで、startDate1 には今日の日付が表示されるようになります。

次に、曜日を表示させるための「計算結果フィールド」コントロールをドラッグ&ドロップします。
表示させるだけなので、場所はどこでも良いです。

そのコントロールを選択した状態で、プロパティビューを開きます。
「値」タブを開き、「使用するバインドデータ」をJavaScriptに変更します。
すると、エディタが表示されるので、そこに以下の式を入力します。
var wday = @Text( @Weekday( getComponent("startDate1").getValue() ) );

var from = @List( 1, 2, 3, 4, 5, 6, 7 );
var to   = @List( "日", "月", "火", "水", "木", "金", "土" );
" (" + @Replace( wday, from, to ) + ")"
getComponent("startDate1").getValue()
というのは、日時ピッカーの値を取得しています。
@Weekday()は、ノーツの@関数と同じで、指定した日付の曜日を1-7で返すものです。
@Replace()関数で、1-7の数値を"日"~"土"に変換しています。
その前の@Listは、指定した値でリストを作成するものです。
@Replaceは変換する文字列をリストで指定する必要があるため、このようにしています。
曜日の算出

これで、このXPageを開けば、今日の日付と曜日が表示されます。
曜日のプリビュー

しかし、このままでは、日時ピッカーで日付を変更しても反映されません。
それではつまらないですね。というか意味がありません。
ここでは、+αとして、日時ピッカーの値が変更されたら曜日も同時に変更するという事をやってみましょう。

と言っても、とても簡単です。
日時ピッカーコントロール(startDate1)を選択して、イベントビューを開きます。

イベントの一覧から、「選択して変更」のところにある「onChange」をクリックします。
その状態で、右側の方にある「サーバーオプション」の中から「部分更新」を選択します。
すると、[要素の選択...]ボタンが有効になるのでクリックします。
「更新する要素の選択」ダイアログが表示されるので、computedField1を選択します。
更新する要素を選択

この「computedField1」というのは、曜日を表示している計算結果フィールドコントロールの事です。
つまり、日時ピッカーの値が変更されたら(onChangeイベント)、 「computedField1」を更新しなさいという事です。

これでXPageを保存すれば、完了です。

簡単でしたね。結果は、是非ご自身の目で確かめてください。


このように徐々にではありますが、XPages 関連のネタも少しずつ増えてきましたので、色々とご紹介できるようになるかと思います。

くどいようではありますが、今後も当ブログ、そして筆者の会社(株式会社エフをよろしくお願いします。



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

2012年3月25日日曜日

デフォルトのスクリプトライブラリタイプを変更する

XPagesDay の講師をやると宣言したものの、果たして何を話せばよいのか、困りまくってる筆者です。
なんとなく題材は決めたのですが、50分持たないよなぁ・・・


という状況はさておき、今日もLotus Domino Designerの使い方についてです。

にほんブログ村 IT技術ブログへ


今回は、スクリプトライブラリで 、プログラムを作るときの方法についてです。
8.5(だったかな?)から、スクリプトライブラリでのライブラリを作る画面が変わりました。
新規スクリプトライブラリ作成ダイアログ

画面をよく見ると分かるのですが、別のアプリケーションに対して作成できたり、あらかじめライブラリの種類を選択する必要があったりします。
アプリケーションは、デフォルト値が現在開いているアプリケーションなので、ほぼ問題はないでしょう(わざわざ別のアプリケーションにライブラリを作る事はないでしょうから)。
しかし、「タイプ」は問題です。

一度作成してしまうと、ライブラリタイプは変更できません。間違えてしまうと、削除してから作成し直しという事になります。
以前のように、ESCキーを押して、作成を取りやめるという事が出来ないのです(上の画面で[OK]をクリックした時点で作成されます)。

XPages アプリケーションを作成している場合、ほとんど「サーバサイドJavaScript」しか作りません(その次に、「JavaScript」かな?)。
ですが、画面では、「LotusScript」が選択されています。
そうです!
LotusScript がデフォルト値なのです。

このために、何度LotusScriptで作成してしまった事か・・・そのたびにライブラリを削除して再作成と。
これでは効率が悪すぎます!なんとかならないのか?


あるんです。方法が!

前回紹介した、Lotus Domino Designerのプリファレンスに。
ということで、Lotus Domino Designerのプリファレンスを開きましょう。
Lotus Domino Designerを起動した状態で、[ファイル][プリファレンス]メニューを実行します。
「設定」ダイアログが表示されるので、「Lotus Domino Designer」タブを開きます。
一番下までスクロールすると、「デフォルトの言語タイプ」というセクションがあります。
Lotus Domino Designerの設定ダイアログ

ここには、4種類の設定項目があります。
この中に「スクリプトライブラリ」という項目があります。その値は「LotusScript」となっています。

もう、おわかりですね。そう。ここの値を変更すればよいのです。
試しに、「サーバー JavaScript」に変更して[OK]をクリックしてみます。
サーバー JavaScriptを選択

これで[新規スクリプトライブラリ]をクリックしてみます。
新規スクリプトライブラリ作成(サーバー JavaScript)

見事に、「サーバー JavaScript」がデフォルト値になっています。
これで、XPages アプリケーションを作成していて、誤ってLotusScriptライブラリを作成する事がなくなりますね。



---------- ここからは、IBM殿へのメッセージです ----------
この機能、嬉しいんですが、デフォルト値は1つしかもてないんですよね。
「作業セット」単位とか、「パースペクティブ」単位で、このデフォルト値が設定できると便利だと思うんですよねぇ。
どうでしょう?・・・ダメかな。









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

2012年3月21日水曜日

nhttpタスクのポートを変更する

最近、ブログをサボりがちですね。すみません。とあるところからも、「ちゃんと書け!」とお叱りをいただいてしまいました。ホント、すみません。

今回も、たいしたネタではありません。


ですが、まずはボタンをクリックしてから読んでください。最近、めっきり押してくれないもんだから順位が上がらずにへこんでいます。どうぞ、クリックしてやってください。
にほんブログ村 IT技術ブログへ



さて、それでは本題。

みなさんは、ノーツアプリケーション(ノーツDB)を開発するときの環境はどうなっていますか?
開発用のサーバがあるでしょうか?それとも、自分のPCに開発用のLotus Dominoを構築しているでしょうか?それとも、Lotus Domino Designer単体で動かしているでしょうか?
筆者の場合は、「自分のPCの開発用のLotus Dominoを構築している」と「Lotus Domino Designer単体で動かしている」の2種類です。
開発環境が複数あるんですね。

XPages アプリケーションもそうですが、Web対応のノーツアプリケーションを作成する際、どうしてもプレビューをする必要があるかと思います。
XPages アプリケーションの場合、Lotus Notes クライアントで確認するという手法もあるわけですが、どうしてもWeb ブラウザイメージでの確認が必要な場合もあります。

ローカルPCで開発をしている場合、ウィルス対策ソフトが邪魔をする。という話が良く聞かれます(ました?)。
インターネットで検索すると、大抵、ファイヤーウォールを解除するとか、ウィルス対策ソフトを停止する等、後ろ向きなことしか出てきません。

一時的には良いかもしれませんが、プレビューするたびに設定変更したりするのは面倒ですね。

ということで、Lotus Domino Designer 側でhttpタスクのポートを変更してしまうという事をやってみましょう。

え?そんな事出来るの?と言う方、出来るんです!
手順は、次の通り。

1.Lotus Domino Designer を起動します。
2.[ファイル][プリファレンス]メニューを実行します。
3.「設定」ダイアログが表示されるので、左側のツリーから「Lotus Domino Designer」を開きます。
4.「Web プリビューポート」の値を適当な数値(使われていないポート番号)に変更します。
Lotus Domino Designerのプリファレンス
5.[OK]をクリックします。

これで完了です。
実際に、XPages アプリケーションやWeb 対応のノーツDBをブラウザで起動してみてください。


パーソナルファイヤーウォールが設定されている場合、「nhttp.exe」を例外登録しておかないといけませんが、ポート番号が使えないというエラーは、これで発生しなくなります。

ちなみに、起動に失敗した場合、ローカルのlog.nsfに
2012/03/21 22:24:20   HTTP Server: Using Web Configuration View
2012/03/21 22:24:21   HTTP Server: Error - Unable to Bind port 80, port may be in use or user needs net_privaddr privilege
2012/03/21 22:24:22   HTTP Server: Shutdown
というエラーが記録されます。


なお、筆者のPCの場合、ポート番号を「8089」に変更したら、うまくいきました。
ただし、この番号でも必ず動作するかは保証しかねますので、悪しからず。


※2012年3月22日 追記
 どうやら、この機能はLotus Domino Designer 8.5.3からの新機能のようでした。道理で知らなかったはずです・・・8.5.2をお使いの方は、8.5.3にアップグレードしましょう!
よく確認しないまま投稿して済みませんでした。



さて、これでようやく、まともにXPages アプリケーションのブログ記事を書く事に専念できる・・・




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

2012年3月15日木曜日

マルチリンガル対応してみよう(2)

昨日の続きです。さすがに、夜中の1:00過ぎてまで、記事を書き続けられませんでした。

ということで、ボタンをクリックして、とっとと先へ進みましょう。
にほんブログ村 IT技術ブログへ


今度は、ビューを作成します。
基本的には、フォームと同様な形で作っていきます。
つまり、同じ名前(及び別名)で作成して、言語を「日本語」と「英語」にするのです。

筆者は、「すべての文書」「AllDocuments」という名前でビューを作成しました。
ビューの列は以下のようにしました。
列番号 列タイトル 列の値
1 件名Subject
2 分類Category
3 作成日@Created
4作成者@Author

また、アクションとして、次の2つを作成しました。
アクション名
閉じる
新規作成

ここまで出来たら、保存して閉じます。
日本語ビュー

ビューの一覧画面に戻ったら、設計のプロパティを表示します。
[設計]タブを開いて、「言語」の欄を"日本語"にします。
ビューの設計プロパティ


そうしたら、このビューをコピーします。
コピーしたビューの設計のプロパティを開きます。
こちらは、[設計]タブを開いて、「言語」の欄を"英語"にします。

名前が「コピー すべての文書」になっているはずなので、「すべての文書」に修正します。
ビューを選択した状態で、F2キーを押すと、ビュー名の変更ダイアログが表示されるので、そこで変更すると簡単です。
ビュー名の変更

さらに、ビューの設計を開いて、日本語の名前をつけていた箇所を英語に変更します。
列番号 列タイトル 列の値
1 SubjectSubject
2 CategoryCategory
3 Created Date@Created
4Author@Author

アクションはこんな感じに修正します。
アクション名
Close
New Topic

筆者の場合、こんな感じになりました。
英語ビュー

これで、出来ました。
ノーツクライアントから、このノーツアプリケーションを開いてみましょう。
日本語環境でビューを開いた

確かに日本語表示です。ビューも2つ作成したのに(日本語用と英語用)、1つしか表示されていません。

次に、「新規作成」をクリックして、文書を作成してみます。
日本語環境でフォームを開いた

日本語で作成したフォームが開いています。
折角なので、適当に値を入れて文書を作成してみます。
文書を作成した状態

では、本当にマルチリンガル対応できているのかどうかを確認するために、ノーツクライアントを英語環境に変えてみます。
[ファイル][プリファレンス]メニューを実行します。
設定ダイアログが表示されるので、[地域設定]タブを開きます。
「地域プロフィール」という項目があるので、"英語(USA)"に変更して、[OK]をクリックします。
地域設定を英語に変更

すると、ノーツクライアントを再起動する必要があるという事を告げるダイアログが表示されるので、[OK]をクリックします。
ノーツクライアント再起動確認ダイアログ

では、ノーツクライアントを再起動しましょう。

そうしたら、マルチリンガルデータベースを開きます。
おや?ビューが日本語のままですね?
いいえ。よく見てください。ビューが選択された状態になっていません。
1台のクライアントで試しているので、ビューの切り替えがうまくいかなかったようです。
英語環境デビューを開いたが失敗?

ここで慌てず、「すべての文書」ビューをクリックして開きます。
どうでしょう?ちゃんと英語表記になっていますね。
英語環境でビューを開いた

では、New Topicをクリックして、文書を作成してみましょう。
こちらも英語表記になっています。
英語環境でフォームを開いた

ということで、マルチリンガルデータベースは正しく作成できました。
思っていたよりも簡単でしたね。
XPages アプリケーションでは、まだ試していませんが、同様に簡単に行えると良いですね。

また、他の設計要素(ページやフレームセット)は、今回試していませんので、興味のある方は是非試して、結果を教えてください。


あっと、終わる前に[ファイル][プリファレンス]の「地域設定」タブで、地域プロフィールを"日本語"に戻すのを忘れないようにしてくださいね。


ではでは。







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

マルチリンガル対応してみよう(1)

今週の金曜日は、テクてくロータス技術者夜会がありますね。スペシャルゲストがいらっしゃるとの事なので、出来る限り時間を作って参加しましょう。
もちろん、筆者も行きます!


毎度の事ですが、ボタンをクリックしてから先へ進んでください。
 にほんブログ村 IT技術ブログへ



さてさて、先日、いつものように?XPages アプリケーションを作成していて、気になる事がありました。
「アプリケーション のプロパティ」の「XPage」タブに"ローカリゼーション"という項目があるではないですか!
XPage のローカリゼーション

XPages アプリケーションを作る場合、簡単に多国語対応できるのかな?と思ったのですが、
そもそも多国語対応のノーツアプリケーションを作った事がないな?ということで、どのように作るのかを検証してみました。

作り方は、「IBM Lotus Domino 8.5.1 Designer ヘルプ」の「マルチリンガルアプリケーションを作成する」という文書に出ていますので、詳細はそちらを参照してください。


まずは、普通にノーツアプリケーションを作成します。
筆者は、ローカルPCに「multilingual.nsf」というファイル名で作成しました。
タイトルは、「マルチリンガル対応DB」としました(え?すでにカタカナを使っているのがダメじゃないか!?って・・・アハハ)。


次に、作成したノーツアプリケーションのデータベースプロパティを開きます。
その中の「設計」タブを開きます。
一番下に「マルチリンガルオプション」があるので、「マルチリンガルデータベース」にチェックをつけます。さらに、デフォルトの言語を設定します。筆者は日本語が(それなりに)達者なので、日本語を選択しました。
マルチリンガルオプション

今度は、ノーツアプリケーションの中身を作ります。
Lotus Domino Designer で、ノーツアプリケーションを開きます。
フォームを作ります。
フォーム名/別名は「メイントピック/MainTopic」とします。
そうしたら、普通にデフォルトの言語(筆者の場合は、日本語)でフォームを作ります。
簡単にするために、以下のようにしました。
日本語用のフォーム


項目名 フィールド名 種類
件名 Subjectテキスト
分類 Categoryテキスト
本文 Bodyリッチテキスト

この他、アクションも作成しました。
アクション名
保存して閉じる
キャンセル
閉じる
編集する

アクションの中身は適当に書いてください。ここでは、中身は問題としません。

出来たら、フォームを保存します。
設計要素一覧画面に戻ったら、作成したフォームのプロパティを開きます。
そして、「設計」タブにある「言語」を設定します。(くどいですが、日本語にします)
日本語フォームの言語設定

では、英語のフォームを作りますが、一から作成するのではなく、日本語で作成したフォームをコピーします。
そうしたら、コピーしたフォームの設計プロパティを開き、「設計」タブを開きます。
今度は、「言語」を英語に変更します。

次に、コピーしたフォームを開きます。
フォーム名が「コピー メイントピック」になっているはずなので、
「メイントピック | MainTopic」に変更します(フォーム名がメイントピック、別名がMainTopic)。
日本語のフォームと全く同じだから、エラーになるのでは?
と思った方、残念。

マルチリンガル対応している場合は、言語が違えば、同じフォーム名で作成できるのです。
実はここがポイントです。

出来たら、フォーム内の項目名を変更します。
項目名 フィールド名 種類
Subject Subjectテキスト
Category Categoryテキスト
Content Bodyリッチテキスト

アクション名も変更します。
アクション名
Save&Close
Cancel
Close
Edit

筆者の画面はこんな感じになりました。
英語のフォーム画面



というところで、まさかの次回に続く!です。
次回は、ビューを作った後、実際に動かして検証します。








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

2012年3月9日金曜日

【告知】Xpages アプリケーションで作成する図書管理

今回は、告知です。
2011年9月から2012年1月まで、このブログで、「おじさんSEが学ぶXPages」と題して連載していた記事が、日本IBM殿のご厚意により、developerworks に掲載されました。

本ブログでできあがったXPages アプリケーションにさらに機能を追加して、また抱えていた不具合も改修したものが掲載されています。
本ブログの連載と同様に、チュートリアル形式になっていますので、「おじさんSEシリーズ」を知らない方はもちろんのこと、前回作った方も、改めて挑戦してみてください!

記事はこちらから。
Xpages アプリケーションで作成する図書管理

ちなみにタイトルは上にもあるように、「Xpages アプリケーションで作成する図書管理」としてあります。
 「おじさんSE・・・」で検索しても出てきません(笑)ので、悪しからず・・・







Lotus Notes/Dominoの事なら、何でも!!もちろん、XPagesについても承ります!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2012年3月8日木曜日

タグクラウドを使ってみよう

今日(3/8)は、XPages モバイルアプリケーション開発のセミナーがありました。

Lotus Notes/Domino 8.5.3 Upgrade Pack 1で追加されたモバイルコントロールを使って、モバイル端末用にXPages アプリケーションをカスタマイズしてみよう!というものでした。
従来のやり方でXPages アプリケーションをモバイル対応させるのは、実は結構大変でしたが、このモバイルコントロールを使うと、いとも簡単に作れてしまうのには驚きでした。

さて、そんな便利なモバイルコントロールが追加されたupgrade pack 1ですが、
OpenNTF にあった「Extension Library」も追加されています。
この中には、「タグクラウド」コントロールもあり、これをXPages アプリケーションで利用できるようになっています。

このタグクラウド、設定方法にちょっとしたコツがいるようなので、今日はその説明を書いてみます(読んだら、試した結果を教えてくださいね)。


ということで、本題に入る前に、にほんブログ村 IT技術ブログへボタンをクリックしましょう。



一つ目のポイント!
「カテゴリ別」のビューを作成すること。
「タグクラウド」コントロールを使うには、「カテゴリ別」で作成されたビューが必要です。
ビュー名は何でも構わないはずですが、隠しビューはダメなようです。今回は、「byCategory」という名前で作成しています。
※2012/03/18 訂正: ビュー名は隠しビューでも動作します。つまり、(ByCategory)という名前でも大丈夫です。
ビューの1列目は、「ソート」をしていて、なおかつ「カテゴリ別」で設定されている事です。
ビューの1列目はカテゴリ別にすること

ちなみに、下図はノーツアプリケーションに文書をいくつか追加してビューを表示した状態です。
カテゴリ別ビュー


次に、XPage を作成します。
ページ名は何でも構いません。ここでは、「tagTest」として作成しました。
「コントロール」ビューに「Extension Library」というカテゴリが追加されていますので、その中にある「Tag Cloud」というコントロールをドラッグ&ドロップします。
Tag Cloudコントロールを追加

次に、追加したTag Cloudコントロールを選択して、プロパティビューを開きます。
「すべてのプロパティ」タブを開いて、「データ」セクションにある「cloudData」の値にある[+]をクリックします。
Tag Cloudにデータを追加する

すると、xe:dominoViewCloudDataというデータが作成されるので、その中の各プロパティを設定します。
linkRequestParam 「Tag Cloud」に表示されるタグをクリックしたときにURLパラメータの名前を指定します。今回は、CategoryFilterとします。
linkTargetPage   「Tag Cloud」に表示されるタグをクリックしたときに表示するページ名を指定します。今回は、自分自身ということで、tagTestとします。
viewName      「Tag Cloud」コントロールに結びつけるビュー名(最初に作成したカテゴリ別のビュー名)を指定します。今回は、byCategoryとします。



また、「基本」セクションの中に「sliderVisible」という項目があるので、trueにしておきます。
Tag Cloudコントロールのプロパティ設定

これでtagTestページを保存すれば、設定は完了です。
下図はtagTestページをFireFoxでプレビューしたものです。
Tag Cloudのプレビュー

確かにタグが表示されているのが分かるでしょう。
さらに、タグにマウスカーソルを当ててみます。すると、画面下にURLが表示されます。
そこには、さきほど指定したURLパラメータが付いた状態になっています。
URLパラメータの確認


ビューコントロールを配置したときに、「カテゴリ名によるフィルタリング」の設定で、
context.getUrlParameter("CategoryFilter")
とすれば、選択したタグの文書だけが表示されるようになります。
これは、皆さんがご自分の目で確かめてみてください。


8.5.3 upgrade pack 1を使えば、今までのXPages アプリケーションもグレードアップしますね。

では、今日はこの辺で・・・



2012/03/27 追記
タグクラウドの設定方法をLotus Domino Wikiに記述しましたので、そちらも参照願います。



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