投稿

9月, 2012の投稿を表示しています

コントロールの余白を設定するとスクロールバーが表示されるのが嫌だ!

イメージ
XPages はHowToをまとめるのが難しくて、サンプルDBをばらばらと作っているのです。
なので、思いつくまま作っていると、どんなサンプルかを忘れてしまうんですね。

ということで今回は、ちょっとしたことなんだけど、忘れたら困るというものを備忘録のような形で書きます。
内容は薄いよ。だから期待しないでね。

それでも良いよと言う人は、このボタンを押してから、読んでくださいね。



では、本題。
XPage に、コントロールを配置してブラウザ等でプレビューすると、コントロールは左上に配置されます。
下図は、パネルコントロールとその中にラベルコントロール(サンプルアプリケーションというラベル)を配置して、Firefoxでプレビューしたものです。

パネルに境界線を設定して、再度Webブラウザでプレビューしてみます。

プレビューをよく見ると、境界線がぴったりとくっついています。余白を設定していないので当然と言えば当然です。
でも、これではちょっとみにくいので余白を設定してみましょう。



上、左、右にそれぞれ5.0ピクセルずつ余白を設定します。

この状態で、Webブラウザでプレビューしてみましょう。

なぜか、スクロールバーが表示されています。
どうも、余白(上)を設定すると、その分、下にスクロールされてしまうようです。
せっかく余白を設定して、見栄えが良くなったというのに、これはいただけません。

どうにかして、幅きっちりではなく余白を残した上でスクロールバーを表示させないようにしたいものです。
・・・色々と試行錯誤した結果、次の方法で解決(回避?)できました。

パネルの余白、境界線の設定を全部初期化する。パネルの中に表コントロールを配置する。表コントロールに余白と境界線を設定する。表コントロールのセルの中にラベルを移動する。
では、詳しく見ていきましょう。

1.パネルの余白、境界線の設定を全部初期化する。
これは、もうそのままですね。上記で設定した内容を元に戻します。

次に、2.パネルの中に表コントロールを配置する。
コントロールビューから表コントロールをドラッグ&ドロップします。
表のサイズは、1行1列、100%幅とします。

表コントロールの位置は、アウトラインビューを使うと変更しやすいです。

今度は、3.表コントロールに余白と境界線を設定する。
まず、表全体の余白を設定します。こ…

XPagesでノーツアプリケーションのアクセス権をチェックしてみよう!

イメージ
こんにちは、月火はちょっと違うことをしていたので、ブログを書けませんでした。
え?土日があるだろ?そんな鬼のようなことは言わないでくださいね。

ということで、土日はしっかりと休んだ筆者への応援ボタンをクリックしてから本文を読むようにしてください。



今日もXPagesです。
本当はExtension Library関係の事を書きたかったのですが、ちんぷんかんぷんだったので、またの日にします。

今回は、タイトルにもあるように、ノーツDBのアクセス権について触れてみます。

アクセス権は、「作成者」「編集者」「読者」等の他に「文書の作成」「文書の削除」「個人エージェントの作成」等の特殊権限もあります。

このうち、前者のアクセス権については、以下の方法で取得できます。
ちなみに、計算結果フィールドコントロールを設置して、その値に式を記述します。
requestScope.dbPathName = @Subset(@DbName(), -1); var chkDb:NotesDatabase = session.getDatabase( @Subset(@DbName(), 1), requestScope.dbPathName, false ); switch ( chkDb.getCurrentAccessLevel() ) { case NotesACL.LEVEL_MANAGER : return "管理者"; case NotesACL.LEVEL_DESIGNER : return "設計者"; case NotesACL.LEVEL_EDITOR : return "編集者"; case NotesACL.LEVEL_AUTHOR : return "作成者"; case NotesACL.LEVEL_READER : return "読者"; case NotesACL.LEVEL_DEPOSITOR : return "投稿者"; } 4行目のchkDb.getCurrentAccessLevel()
が、ノーツアプリケーションのアクセス権を取得するところです。
ch…

XPagesで文書のロックをやってみよう!

イメージ
ふと気がついたのですが、もう9月も後半だったんですね。驚きました。
どうりで最近、朝晩が涼しくなったんですね。このような季節の変わり目は体調を崩しやすいので気をつけましょうね(前にもこんなことを書いたような気が・・・)



さて、今日も本文を見る前にこちらのボタンをポチッとクリックしてやってくださいね。

ホントに押してくれないと、そのうち見せなくしますよ!だからお願いしますね。

では、今日の話題です。
またまた、XPages でxxしてみよう!ということで、 今回は文書のロックに挑戦です。

文書のロック自体は、Lotus Domino 6からの新機能です。ですので、当然XPagesでも出来るだろうとの予測で始めています(ブログの記事なんてこんなもんです)。

文書のロックの仕組み自体の説明はここでは割愛します。
詳しく知りたい場合は、日本IBM殿のサイトにあるLotus Notes/Domino 文書ロックの仕組みFAQを参照願います。

ということで、ある程度の準備が出来ているという前提で進めます。
まず、ノーツアプリケーションのプロパティで「文書のロックを許可」にチェックを付けておきます(下図)。

・・・というつもりで進めていくつもりだったのですが、
なんか旨く実装できませんでした(筆者の技術力が低いからなのか、そもそもダメなのかは分かってません)。

なので、 擬似的な形になりますが、「こんな形で実装しました。」という報告にさせてください(嫌だ!と言っても、そうするんですが・・・)。

実装方法としては、次のようにしました。
文書のロック、ロック解除は、ビュー上で行う。文書をロックしているユーザをビュー上に表示する。 文書の編集は、フォームを表示するためのXPage上で行う。別のユーザが文書がロックしている場合、編集モードに移行することが出来ないようにする。文書の保存やキャンセル等、XPage 画面を閉じるのは普通に行う。
では、それぞれについて詳しく見ていきましょう。

まずは、 1.文書のロック、ロック解除~です。
(XPages アプリケーションの)ビュー上で行うので、 ビューで文書が選択できるようにします。
ビューコントロールの一番左の列に、一つ列を挿入します。
プロパティビューの「表示」タブで、「列の値を表示」のチェックを外して、さらに「チェックボックス」にチェ…

XPagesで文書のバージョン管理をやってみよう!

イメージ
この週末は3連休の人が多かったのではないでしょうか。
筆者は、事務所の移転作業があったため、3連休ではなく、2.5連休でした。

しかも、土曜日の夜あたりからちょっとのどの調子がおかしく、連休中はほとんど家でゴロゴロという年寄りか!みたいな生活でした。
風邪には十分気をつけましょう。

ということで、筆者の風邪?が良くなることを祈念しながらボタンをクリックしてやってください。



さて、今日はXPagesのネタです。ちょっと記事を書くのを休んでいたので、約2週間ぶりのXPagesネタということになります。

従来のノーツアプリケーションでは、文書を保存する際に、そのまま保存するか、返答文書として保存するかというバージョン管理の設定がありました。

さらに、@Command([FileSaveNewVersion])コマンドや、NotesUIDocument クラスの SaveNewVersion メソッドを使うことで、保存アクションで自動的にバージョン管理するのかどうかの切り替えも行えました。

では、XPages ではどのようにやれば良いのでしょうか?
・・・どうも、なさげなんですね。つまり、自作してください、と。

では、自作してみましょう。
今回は、「以前の文書を返答文書に」の動きを実現します。

まずは、バージョン管理がどのような動きをしているのかの確認です。
以前の文書を返答文書にするということなので、次のような感じでしょうか?
バックエンドで現在の文書(変更前)を取得する(UI から取得すると、変更後の状態を取得してしまうため)。バックエンドで新規に文書を作成する。新規で作成した文書に1.で取得した文書の全アイテムをコピーする。新規で作成した文書を1.で取得した文書の返答文書にする。新規で作成した文書を保存する。UI の文書を保存する。
せっかく自作するので、通常の保存と、バージョン管理用の保存と分けて作成しましょう。
といっても、通常の保存は今まで散々やってきたのでここでは割愛します。

フォームを表示するための XPage はできあがっているものとします。

最初に、ボタンコントロールを追加します。
ボタンのラベルは「履歴付き保存」としましょう。
可視の設定も行っておきましょう(document1.isEditable()ですね・・・document1はデータソース名)…

文字列の検索(@Begins関数の場合)

イメージ
昨日は、私用でお休みを頂きました。その関係で、ブログもお休みしました。
今日はその分、ちゃんと書きますよ。

では、本文に入る前にこちらのボタンをクリックしましょう。って、ホントに押してますか?押してくださいね。




今日は久しぶりに、@関数の話題です。

文字列の検索をする場合、@Leftや@Contains関数を使うことが多いと思いますが、"***"で始まっているかどうか?ということを調べるのであれば、@Begins関数が便利です。
ただ、この関数のヘルプ、おかしいんですよねぇ。翻訳が・・・

ということで、使ってない人が多いのではないでしょうか。

そこで、サンプルを元に解説して使い方を覚えてもらいましょう。

こんなフォームを用意しました。

「検索したい文字列」(フィールド名:SearchString)には、「検索対象の文字列」が何で始まっているのかどうかを調べたい文字列を入力します。
「検索対象の文字列」(フィールド名:TargetString)には、検索される文字列を入力します。
つまり、
「検索したい文字列」の長さ<= 「検索対象の文字列」の長さ
ということになります。
ちなみに、それぞれ「複数値も可」にチェックが入れてあります。

[Begin関数による検査]というボタンの式は、以下のように記述しています。
ret := @If(@Begins(TargetString;SearchString);"指定した文字列で始まっています。";"指定した文字列では始まっていません。"); @SetField("SearchResult";ret) SearchResultは、「結果」と書かれているところのフィールドです。

下図は、実際の実行結果です。

このように、日本語でも正しく検査されることが分かります。

ここで、ヘルプを読むと、
1つ目のパラメータは「テキストまたはテキスト文字列。任意の文字列を指定します。」となっており、
2つ目のパラメータは「テキストまたはテキスト文字列。string の最初にあるかどうかを検索する文字列を指定します。」となっています。
テキストとかテキスト文字列って・・・おかしいですね。きっと翻訳誤りで、「文字列または、文字列リスト。」と言いたいのではないでしょう…

XPagesで読者名フィールドを使ってみよう!

イメージ
9月になったので、少しは涼しくなったのかな?と思ったのですが、甘かったです・・・
やっぱり昼間は暑い!暑すぎます!


はやく「涼しい」季節になって欲しいと願う筆者です。

さて、そんな残暑が厳しい9月ですが、そこをなんとか乗り切るためにこのボタンをクリックしましょう!




ということで、またまたXPagesのお話しです。
今日は、XPages で読者名フィールドを設定してみましょう。

やり方はいくつかあります。
まず一番簡単な方法は、次の通りです。
1.フォームを作成する。
2.フィールドを「読者」「計算結果」として追加する(仮にフィールド名は、readersとします)。
3.上記のフィールドの計算式は、自分自身のフィールド名を記述する(下図参照)。
4.フォームを保存する。
5.フォームを表示するためのXPageを作成する。
6.readersフィールドにバインドした編集ボックスコントロールを追加する。
7.フォームのデータソースの「フォーム検証の実行」を"文書保存時"もしくは"両方"のいずれかに設定する(下図参照)。
8.XPage を保存する。

これで、文書を保存すると、readersフィールドに入力した内容が、読者名フィールドに設定されます。
下図は、XPages アプリケーション上で、文書を作成した後、ノーツクライアントでその文書のプロパティを確認した様子です。

こちらのやり方は、非常に簡単で良いのですが、フォーム上の計算式がすべて実行されてしまうので、複雑なフォームだと制御が難しくなります。


もう一つの方法は、XPages 上の イベントで読者名フィールドを設定するというものです。
手順は、先ほどの1.~6.までは同じです。
7.が違います。
文書を保存するためのボタン(でも、リンクでも良いのですが・・・)のイベントを少し修正します。

実は、
「作成者/名前/読者」フィールドの実現方法に書いてあるので、二番煎じになってしまうのですが、ここでも書いてしまいます。いいですよねぇ?

保存ボタンを作成したら、イベントビューを開きます。
次に、アクションを追加して、スクリプトの実行を選択します。
スクリプトエディタ内の式には、以下のように記述します。
var doc = document1.getDocument( true ); …

返答文書の作成方法とビューの表示方法

イメージ
9月になりました(え?とっくになってる?)・・・
8月末で、どこぞの掲示板が一旦終了になりました(何度目の終了だろうか・・・復活するたびに、以前のデータがなくなっていくのが切ない。もったいないよなぁ)。
しかし!当ブログは、まだまだ閉鎖しません!


ということで?9月になったので、気持ちも新たに、ボタンをクリックしましょう!



さて、今回もXPagesです。
今回も、やっているようでやっていなかったシリーズです。

それはXPagesで返答文書を作成する方法です。
サンプルを見ていると、URLパラメータに文書UNIDを引き渡して・・・とか面倒くさいことをしていますが、
もっと簡単にできるんです。

知っている人は知っていると思うので、今日のは読まなくても良いですよ。

まず、準備として以下の4つをやっておいてください(もう、これらの説明は省きますので、過去の記事を参照願います)。
「文書」のフォームを作成します。「文書」フォームを表示するためのXPageを作成します。「返答」のフォームを作成します。「返答」フォームを表示するためのXPageを作成します。
返答文書を作成するには、「文書」フォームを表示するためのXPageに仕掛けを施すので、そのXPageを開きます。
ボタンコントロールをドラッグ&ドロップします。
ボタンのラベルは、「返答の作成」とします。
また、可視の式を「!(document1.isEditable())」としておきます。
ここで、document1とは、フォームのデータソース名を表しています。

次に、このボタンのイベントビューを開きます。
[アクションの追加]ボタンをクリックして、アクションを追加します。

アクションは、「返答文書の作成」を選択します。
また、開くページの名前は、あらかじめ準備しておいた「返答」フォームを表示するためのXPageを選択します。
ここでは、「Response」という名前にしてあります。

さらに、親文書IDを引き継ぐために、計算する必要があります。
「親文書ID」の右側にある◇をクリックして、「値の計算...」を選択します。
スクリプトエディタの画面になるので、
document1.getDocument().getUniversalID() と入力します。

これで、XPage を保存すればOK!です。

しかし、これでは…