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

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

2009年2月27日金曜日

ノーツDBを作ってみよう2フォームを作成しよう(4)フォームを完成させる

前回の「Domino Designer 8.5でノーツDBを作ってみよう」からすでに1週間以上が経過していました。最近、忙しくなってきたみたいですね。でも、まだまだ行けますよ!

さて、今回で、フォームを完成させましょう。
フィールドの入力チェックとウィンドウタイトルをつけます。

フィールドの入力チェックも幾つかの方法がありますね。
フィールドに仕掛けられているイベントを利用するか、もしくは文書の保存時にチェックをするかなどですね。

この記事は「Domino Designer 8.5の機能の違い」を紹介することを念頭に置いていますので、フィールドに仕掛けられているイベントを使ってチェックをする方法でやってみます。

入力チェックをするフィールドは2つ。「Subject」と「Categories」です。

それぞれのフィールドには『入力の確認』というイベントがあります(図の赤丸部分)。
そこに、入力チェックの式を入力します。
Subjectの場合、何か入力されていれば良いと言うことで、『@If(@ThisValue="";@Failure(@ThisName+"が入力されていません。");@Success)』という式にしました。
@ThisValueは、自分のフィールドの値を指します。@ThisNameは自分のフィールド名を指します。Categoriesフィールドも同様の式を入力します。@ThisValueや@ThisNameは6.0から追加された関数ですからご存じの方も多いでしょう。


さて、もう1つ。Bodyというリッチテキストフィールドがあります。これに対して入力チェックはかけられないのでしょうか?
左図を見てください。これはBodyフィールドを選択したときのプログラムペインです。この中に『入力の確認』という項目がないのが分かるでしょうか?
このため、リッチテキストフィールドは、入力チェックが行えないのです。






さて、最後にウィンドウタイトルです。左図を見てください。何も設定していない状態で、文書を作成したときの画面です。ウィンドウタイトル(赤丸部分)が『(無題)』となっています。これでは格好悪いので、次の様に変更します。『@If(@IsNewDoc;"メイントピック - 新規";"メイントピック - "+Subject)』
これは、新規文書の時と既存文書を開いたときとでウィンドウタイトルを変更する様にしてあります。




これでフォームを保存すれば、メイントピックフォームの完成です。
以外と、長かったですね。でも、以前のバージョンを使っている方は同じように作れることが分かったのではないでしょうか?
よくここまで忠実に移植できたなぁというのが筆者の感想です。

さて、次回からは返答文書フォームの作成です。メイントピックフォームでは触れなかった、フォームのプロパティについても確認していきます。
お楽しみに?

2009年2月25日水曜日

Lotus Domino Serverのショートカットによる起動ダイアログ制御について

あまり使うことがないとは思うが、テスト環境では必要で、なおかつ忘れない様に記録しておきます。

さて、いったい何のことかというと・・・
Lotus Domino Serverの起動ショートカットアイコンの話です。
通常、Lotus Dominoはサービスとして起動するでしょうからあまり触ることはないと思います。
ですが、テスト環境なんかだと、普段は起動しておかないで、必要なときに起動するという使い方をする人もいるのではないでしょうか?

Lotus Domino Serverのショートカットをクリックすると、下図の様なダイアログが表示されます。









図中に書いた様に、「Don't ask me again」にチェックをつけて起動する([OK]をクリックする)と、ショートカットはその上で選択した起動方式になってしまう。
ちょっと嫌なのが、ショートカットに関連しているのではなく、Lotus Dominoのプログラム(nserver.exe)に関連づけられるのです。
なので、別のショートカットを作成しても、このダイアログが表示されることはなくなってしまうのです。

たまたま、筆者は「Start Domino as a regular application」を選択したまま、このチェックボックスをONにしてしまったのです。
そのため、ショートカットから起動する場合、どうしてもサービスとして起動してくれなくなってしまったのです。

そのうち、サービスで起動した状態のテストをしなければならなくなったので、困っていました。
その時は、「管理ツール」の「サービス」から起動していたのですが、やはり面倒です。
そこで、どうにかして、このダイアログを表示させることは出来ないか?と探してみたのです。
notes.iniを見ても変わらないし、ショートカットの内容も変わっていない。

実はレジストリに書かれていました。下図を見てください。
HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\Domino\1にDontAskAgainという項目があります。

これを削除すればいいのかな?と思い、削除してみました。

その後、Lotus Domino Serverのショートカットをクリックすると・・・見事に起動ダイアログが表示されました。
めでたしめでたし。




※この内容は、IBMに確認したわけでも、ヘルプに記載されているわけでもありません。また、レジストリを操作するものであるため、作業は自己責任で行っていただく様、お願いします。
本件でトラブルが発生しても、当方は関与いたしませんので、悪しからず。

2009年2月24日火曜日

8.5のデザイナって動きが遅くない?

Domino Designer 8.5を使って、DBのテストやら開発やらを行っているのだが・・・
どうも、動きが遅くてかなわない。

例えば、ノーツDBをデザイナで開くのという動作をするだけでも十数秒~数十秒待たされる。
その間、何も出来ないわけではない(バックグラウンドでの動作になっている)のでまだ良いのだが、デザイナでの他の動作も待たされるので、やっぱり嬉しくない(下図参照)。


全部が全部Eclipseベースにしたからだ!とは思いたくないが、以前のバージョンでの動きを考えると、もっと改善して欲しい。








そういえば、デザイナってバージョンがあがる度に使いづらくなっているよなぁ。
4.xが懐かしい・・・

2009年2月20日金曜日

メールの次の未読文書へ移動するショートカット

聞いたのに忘れていたので、ここに記録しておきます。

メールで未読文書を探すとき、[Tab]キーを使うと思います。
ところが、プリファレンスで「読み込み専用の文書でタブを移動に使用する」にチェックをつけていると、[Tab]キーが効かなくなります。この場合、[F4]キーで移動することになります。


この機能は8.0.x以上(8.5も含みます)でも有効なのですが、一つ困ったことがあります。
クライアントがStandard版の場合、上記のチェックが入ってなくても、[Tab]キーは効かないのです。
ただし、[F4]キーは有効なので、8.0.x以上では未読文書の検索は[F4]キーを押す様にしましょう。
ちなみに、前の未読文書に戻るには、Shift+[F4]キーです。

2009年2月19日木曜日

そういえば、「Domino Objects for LotusScript and OLE」の図がなくなった

LotusScriptのクラスモデルの図って分かりやすいので、よく使っていた。

ちょっとその図を使う用事があったので、8.5のデザイナを開いてみたら・・・
あれ?図がない。っていうか表示させられる様なショートカットもない。

どこ行った?EclipseIDEの説明なんかどうでも良いよ!(良くはないか・・・)
あれがないと、なにげに困るのに・・・
JAVAやC技術者にノーツのクラスを説明するのが大変になるじゃないか!

どなたか8.5で、この図を表示する方法知らないですかね?

ノーツDBを作ってみよう2フォームを作成しよう(3)フォームアクションを追加する

前回は、フォームにフィールドを配置しただけで終わってしまいました。フォームの保存すらしていません。しかし、8.5のデザイナではフォームを作成した時点で保存されているのです。もちろん、フィールドなどは配置した後に保存をしないと行けませんが。
とにかく、フォームを『作成』した時点で、保存されるというのは、従来のデザイナと違う点です。気をつけましょう。

さて、今回はフォームにアクションを追加します。
筆者はよく、「保存して閉じる」「閉じる」「キャンセル」「編集する」というアクションを作成します。
ワークフローのように特別なアクションが必要なもの以外であれば、ほとんどこのアクションを作っています。

アクションの作成方法は従来と変わりません。[作成][アクション][アクション]メニューを実行します(下図参照)。





















いつものようにプロパティ画面が表示されます。これEclipseベースには見えないですね。
さて、入力しましょう。
「名前」と「ラベル」の違いですが、「名前」は任意のものです。このアクションが何をしているのかをわかりやすく覚えておくためのものなので好きに書いてください。







ここでは、「文書を保存できたら閉じる」としましょう。
「ラベル」は、実際にフォームのアクションにどのように表示するかを設定するものです。
ここを省略すると、「名前」でつけたものがそのまま表示されます。下位バージョンとの互換性を保つためでしょう。
ここでは、「"保存して閉じる"」としましょう。""は文字列ということを表しますので、必要です。これがないと「保存して閉じる」という変数と認識されますので注意してください。

その他、筆者の場合は、「アクションメニューにアクションを含む」のチェックを外します。また、適当なアイコンを選択してください(アイコンを作るのが好きな人は自作して登録も出来ます。)









次に、非表示式の設定を行います。真ん中のタブを開いて、「プリビュー(読み込み)」と「読み込みモード」にチェックをつけます。文書を保存するという行為をするアクションなので、読み込みモード時にクリックされても困るので、このようにします。
最後にこのアクションの式を記述します。これも従来の様に、「プログラムペイン」に記述できます。
筆者はこのアクションは、「@If(@Command([FileSave]);@Command([FileCloseWindow]);"")」と記述しています。保存が成功したら文書を閉じますということですね。

残るアクションも同様に作成します。
1.名前は「文書を閉じる」、ラベルは「"閉じる"」で、「@Command([FileCloseWindow])」、非表示式は「プリビュー(編集モード)」と「編集モード」にチェックをつけます。

2.名前は「文書を保存しないで閉じる」、ラベル「"キャンセル"」で、「FIELD SaveOptions:="0";@Command([FileCloseWindow])」、非表示式は「プリビュー(読み込みモード)」と「読み込みモード」にチェックをつけます。

3.名前は「文書を編集モードにする」、「"編集する"」で、「@Command([EdituDocument])」、非表示式は「プリビュー(読み込みモード)」と「読み込みモード」にチェックをつけます。

左図はフォームアクションを追加した状態のフォームです。









と言うことで次回に続きます。次回はフォームを完成させます。

2009年2月18日水曜日

DBのパスのみ抽出

ちょっと忙しくて、8.5の検証をやっている時間がなくなってきたので、今日は@関数のネタです。

ノーツDBのパスだけ(ファイル名は除く)を取得する方法です。
@DBNameと@LeftBack関数を使用するだけで出来るので割と簡単ですね。

サンプルは自DBのパスだけを抽出してプロンプト表示するものです。

----------------------------------------------------
tmp1 := @Implode(@DbName);
@Prompt([Ok];"DBのサーバ名&ファイルパス名";tmp1);

tmp2 := @Subset(@DbName;-1);
@Prompt([Ok];"DBのファイルパス名";tmp2);

tmp3 := @LeftBack(tmp2;"\\");
@Prompt([Ok];"DBのパス名";tmp3)


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

2009年2月16日月曜日

メールDBのフィールドにデフォルト値をセットする

ドミノ懇談室で回答した
Re: リンクメッセージで開いた時、あて先にデフォルトのあて先を入れる方法のをネタにしましょう。

実は以前に書いたブログ記事の応用なんですね。
ユーザ情報の取得
文書の作成
という2つの記事の合体です。

@MailDBのLotusScript版ってないんですね。いちいち、ユーザ情報を取得しないといけない。
ということで、NotesRegistrationクラスで取得します。
後は、取得した情報を使って、文書を作成するだけ。
覚えてしまえば簡単ですが、なかなか気がつかないところですね。

-------------------------------------------------------
Sub Click(Source As Button)
Dim session As New NotesSession 'カレントセッション
Dim regist As New NotesRegistration 'ユーザ登録情報
Dim mserver As String 'メールサーバ
Dim mfile As String 'メールファイル
Dim mdomain As String 'メールドメイン(ダミー)
Dim msystem As Integer 'メールシステム(ダミー)
Dim mprofile As String 'ユーザプロファイル(ダミー)
Dim uiws As New NotesUIWorkspace 'カレントワークスペース
Dim maildoc As NotesuiDocument 'Bookmarkフォームの文書

'ユーザ情報を取得する元となるサーバ名をセット
regist.RegistrationServer = session.CurrentDatabase.Server

'ボタンをクリックしたユーザの情報をドミノディレクトリから取得する
Call regist.GetUserInfo( session.CommonUserName, mserver, mfile, mdomain, msystem, mprofile )

'Bookmarkフォームで文書を作成する
Set maildoc = uiws.ComposeDocument( mserver, mfile, "Bookmark" )

'各フィールドにデフォルト値をセットする
Call maildoc.FieldSetText( "EnterSendTo", "CN=xxxx xxxx/O=zzzz" )
End Sub

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

2009年2月13日金曜日

ノーツDBをつくってみよう2 フォームを作成しよう(2)フィールドの作成

さて、前回フォームを作成しましたが、このままでは何もない真っ白なままですね。
次はフィールドを作成してみましょう。


作成方法は2つ。メニューから[作成][フィールド]を実行するか、ツールバーの[フィールドの作成]アイコンをクリックするかです(左図参照)。


すると、見慣れたインフォボックスが表示されますね。
何はともあれ、フィールド名には『Subject』と書きましょう。
フィールドの種類は『テキスト』『編集可能』ですね。
ここで、Notes/Domino8.5で利用できるフィールドの種類に変更がないか見てみましょう。
・・・どうやら増えたものはなさそうですね。



ついでに、フィールドのイベントを確認してみましょう。
左図の赤枠部分がSubjectフィールドのイベントです。入力チェックに関するイベントや、LotusScriptに関するイベント、さらにはJavaScriptのイベントがありますね。ここにも8.0との差異はなさそうですね。

さて、もっとフィールドを追加しましょう。
『Categories』と『Body』というフィールドを追加します。
『Categories』は、『ダイアログリスト』で『編集可能』、『複数値も可』にチェックをつけましょう。
『Body』は、『リッチテキスト』で『編集可能』にします。

また、フィールドだけ作成しても味気ないので、各フィールドの前にそのフィールドの意味を記述してみましょう。
Subjectの前に『件名:』、Categoriesの前に『分類:』、Bodyの前に『本文:』とします。

できあがりが、左図になります。

というところで次回に続きます(いつまでかかるんだろ・・・)。

2009年2月10日火曜日

ノーツDBをつくってみよう2 フォームを作成しよう(1)

いきなり頓挫しかけたノーツDBの作成ですが、頑張って進んでいきます。

今回はフォームの作成です。

1.デザイナでフォームを選択します。
 そこで、[新規フォーム]アクションをクリックします。











ここでいきなり画面が今までと変わりました。
フォームの設計画面になる前に名前を決める必要があります。
ただし、別名を含めた書き方は有効のようです。

2.名前の欄に「メイントピック|MainTopic」と入力して[OK]をクリックします。







3.フォームの設計画面が表示されました。とてもEclipseベースには見えないですね。
ここで、画面の最下部を見てください。「プロパティ」「イベント」「問題」というタブがあります。この部分の一番右にウィンドウを復元するというボタンがあるので、クリックします。






4.画面の赤枠部分が復元された箇所です。
ですが、何も表示されていません。どうも現時点では使わなそうですね。











というところで、次回に続きます。

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

2009年2月9日月曜日

8.5の新機能について2

8.5の新機能2つめです。
改めて8.5の環境を調べてみたところ、メールに微妙な改造が加えられているのが分かりました。

画像を見てください。メールのプリファレンス画面です。

[メール][署名]タブです。ここが「リッチテキストライトフィールド」に変わっています。
ちなみに、8.0.xまでは、『テキスト』『HTML/イメージ』でした。
リッチテキストライトフィールドにすることにより、HTMLを書けない人でも、署名のフォントスタイルを変更できる様になったのです。
おまけにファイルも添付できたり、画像も貼り付けられたりします。




e-mailの場合は、あまり意味をなさないかもしれませんが、社内での利用なら面白く使えるのではないでしょうか?
8.5を利用する方は、是非使ってみてください。

2009年2月6日金曜日

8.5の新機能について1

ロータスビジネスパートナー勉強会に出席してきました。
クライアントにも少しですが新機能があることがわかったので紹介します。

今日は画像データを圧縮するというものです。
クライアントのプリファレンス画面で設定するのですが、
「文書内に貼り付けた画像データを圧縮する」
というオプションです。






8.0から、画像データは圧縮して貼り付けられるようになっていたそうなのですが、
8.5ではさらに圧縮効率を良くしたそうです。


ということで、画像データの貼り比べをしてみました。
24bit(1,600万色)の場合、1.3MBという画像データをメールの本文に貼り付けてみました。


結果、「圧縮する」オプションをつけた場合、74KBまで減りました。
この74KBというのは、ノーツの文書データとしてのサイズなので、もっと小さくなっているはずです。
ちなみに、この画像ファイルをGIFにした場合71KBなので、これに近いイメージで貼り付けてくれると
考えるとわかりやすいでしょうか?





筆者は今まで画像データを貼り付ける際、jpegに変換してから、そのファイルを
[作成]-[画像]メニューで呼び出すという手間のかかる事をしていたのだが、
この機能を使えば、そんな事もしなくて済む。

ちょっと嬉しい機能でした。

2009年2月5日木曜日

8.5デザイナを使って、ノーツDBを作ってみよう

ネタが切れてきたのと(しつこい!?)、新技術の勉強をしている時間がとれないのを理由に今回から、8.5デザイナを使って、ノーツDBを作ってみるという記事を書いていきます。
8.5デザイナなので、8.0以降の新機能を使ったDBをなぁんて事は考えていません。
皆様になじみのある?ディスカッションDBを作ってみましょう。
8.5デザイナの画面イメージを載せていきますので、イメージが掴んでいただけたら良いと思います。

まずは、NotesDBの作成から。

1.何はともあれ、Domino Designerを起動します。

2.「新規アプリケーションを作成する」の左にあるディスクアイコンをクリックします。
 ※一見、文字の部分もクリックできそうな雰囲気ですが、そこをクリックしても何も起きません。







3.新規アプリケーションの名前を入力するいつもの画面になるので、適当に名前を入力して、[OK]をクリックします。
 今回の記事では、サーバに「ディスカッション」として、「mydiscus.nsf」というファイル名で作成します。テンプレートは「-未入力-」を選択しています。







4.DBが作成されると、設計要素が表示されます。

画面の左側に注目すると、色々な設計要素が見えます。
中には8.5で追加された要素もあります。
また、設計要素のカテゴリが従来のバージョンと違うところもあります。
気をつけましょう。

ということで、次回はフォームの作成を行います。

2009年2月3日火曜日

またもや増えたビューアイコン

増えたビューアイコンでは、8.0で追加されたビューアイコンを紹介した。

皆様ご承知のとおり、筆者の環境は8.5になった。
まさかとは思うが、念のためにビューアイコンが増えていないかどうかをチェックしてみた。
すると・・・

ごらんの通り、増えているではないか!!!それも1つ!

1つって何よ!どうせならもっと増やせよ!
ちなみに、このアイコンの名称は「修正されたカレンダーエントリ」だそうです。
どこで使われているのかは、まだ分かってません。ごめんなさい。

2009年2月2日月曜日

Excelオブジェクトが動作しない!?

筆者のNotes/Domino環境を8.5にアップした影響なのだろうか?
ちょっとした不具合が発生している。

リッチテキストにExcelオブジェクトを貼り付けて、それをダブルクリックするとエラーになるのだ。
それも1回目と2回目以降のエラーメッセージが違うので、不思議だ。

再現手順は次のとおり。
1.リッチテキストにカーソルを合わせて、[作成]-[オブジェクト]メニューを実行
2.『オブジェクトの作成』画面で、「オブジェクト」「Microsoft Excelワークシート」を選択して、[OK]をクリック
3.リッチテキストにExcelオブジェクトが作成されて、別ウィンドウにExcelが起動する
4.Excelメニューの[閉じて新規トピックに戻る]をクリックしてExcelを終了する
5.ここで、Excelオブジェクトをダブルクリックする
 ※下図のエラーが表示される

図1 オブジェクトの要求を処理しているときにエラーが発生しました。

6.[OK]をクリックした後、再度Excelオブジェクトをダブルクリックする
 ※下図のエラーが表示される

図2 必要なアクセスが拒否されたためオブジェクトの要求を完了することができません。

というものだ。
WordやPowerPointでは発生しない。
ちなみに、筆者の環境は
Windows XP Professional、Lotus Domino8.5、Lotus Notes8.5、Microsoft Office2007である。

不具合なのか、筆者の環境設定ミスによるものなのかはまだ分からないが、気をつけてほしい。


※2010年3月25日追記
 ノーツクライアントを8.5.1にバージョンアップすることで、Excelオブジェクトが正しく動作します。