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

Translate

2014年4月10日木曜日

Dojo リストテキストボックスを使ってタグっぽく表現してみよう

気が付いたら4月10日です。社会人生活も25年目に入りました。そのうち、Notes/Dominoを20年(実際には途中に何度か浮気?してますが・・・)って・・・どんだけ好きなんだろう?って話ですが。

兎にも角にも、今日も元気でやっていきましょう。

ということで、ボタンクリックから始めましょう。
にほんブログ村 IT技術ブログへ


さて、今日もXPagesの話題です。
そういえば、最近「qA9 for ICS(Lotus) Developers」(リンクはこちら)というQ&Aサイトがオープンしました。ぜひ、アクセスしてNotes/DominoのQ&Aをみなさんでシェアしましょう!
ちなみにこのサイトはXPagesで作成されています。以前にあった「ドミノ懇談室」もそうですが、Notes/DominoはWeb上でもしっかり動くんですね。


今日は最近のWebサイト上でみかけるタグについての設定方法についてです。
以前、タグクラウドを使ってみようでは設定されているタグクラウドの表示方法についてでしたが、今回はタグそのものを設定する方法についてみていきます。

ですが・・・タグと言いつつ、利用するコントロールは「Dojo リストテキストボックス」です。
Extension Libraryを利用するか、8.5.3 Upgrade Pack1を利用するか、Notes/Domino 9.0 SEを利用するかのいずれかになりますが、設定方法は変わりません。
今回はNotes/Domino 9.0 SEでの画面での紹介です。

コントロールビューの「Dojo フォーム」タブから「Dojo リストテキストボックス」を選択してドラッグ&ドロップします。
Dojo リストテキストボックスをドラッグ&ドロップ

コントロールのプロパティは以下のように設定します。
valueフォームのどのフィールドに関連付けるのかを設定
multipleSeparatorテキストボックスに複数値が入力された場合の区切り文字。
ここで設定した文字はテキストの値としては利用できなくなるので要注意!

コントロールのプロパティ設定

「Dojo リストテキストボックス」自身の設定はこれだけですが、このコントロールには値を直接入力することができません。
そこで、このコントロールに値を入力する方法を追加します。

今回のサンプルでは、「ボタン」コントロールのクリックイベントを使って設定するようにします。
用意するのは「編集ボックス」コントロールと「ボタン」コントロールです。

「編集ボックス」は、特にプロパティを変更する必要はありません。
「ボタン」コントロールはonClickイベントにSSJSを記述します。
1 var inputTag = getComponent( "inputText1" ).getValue();
2 getComponent( "djextListTextBox1" ).setValue( inputTag );
簡単に書くとこんな感じでしょうか。ただこれでは、複数の値が入力できないし、重複チェックも行われていません。
そのあたりは、ご自分で実装してみてください。


そのあたりを実装したサンプル画面は以下の通りになります。
1_ビュー画面

初期画面ですね。わかりやすくするためにサンプルデータをあらかじめ作成しておきました。

2_新規作成画面
新規作成画面です。「タグ」の編集ボックス欄に入力して、[入力したタグの追加]ボタンをクリックすることでタグが追加されます。
3_タグが追加された状態
ボタンをクリックしてタグを追加した状態です。編集状態では「Dojo リストテキストボックス」はタグ値に「x」が続けて表示されます。これは、タグ値をクリックすることで追加したものを消去できますよ。ということを表しています。
4_文書を保存した後のビュー画面
[保存]ボタンをクリックして、文書を保存するとビューページに戻ります。
作成された文書が表示されています。タグ値が「,」で区切られているのがわかります。
5_読込モードで文書を開く
文書タイトルのリンクをクリックして、文書を読込モードで表示した状態です。
「Dojo リストテキストボックス」にスタイルを設定して、タグっぽく表示しています。
※「アプリケーションのテーマ」を"OneUI"にしておくと、自動でスタイルを決めてくれますので、その方が楽です。
6_クリックしたタブ値を表示
「Dojo リストテキストボックス」にonClickイベントを設定しておくと、どのタグ値をクリックしたのかを取得することができます。
※ここはちょっとしたコツがあり、そのまま「Dojo リストテキストボックス」の値を取得しても表示されない(はず)です。
7_編集モードにしてタグを1つ消去した
[編集]ボタンをクリックして、文書を編集状態にして、現在のタグ値をクリックすると、消去されます。
この状態で[保存]ボタンをクリックすると・・・
8_編集した文書を保存しなおした状態のビューページ
ビューに戻ってみると、確かにタグ値が一つになっています。

とこんな感じで、タグ値を設定することができます。
後は、この値を「タグクラウド」コントロールと組み合わせれば、タグの出来上がりです。

理解するまでに時間がかかりますが(私も一週間近くかかりました・・・)、便利に使えるのでぜひ覚えましょう!



では、今日はこの辺で・・・(午前中にアップするつもりだったのに、なんでこんな時刻に???)








【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2014年3月25日火曜日

XPagesの@Adjust関数で誤った結果が出力される

おはようございます。
今日(執筆時点)は2014年3月25日です。6年前の今日、ブログを始めました。

初の記事は、上級だぁですね。まだNotes 8.0が発売開始されたばかりの頃でNotes 7.0の資格試験を受験したという話ですね。
私はこの後、紆余曲折を経てIBM Certified Advanced Application Developer - Lotus Notes and Domino 8.5の資格をなんとか取得することができましたが、すでにNotes 9.0の資格試験が始まっているのですね。
どうしよう、受験しなくちゃ・・・

さて、ということで本日が本当の丸六年の日となります。
そんな日なので記事を更新しないわけにはいかないでしょう。

では、本題に入る前に6年目最後のボタンをクリックしましょう(でも、明日以降にこの記事を見ることもあるんだよね・・・ま、いっか)
にほんブログ村 IT技術ブログへ



今日はXPagesで利用できる@関数についてです。
@Adjust()関数という関数があります。指定した日付のy年m月z日h時間m分s秒前/後を算出するというものですね。
例えば、2014年4月1日の1か月後の日付は@Adjust( @TextToTime("2014/04/01"), 0, 1, 0, 0, 0, 0 )で算出できます。
結果は、2014/05/01が返ってきます。

実はこの関数、不具合があるようなのです。
指定した日付の前月が30日以下の場合(つまり、3月、5月、7月、10月、12月)、1か月後の値が正しく計算されないのです。

以下のような簡単なコードを作成して実行してみました。
var tmpDate;
var dspDate;
for ( var i=1;i<=12;i++ ) {
    dspDate = "2014/" + i + "/01";
    tmpDate = @TextToTime( dspDate );
    print( dspDate + "の翌月は" + @Adjust( tmpDate, 0, 1, 0, 0, 0, 0 ).toLocaleString() + "です。" );
}

実行結果は次の通り。
1~12月の翌月1日を出力した結果

赤文字になっているところを見てください。なぜか、31日になっていたり、29日になっていたりします。
確かに、前月が30日以下の月だけが誤った結果になっていることがわかります。


別の方法はいくつかありますが、例えばこんな方法があります。
var tmpDate;
var dspDate;
for ( i=1;i<=12;i++ ) {
    dspDate = "2014/" + i + "/01";
    tmpDate = session.createDateTime( dspDate );
    tmpDate.adjustMonth(1);
    print( dspDate + "の翌月は" + tmpDate.getLocalTime() + "です。" );
}

こちらの実行結果は次の通り。
1~12月の翌月1日を出力した結果(2)
今度はすべて正しい結果になっていますね。

今のところ、Domino 8.5.2、9.0.1で確認していますが、他のバージョンでも発生する可能性がありますので、XPagesで@Adjust()関数を使う場合は気を付けましょう。
きっとそのうち修正されると思います・・・


2014/03/25 17:05追記-----
@Adjust( tmpDate, 0, 1, 0, 0, 0, 0 )

@Adjust( tmpDate, 0, 1, 0, 0, 0, 0, "[InLocalTime]" )
と"[InLocalTime]"キーワードを追加することによっても、正しい結果を得ることができました。
2014/03/25 17:05追記-----

では、今日はこの辺で。





【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2014年3月17日月曜日

Ctrlキーを使ってソース検索を便利に行おう!

皆さん、こんにちは。

3月も半ばになり、ようやく暖かくなってきました。と思っていたのですが、今週末は寒の戻りにより寒くなるとのこと。
季節の変わり目は体調を崩しがちなので気を付けましょう。

また、早いところでは、桜が咲き始めているようで、そろそろお花見を・・・という方もいらっしゃるのでしょうね。
ちなみに葛飾区の水元公園の桜はまだまだでした(場所や桜の種類によっては咲いてるところもあるようです)。


ではこのボタンをクリックしたら、本題に入りましょう。
にほんブログ村 IT技術ブログへ


今日はDomino Designerの話です。
LotusScript を記述中に自作関数の仕様を確認したい、修正したいということがあるかと思います。
その関数が別のスクリプトライブラリになっている場合、いちいちそのライブラリを開いて、目的の関数を探す・・・ということをしていないでしょうか。

でも、ライブラリや関数の数が多くなってくると面倒ですよね。
そんな時はハイパーリンクの機能を使用します。

Domino Designerではデフォルトでこの機能がONになっているのですが、どこで設定されているかを確認しておきましょう。
Domino Designerを起動したら、[ファイル][プリファレンス]メニューを実行します。

プリファレンス画面が開くので、[一般][エディター][テキスト・エディター][ハイパーリンク]を選択します。
下図の画面になるので[オンデマンド・ハイパーリンク・スタイル・ナビゲーションを使用可能にする] のチェックを入れて[OK]をクリックします。
ハイパーリンクを使えるようにする

これで、Domino Designer上でハイパーリンクが使えるようになりました。
この機能のON/OFFは即時反映されるので、Domino Designerの再起動の必要はありません。


次にリンクの対象となるものを見ていきましょう。
まずは、スクリプトライブラリ。
下図はエージェントのコード画面です。 Use "LIBSample"としてLIBSampleのスクリプトライブラリを利用できるようにしています。
ここでCtrlキーを押して、マウスカーソルをあてると、下図のように青文字になり、下線が追加されます。
リンクの対象1 スクリプトライブラリ

ここでマウスをクリックすると、下図のようにLIBSampleが開きます。
LIBSampleスクリプトライブラリが開いた

エージェントに戻って、今度はLIBSampleにある自作関数の名前に、Ctrlキーを押しながら、カーソルをあてます。
先ほどと同様に青文字になり、下線がついていますね。
リンクの対象2 スクリプトライブラリの関数

そこで、マウスをクリックすると、LIBSampleが開きます。さらに関数名をクリックしたので、その関数がフォーカスされた形になっています。
LIBSampleスクリプトライブラリが開いて関数がフォーカスされている

今度は、このLIBSampleスクリプトライブラリ上で見ていきましょう。
この関数はLIBClassという別のスクリプトライブラリを使用可能にしています。
そして、このLIBClassにはClassSampleというクラスが記述してあります。
このクラス内の関数(及びプロパティ等)もリンクの対象になるのです。
リンクの対象3 クラスの自作関数

上図のリンクをクリックしてみると、LIBClassというスクリプトライブラリが開いて、さらにクリックした関数にフォーカスが当たっていることが確認できます。
クラスごとにスクリプトライブラリを作るということをしている場合、どこのライブラリだっけな?という検索の煩わしさを解消してくれますね。
自作クラスの関数がフォーカスされている

さらに、このハイパーリンク機能はlssファイルも検索の対象にしてくれるのです。
MessageBox関数の引数としてよく使う(であろう)MB_OKやMB_ICONSTOP等の定数ですが、これらの値がいくつなのかプログラムを書いているときはわかっても、後で調べるときに
「あれ?いくつだっけな?」という事もあるでしょう。

そんな時は、下図のように定数名をCtrlキーを押しながらマウスカーソルをあてます。
すると今までと同じように下線付きの青文字になるのでクリックします。
リンクの対象4 lssファイルの内容

すると、lsconst.lss(クリックしたMB_ICONINFORMATIONはこのファイル内に定義されている)が開きます。
なお、lsconst.lssはLIBClassで利用可能にしている(Use "lsconst.lss")しているので、LIBClassも自動で開きます。
lsconst.lssがDomino Designerで開いている

さぁ、いかがでしたか?
私が確認したのはLotusScriptのみでしたが、プリファレンスの内容を確認する限りでは他の言語(JavaScript等)でもできそうですね。
ということはXPagesのソース(関数限定だけど・・・)もこのように検索できることができるかも?

かなりの効率アップが見込めますので、是非、試してください。


では、今日はこの辺で。





【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2014年3月11日火曜日

累計アクセス40万超えました!そして・・・

皆さん、こんばんは。

当ブログを開始したのが、2008年3月25日。
もうすぐ丸6年が経過します。

そして、ついに累計アクセスが40万を突破いたしました!
最初の1~2年は1万アクセスを超えた!とかで喜んでいたというのに・・・

今や、それどころではなくなっています。

Notesが生まれて25年!そのうち、私が携わってなんとまぁ、20年が経過します(今度の4月で21年目です)。
そのうち、たった6年しかブログを書いていないと言ったらそれまでなんですが、
それでもこれだけ書くことがあるというのはなかなかのものではないでしょうか。

ホントに使い勝手のある素晴らしい製品ですね。
まだまだ書きたいこと(皆さんに伝えたいこと)がたくさんあります。


今後もNotes/Dominoの話題を提供できるように頑張っていきますので、応援をよろしくお願いします。


では、今日はこの辺で。

2014年3月4日火曜日

文字列の検索(StrRightBack)

皆さん、こんにちは。
3月になりました。ということは、今年はすでに6分の1を消化してしまったという事です。早いですね(笑)。
時間は万人平等に過ぎていくものなので、大切に過ごしましょう。


ということで?、本日の話題に入りますが・・・その前に
にほんブログ村 IT技術ブログへ
をクリックしてください。



さて、今日は久しぶりの文字列操作です。しかもLotusScriptです。XPagesを推進しなければいけないのに・・・

と言いつつ、先に進みます。
文字列操作の関数のうち、StrRightBackやStrLeftBack関数があります。
これらは、文字列を右側から検査していき、検査対象の文字(列)を発見したら、その文字の右側もしくは左側を取得するものです。

例えば、
c:\tmp\TestFolder\testdata.txt
という文字列があった場合、
StrRightBack( "c:\tmp\TestFolder\testdata.txt", "\" )
という関数を実行すると、その戻り値は
"testdata.txt"
 となります。

これは、フルパスを元にして、ファイル名だけを取得したい場合に利用できます。

ここで、ファイル名とそのファイルが格納されている直接のフォルダ名の両方を同時に取得したい!となった場合はどうすれば良いのでしょうか?

考えてみましょう・・・
左側から取得するのであれば、Instr関数で検査対象の文字を何回か調べていけば、x文字目からy文字目までを取得して、その後Mid関数で・・・という方法もあるのですが、
右側から取得するとなると、そうはいきません。

難しそうですね・・・
とここであきらめてはいけません。
実はStrRightBackやStrLeftBack関数等には、検査対象の文字が何回出てきたら、そこを基準とするというオプションがあるのです。

関数のヘルプをよく読むと、
occurrences 
Long。部分文字列を返す前に検索パターンが一致する数です。既定は 1 で、検索パターンが最初に一致した時点で部分文字列を返します。

という記述があります。

つまり、ここの数値を2や3にすれば、検査をその回数分、行ってくれるのです。
では、サンプルです。

1
Sub Click(Source As Button)
2   Dim sData As String
3   Dim ret   As String
4  
5   sData = "c:\tmp\TestFolder\testdata.txt"
6   ret   = Strrightback( sData, "\",, 2 )
7  
8   Msgbox _
9   "変換前:" & sData & Chr$(10) & _
10   "変換後:" & ret, _
11   0 + 64, "検索一致数の数を増やしてみる"
12  End Sub

StrRightBack関数の引数の4つ目が「occurrences」になります。
3つ目は検査対象の文字(列)の大文字小文字全角半角を区別する/しないの引数で、今回は
関係ないので、省略しています。


このサンプルの実行結果はこちら。

これなら簡単ですね。
文字列の検索を行うときはぜひ試してみてください。

応用とかもチャレンジしてみてください。


では、今日はこの辺で。






【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2014年2月27日木曜日

文書リンクをurlリンクに変更してみる

やっと暖かくなってきました。
それとともに花粉が飛散し始めているようです。家の中に持ち込まないように注意しましょう。

私も花粉症なので、注意しています。


ということで、今日もボタンをクリックしましょう。
にほんブログ村 IT技術ブログへ


では、本題です。
今日はノーツクライアントを利用していると、よく使う文書リンクについてです。
Web化(XPages化含む)するにあたって、既存の文書リンクをどうやってurlリンクへと変換させるかがポイントになってくるかと思います。

そんな時はこちらのサンプルを利用してみてください。
こちらは、"tstBody"というフィールドにある文書リンクの内容を解析して、urlリンクへと変換して"tstText"フィールドへと書き込むものです。

サンプルなので、文書を編集モードで開いた状態でないと使えません。
また、1文書に1つの文書リンクがあるという前提になっています(複数の文書リンクには対応していません)。


1
Sub Click( Source As Button )
2   Dim uiws    As New NotesUIWorkspace
3   Dim uidoc   As     NotesUIDocument
4   Dim doc     As     NotesDocument
5   Dim ritem   As     NotesRichTextItem
6   Dim rnavi   As     NotesRichTextNavigator
7   Dim rlink   As     NotesRichTextDoclink
8   Dim srvName As     NotesName
9   Dim httpUrl As     String
10  
11   Set uidoc = uiws.CurrentDocument
12   Set doc   = uidoc.Document
13   Set ritem = doc.GetFirstItem( "tstBody" )
14   Set rnavi = ritem.CreateNavigator
15   If rnavi.FindFirstElement( RTELEM_TYPE_DOCLINK ) = False Then
16       Msgbox "リンクアイテムが見つかりませんでした。"
17       Exit Sub
18   End If
19   Set rlink = rnavi.GetElement
20  
21   Set rnavi = ritem.CreateNavigator
22  
23   Msgbox _
24   "サーバ名:"     & rlink.ServerHint     & Chr$(10) & _
25   "DBレプリカID:" & rlink.DBReplicaID    & Chr$(10) & _
26   "ビューUNID:"   & rlink.ViewUnID       & Chr$(10) & _
27   "文書UNID:"     & rlink.DocUnID        & Chr$(10) & _
28   "コメント:"     & rlink.DisplayComment & Chr$(10) & _
29   "テキスト:"     & rlink.HotSpotText, _
30   0, "文書リンクの情報"
31  
32   Set srvName = New NotesName( rlink.ServerHint )
33   httpUrl = "http://" & srvName.Common & rlink.DBReplicaID & "/" & rlink.ViewUnID & "/" & rlink.DocUnID
34
  Call uidoc.FieldSetText( "tstText", httpUrl )
35 End Sub


最後のあたりは、少々強引ですが、一応urlリンクにはなります。
Web化するにあたって、DBリンクだと使いづらいな・・・という場合に利用してみてください。

もちろん、XPages化する際にも、この手法は利用できると思いますので、さらなるチャレンジをしてみてください。


上記はサンプルなので、そのままでは実用には耐えられませんので、注意してください。
改造は自由にやっていただいて良いですが、どうやったらできるの?とか、動かない!という話は承っておりませんので悪しからず。
(どうしてもというのであれば、お仕事としてお話を承りますよ)


では、今日はこの辺で。



【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2014年2月24日月曜日

XPages(JavaScript)での条件分岐

こんにちは。気が付いたらもうすぐ2月も終わりです。一日一日が早いですね。
このままいくとあっという間に2014年が終わってしまうので、気を引き締めていきましょう。


本題に行く前にこちらをクリック!
にほんブログ村 IT技術ブログへ


さて、今日はXPagesというかJavaScriptについてです。
久しぶりな感じがしますね・・・
以前にLotusScriptでの条件分岐について書きましたが、今回はXPages(というよりはJavaScript)での条件分岐の方法を記述します。


早速、サンプルです。

計算結果フィールドコントロールを配置して、「値」に以下のコードを記述します。

var ret;
switch ( @Month(@Today()) ) {
    case 1: ret="今日は一月です。";break;
    case 2: ret="今日は二月です。";break;
    case 3: ret="今日は三月です。";break;
    case 4: ret="今日は四月です。";break;
    case 5: ret="今日は五月です。";break;
    case 6: ret="今日は六月です。";break;
    case 7: ret="今日は七月です。";break;
    case 8: ret="今日は八月です。";break;
    case 9: ret="今日は九月です。";break;
    case 10: ret="今日は十月です。";break;
    case 11: ret="今日は十一月です。";break;
    case 12: ret="今日は十二月です。";break;
    default: ret="エラーです。";break;
}
ret;


LotusScriptの場合は、Select Case文を使って条件分岐を実現しましたが、JavsScriptの場合は
switch文を使います。
case節を使って、条件に合った式を書くのは同じですが、switch文の場合、break;で終わらせる必要があるところが違います。
break;を記述しないと、その後の命令をすべて実行してしまうので要注意です。
また、設定したcaseに当てはまらない場合は、default節に設定した命令が実行されます。
LotusScriptの場合、Case Elseでしたね。
ここも異なるところです。

それ以外は、各言語のルールに従って記述するだけです。


簡単ですね。
ぜひ、トライしてみましょう!

ノーツでWeb化するならXPages!」 「ノーツアプリケーションの改修はXPagesで!

では、今日はこの辺で。






【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ