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

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

2009年4月28日火曜日

Like演算子使用時の注意

今回は備忘録です。

どのような文字が入力されたのかをチェックするのには色々な方法があるかと思います。
その中の一つ、Like演算子に関してです。

こんなサンプルを作ってみました。
%include "lsconst.lss"
Sub Click(Source As Button)
    Dim idata As String
    
    idata = Inputbox( "何か文字列を「1文字」だけ入力してください。", "Like関数のテスト" )
    If idata Like "[A-Z]" Then
        Msgbox "貴方が入力した文字:" & idata, MB_OK + MB_ICONINFORMATION, "A~Zを入力しましたね"
    End If
End Sub

これを実行してみます。

すると、どうでしょう。
なぜか、aやbでもメッセージが表示されます。
しかし、zではメッセージが表示されません。
どうも、A、B、C・・・Z、a、b、c・・・yまでが、Like演算子の[A-Z]という範囲のようです。

おかしいですね。
さらに、If idata Like "[A-B]" Then
とすると、A、B、aの3文字だけが反応します。

ここで、デザイナーヘルプを良く読んでみると、「リストのソート順はOption Compareの設定によって決まります」とあります。
そこで、Option Compareのヘルプを読んでみて、Option Compare Binaryという一文を追加しました。

そうしたところ、上記のサンプルは思惑通り、A、B、C・・・Zの文字だけが反応するようになりました。


Like演算子を利用する場合は注意しましょう。


*1 ちなみに、Option Compare Binaryでも、Option Compare Caseでも、英数字のソート順は国際ANSIと同じになります。と書いてありますが、そうはならないようです。なんでだろ?

*2 今回のサンプルは、R4.6.6、R5.0.8、7.0.3、8.5で試しましたが、結果は一緒でした。

2009年4月24日金曜日

ビューのフォルダ列をメール以外に転用させてみよう!

今回は8.5の新機能の一つである【メールの [すべての文書] ビューのフォルダ列】について調査してみた。

これは、文書がノーツDB内のどのフォルダに存在しているのかを表示してくれるというものである。
そして、それ以上の説明がないのも特徴である。
これって、他のノーツDBに転用できないのかな?と思った人は少なからずいると思う。
では、皆さん、転用できたのであろうか?できた!という方はつまらないので、ここでお帰りいただいて結構です。


さて・・・
まずは、どのようにして実現しているのかを調査してみた。
ビューの列に表示しているので、素直にビューの列情報をみてみよう。
ふむふむ。@関数で実現しているんだ・・・
えーっ!@関数!?@WhichFoldersって・・・(下図参照)


あれ?デザイナヘルプの新機能には、こんな関数の紹介なかったよなぁ・・・
念のため、確認してみるが・・・
ありません!隠し関数かよっ!
だから、説明も何もね-のか。

これじゃぁ、どうやって使うのか分からないじゃないか!


まぁいいや。とりあえず、どこで動作するのか確認してみよう。
ということで、ビューアクションに
@Prompt([OK];"@WhichFoldersの結果";@WhichFolders)
と追加して、実行してみた。

結果は見ての通り。どんな文書を選択しても同じ結果だった。

うーん・・・どうやら列式でしか反応しなさそうだな。

では、実際に他のノーツDBに転用してみよう。
ということで、やってみました。

一からノーツDBを作るのは面倒くさいので、文書ライブラリDBをカスタマイズしてみました。
・「すべての文書」ビューの一番右の列に「@WhichFolders」の式を書いた列を追加する。
・適当なフォルダを作成する。
・幾つかの文書を選択して、作成したフォルダに移動する。

あれ???何の変化もない。なんで?


と、ここで躓きました。
この後、かなり色んな事をしました(メールにしかないビューを追加したり、フレームセットを追加したり、アウトラインを作成し直したり・・・)。

数時間後・・・

ようやく分かりました。
ポイントは、埋め込みアウトラインのプロパティです。
というのも、この機能、動作するのに条件があるのです。
埋め込みアウトラインがあるページと@WhichFoldersを記述したビューがフレームセットに表示されていることというのがその条件です。
さらに、埋め込みアウトラインのプロパティの一カ所にチェックをつける必要があります。
それが下図にある箇所「フォルダの未読情報を保存」です。


こんなもの、気がつくかぁっ!

怒りはともかく、カスタマイズした結果がこれ(下図参照)。

確かに、文書を保存した先のフォルダ名が表示されています。


それでは、今回のまとめです。
・@WhichFoldersは、メール以外のノーツDBでも利用可能
・ODSは51である必要はない(43、48で動作確認済み)
・フレームセットでノーツDBが開いていること
・フレームセットにはアウトラインページとビューページが表示されていること
・埋め込みアウトラインの「フォルダの未読情報を保存」にチェックが入っていること
・ビューの列の式に「@WhichFolders」を記述すること


ちなみに、上記のままだと、フォルダにコピーしても、ビューの表示は切り替わりません。更新するか、ノーツDBを開き直しする必要があります。
リアルタイムに反映させたい場合、
ビューのQueryaddtofolderイベントにビューをリフレッシュするコードを追記する必要があります。
Dim uiws As New NotesUIWorkspace
Call uiws.ViewRefresh
で良いでしょう。


分かっていただけたでしょうか。
これで、8.5の新機能を通常のノーツDBにも反映させられますので、是非お試しあれ。



っていうか、この機能について情報がなさ過ぎだよ!
それとも、筆者が見過ごしているだけなのだろうか?


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

2009年4月23日木曜日

DAOSを使ってみた

8.5の新機能の一つである「DAOS」。最初に聞いたときは、「なんだよ、共有メールの延長じゃないか」と思った人は多いのではないだろうか?
筆者はもちろん、思った!その証拠?に、8.5では共有メールは使えなくなっている。

はい。共有メールをお使いのユーザ様は、8.5以降にバージョンアップする際は、DAOSにする事を検討しましょう!


DAOSについては、グリーン対応が進むIBM Lotus Domino: 新しいLotus Domino Attachment and Object Service に設定方法が出ています。
また、DAOS よくあるご質問 (FAQ)にDAOSについてのFAQ一覧がPDFとして公開されています。
まずは、これらを読んで情報収集をしましょう。


さて、それでは実際に設定してみましょう。
と言いたいのですが、以下の事前準備が必要です。
 ・トランザクションログを有効にすること
 ・共有メールを解除すること(使用している場合)
 ・notes.iniにCREATE_R85_DATABASES=1を追加すること
 ※それぞれの方法については割愛します。

ここからが本題。
1.ドミノディレクトリの設定変更
 ・ドミノディレクトリのサーバ文書を編集する
 ・「DAOS」のタブを選択する
 ・「添付ファイルを DAOS に保存する」を『有効』にする
  この時、トランザクションログが未設定だったり、共有メールが利用で設定されていたりすると、下図の警告ダイアログが表示されます。この場合、それらの設定を正しいものにしましょう。
  
 ・他の項目を設定する。下図はDAOSの設定をした画面です。先に記述したIBMのリンクの説明にある項目名と変わっているので注意してください(和訳するときに、整合性を取りましょうね。IBMさん)
  
 ・サーバ文書を保存します。
 ・DAOSの設定を有効にするために、Lotus Dominoを再起動してください。

2.ノーツDBをDAOSの対象にする
 ・DAOSの対象にしたいノーツDBを決めて、ODSを51にする
  サーバコンソールで以下のように入力すると、ノーツDBのODSが51に変わります。
  load compact xxxx.nsf -c
  ※オプションの「-c」が重要です。これをつけないとODSは51になりません!
 ・ODSを51にしたノーツDBのプロパティを開く
  詳細タブ(一番右のタブ)を開いて、「Lotus Domino Attachment and Object Service を使用」にチェックを入れます。

これで、準備万端です。

後は普通に使っていれば、添付ファイルはノーツDBではなく、DAOSのパスに保存されています。
下図は実際のDAOSのパスにあるファイルの一覧です。



実際に文書を作成してみたところ、
 ・同じファイルを別々の文書に添付したら・・・
  →最初に添付したときにファイルが作成され、2番目のときは作成されない。
 ・複数のDBをDAOSの対象にして、それぞれのDBに同じファイルを添付したら・・・
  →1つめのDBに添付したときは作成されたが、2番目のDBのときは作成されない。
 ・すでに添付してあるファイルを[編集]で開いて、そのまま上書き保存したら・・・
  →別のファイルと認定されるらしく、DAOSのパスにファイルが1つ追加された。
という動作をしました。

また、元々のノーツDBのサイズはどうかというと・・・添付ファイルがないようなサイズになっていました。


とりあえず設定してみるだけなら、このように簡単にできますので、チャレンジしてみてはいかが?

2009年4月22日水曜日

保有しているロールのチェック

今回は、保有しているロールのチェックをLotusScriptで記述してみるというものです。

DBの保有ロールを取得する配列の内容を検査するを組み合わせます。

LotusScriptで、ユーザが[Admin]というロールを保有している場合、
ret = Evaluate( {@IsMember("[Admin]";@UserRoles)} )
と、このような書き方をしていたのではないでしょうか?

サンプルは、これを使わずに記述したものです。
どうでしょうか?覚えておくと便利ですよ。

%include "lsconst.lss"
Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim uiws As New NotesUIWorkspace
    Dim entryname As Variant
    Dim retroles As Variant
    
    'カレントDBの取得
    Set db = session.CurrentDatabase
    
    'ユーザの選択
    entryname = uiws.PickListStrings( PICKLIST_NAMES, False )
    
    '選択したユーザのロールを取得する
    retroles = db.QueryAccessRoles( entryname(0) )
    
    '[Admin]が含まれているか?
    If Arraygetindex( retroles, "[Admin]", 0 ) <> 0 Then
        Msgbox "ユーザは[Admin]ロールを保有しています。", MB_OK + MB_ICONINFORMATION, "保有ロールのチェック"
    Else
        Msgbox "ユーザは[Admin]ロールを保有していません。", MB_OK + MB_ICONINFORMATION, "保有ロールのチェック"
    End If
End Sub





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

2009年4月21日火曜日

選択したユーザのACL

書いていたようで書いていなかったメソッドの紹介です。

NotesDatabaseクラスのQueryAccessメソッドです。
これは、そのDBにおけるユーザのACLレベルを調査するものです。
ACLにグループが登録されている場合、そのグループに所属しているユーザのレベルも調査できるのが良いところです。
但し、漢字名は認識してくれないようです。なので、別名でなく、本当のユーザ名で使うようにしてください。

サンプルは、ドミノディレクトリからユーザ名を選択して、そのユーザが自分のDBに対して、どのアクセスレベルなのかを返すというものです。

Sub Click(Source As Button)
 Dim uiws As New NotesUIWorkspace
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Dim entryname As Variant
 Dim acllevel As String
 
 Set db = session.CurrentDatabase
 
 entryname = uiws.PickListStrings( PICKLIST_NAMES, False )
 
 Select Case db.QueryAccess( entryname(0) )
 Case ACLLEVEL_NOACCESS:
  acllevel = "アクセス権なし"
 Case ACLLEVEL_DEPOSITOR:
  acllevel = "投稿者"
 Case ACLLEVEL_READER:
  acllevel = "読者"
 Case ACLLEVEL_AUTHOR:
  acllevel = "作成者"
 Case ACLLEVEL_EDITOR:
  acllevel = "編集者"
 Case ACLLEVEL_DESIGNER:
  acllevel = "設計者"
 Case ACLLEVEL_MANAGER:
  acllevel = "管理者"
 Case Else:
  acllevel = "ACLにありません"
 End Select
 
 Msgbox entryname(0) & "のアクセス権:" & Chr$(9) & acllevel, MB_OK + MB_ICONINFORMATION, "ユーザのACL"
End Sub

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

2009年4月20日月曜日

ローカルDBを暗号化しないようにするには・・・

備忘録です。

テスト環境で作成したDBを本番環境に持って行く、自分が作成したDBを他人に渡すなどと言うときに、大抵、ノーツDBを「コピー」しますね。

この時、「データベースのコピー」ダイアログにある[暗号化]のボタンをクリックすると、コピー先で、ノーツDBを暗号化するかしないかを選択できます(下図参照)。


ノーツ7.0.xまでは、ここのデフォルトは『ローカルのデータベースを暗号化しない』だったんですよね。
それが、8.0.xになったら、『ローカルのデータベースを暗号化する』がデフォルトに変わってしまったんです。


そのおかげで、コピーしたノーツDBが持って行った先で「あれ?開けない」ということはないでしょうか?具体的には下図のようなメッセージが表示されないでしょうか?



上のメッセージはともかく、下のメッセージが表示されたら、「???え?何?」と慌ててしまうことでしょう。
筆者は実際、焦りました・・・


こういったことがないようにするために、「データベースコピー」の暗号化のデフォルトを変更することができます。
ノーツクライアントの「ファイル」「セキュリティ」「ユーザーセキュリティ」メニューを実行します。
「ユーザーセキュリティ」のダイアログが表示されるので、[Lotus Notes データ]タブをクリックします。
この中で「ローカルで暗号化しない」をONにします(下図参照)。



これで、データベースをコピーするときに、デフォルトでは暗号化しないとなります。
なお、この設定は、『ローカルレプリカ』と『ローカルコピー』に対しての設定になるので、気をつけましょう。

NotesUIDocumentクラスのRefreshメソッドの仕様って?

今日、こちらのサイト[Notes/Domino] 表示用の計算結果フィールドの値が Lotus Script から取得できないケースについてを見ていて気になったので、実際に試してみた。
なるほど、確かに再現する。
しかし、回避策も示されていたので、大丈夫だろうと思っていた。

が・・・その検証をする中で、1つ不思議なものを発見した。
下図を見て欲しい。これは、今回のネタの元となったNotesUIDocumentクラスのRefresh()メソッドの構文図である。


この構文はプログラムペインのプロパティにある「自動的にパラメタをポップアップ」というオプション(下図参照)をオンにすると表示されるのだが・・・


構文をよく見て欲しい。
Refreshメソッドには、3つのパラメータが設定されているのである(画面は8.5のもの)。
ここで、8.5のデザイナーヘルプを見てみると・・・

そう!パラメタは1つしかないことになっているのである!!


これってオンラインヘルプの不具合だよねぇ。
直して欲しいですね。っていうか説明を追記してくれないと使えないですよぉ。

ただし、2番目と3番目のパラメタには何を設定しても良さそう(テキスト、数値、日付を設定してみたが、エラーにならない)なので、
もしかしたら、『そもそも意味がない、予約用のパラメタ』なのかもしれない。

ちなみに、7.0.x、8.0.xでは、パラメタは2つまで設定可能だった。



気になって仕方がありません。誰か教えて。

2009年4月17日金曜日

ESCで文書をクローズさせない

SaveOptions というフィールドに"0"を代入しておいて、文書を閉じると、確認のダイアログが出ることなく、文書を保存せずに閉じられる。
というのは多くの方がご存じだと思う。

今回は、この機能?を利用した手法を紹介する。

フォームのフィールドチェックなどで、ESCで文書をクローズしたり、メニューから保存されては困るという場合に使うものだ。
なお、この方法は、ノーツクライアントでのみ有効である。

------------------------------------------------------------------
1.フォームに[保存]と[キャンセル]のアクションを作成する。
  式はそれぞれ次のようにする。
  [保存]
  FIELD FldChk := "OK";
  @Command([FileSave]);
  @Command([FileCloseWindow]);

  [キャンセル](保存しないで閉じる)
  FIELD FldChk := "OK";
  FIELD SaveOptions := "0";
  @Command([FileCloseWindow]);

2.フォームのQuerySaveイベントとQueryCloseイベントに次のように記述する。
  %include "lsconst.lss"
  Sub Querysave(Source As Notesuidocument, Continue As Variant)
   Dim doc As NotesDocument
   Set doc = Source.Document
   If doc.FldChk( 0 ) <> "1OK" Then
   Msgbox "文書を閉じるには、アクションボタンで実行してください。", MB_OK + MB_ICONINFORMATION, "文書の保存"
   Continue = False
   End If
  End Sub

------------------------------------------------------------------

キーボード操作でノーツクライアントを利用している場合には、ちょっと使いづらくなるが、面白いと思うので、試してみて欲しい。



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

2009年4月16日木曜日

現在のフィールド位置を知る

今日は、フィールド情報を知るというサンプルです。
と言っても、たいしたことはありません。
文書を編集中に、カーソルが置いてあるフィールドの名前をお知らせするというものです。

サンプルはフォーム中に配置してはいけません(ホットスポットボタンはダメよ!)。
ボタンを押すときに、フォーカス位置がそこに移動してしまうからです。
エージェントとして作成するか、フォームアクションとして作成するかのどちらかが良いでしょう。
※エージェントにしておけば、どのフォームでも実行出来るので、サンプルはエージェントに記述しているものとしてあります。


下図はサンプルを実行したものです。
実際のフィールド名が表示されています。
ちょっと考えると、便利な使い方が思いつきます。
「Lotus Domino Designer」を使わなくても、フィールドの名前を知ることができるのです。
編集可能フィールドに限られますが、「あれ?このフィールド名何だったっけな?」とか、全文検索をする際、フィールド名で絞り込みをしたいときに使えるのではないかと思います。


------------------------------------------------------
Sub Initialize
  Dim uiws As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Dim fld As String
 
  Set uidoc = uiws.CurrentDocument
  If uidoc.EditMode = True Then
    fld = uidoc.CurrentField
    Messagebox "現在のカーソル位置は、「" & fld & "」です。", 0, "現在のカーソル位置"
  Else
    Messagebox "読み込みモードでは、カーソル位置は取得できません。", 48, "現在のカーソル位置"
  End If
End Sub

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

2009年4月15日水曜日

日付を数値で表す

なぜか、このブログには日付に関する話題が多い。って自分で書いていて何を言っているのか?時間に追われるような仕事の仕方はしていないはずなのだが・・・

さて、ということで今日も日付に関するサンプルです。
日付を数値で表すとどうなるのか?
表計算ソフトでセルの書式を数値にしておいて、そこに日付を入力すると、日付が数値となって表される。
これと同じ事をLotusScriptでもやってみよう。ということだ。

といっても、とても簡単。
型変換をするだけだ。
日付から数値の場合CDbl、数値から日付の場合CDatを使う。
ここで、気をつけて欲しいのは、「日付から数値の場合」。
Double型に変換する必要があるのだ。
IntegerやLongは整数値なので、時間を表せない。
Singleでは、大きさが足りないからである。


下図はサンプルを実行した結果である。
今日(2009/04/15)は基準日から数えて39,918日目らしい。
ちなみに、基準日(数値で0の日付)はLotusScriptの場合、1899/12/30である。
40,000日目は2009/07/06(惜しい!七夕じゃなかった!)である。


%include "lsconst.lss"

Sub Click(Source As Button)
 '日付を数値で表してみる
 'Lotus Notes/Dominoは1899/12/30 00:00:00が起点になっている
 
 Dim hiduke As NotesDateTime
 Dim ret As String
 
 Set hiduke = New NotesDateTime( Now )
 
 ret = hiduke.DateOnly & Chr$(9) & " : " & Cdbl(Cdat(hiduke.DateOnly))
 ret = ret & Chr$(10) & hiduke.TimeOnly & Chr$(9) & Chr$(9) & " : " & Cdbl(Cdat(hiduke.TimeOnly))
 ret = ret & Chr$(10) & Cstr(Now) & Chr$(9) & " : " & Cdbl(Now)
 Msgbox ret, MB_OK + MB_ICONINFORMATION, "今日を数値で表す"
 
 '今度は数値を日付で表してみる
 Msgbox "40000 : " & Cdat(40000), MB_OK + MB_ICONINFORMATION, "数値を日付で表す"
End Sub


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

2009年4月13日月曜日

8.5のIF3を適用してみた

IDボールトの機能不具合の修正がされていると言うことで、Lotus Domino 8.5のFixを適用してみました。

こちら↓(サーバのバージョンが8.5 HF211となっている)



この後、IDボールト用のノーツDBを再度作成し直してみましたが、パスワードリセットをe-mailで通知してみると、パスワードは空欄のままでした。

残念ながら、8.5のIF3ではパスワードリセットについては修正がなされていないようです。



※検証内容は、当方の環境で独自に行ったものであり、必ずしも正しいとは限りません。あらかじめご了承ください。

2009年4月10日金曜日

IDボールトの不具合に対する修正

(参考)ID ボールトを使用する際に必要な修正
上記のURLに掲載されたように、IDボールトの機能に不具合があったため、そのためのFixが提供されたようですね。
今回は8.5 IF3という形のようです。

IBM IDを持っていれば、無償で入手できるようですので、ID ボールトを利用している方は入手しましょう。

ちなみに、どのような不具合なのかは不明です。
Murakamiさんや私が遭遇した不具合(IDボールトによるパスワードのリセットその2のコメントを参照)も一緒に直っていれば良いのですが。
それについては、また掲載します。

2009年4月9日木曜日

桜の木

ちょっと疲れたので、一休みです。


先週の日曜日(4/5)、地元のさくら祭りにお出かけしてきました。

写真を見ていただければ分かるとおり、東京都は葛飾区のイベントです。
区役所と小中学校を挟んでいる通りで、毎年4月の第一週(だったよな?)に開催されています。


これは、頭上の桜を撮影したものです。
これだけ見てると優雅な気持ちになりますが、実際は狭い道路に大勢の人がいますので、風情は余り感じられません(笑)。


一方、こちらは会社の近所にある桜の木です。
今朝は、すでに花びらがずいぶんと散っていました。今週末まで持ってくれれば良いかな?



来年にはまた、綺麗な花を咲かせてくれるでしょう。

2009年4月8日水曜日

Lotus Notes/Domino 8.5へのアップグレード

なんかIBMさんから、8.5へのアップグレードガイドなるものがアップロードされたみたいですね。
8.5へのアップグレードする際の手順や注意点などが載っています。

8.5へのアップグレードをしようと検討している人は是非読んだ方が良いですね。
ヘルプを読めば書いてあることかもしれないですが、まとめてあるのは有り難いです。
筆者も結構知らないことがあったりして吃驚しました(readme.nsfがreadme.htmlになったって何じゃそりゃ)。


こちら↓から、ダウンロードできます。
http://www.ibm.com/developerworks/jp/lotus/ldd_tech/20090401nd.html

2009年4月7日火曜日

プロンプト表示

またまた今更な感があるが、基本を忘れてはいけない!というのと4月なので?簡単なサンプルです。

プロンプトを表示してボタンをクリックしたら、どのボタンがクリックされたかを表示するものだ。
このサンプルでは、lsconst.lssに定義されている定数を利用している。
確定数は数値で定義されているので、数値を覚えていればその方が簡単なのだが、後でソースを見たときに分かりづらいので、分かりやすくするというのが目的だ。



ちなみに、%include "lsconst.lss"という記述は、条件がある。

筆者はノーツDBに文書を作成して、その中にホットスポットボタンを配置する。
そのボタンにLotus Scriptを記述していつでも確認できるようにしているのだが、
このやり方だと、%include "lsconst.lss"はエラーになるのだ。

このような場合、ドミノデザイナーを使って、スクリプトライブラリに%include "lsconst.lss"だけを定義したものを作成する。
これをuse "xxx"とするのだ。

ちょっとした裏技?なのかな。

----------------------------------------------------------------------

%include "lsconst.lss"

Sub Click(Source As Button)
Dim flag As Integer

'戻り値を必要とする場合、Messagebox関数は()で括る必要があります。
flag = Messagebox ("どのボタンを押したかが戻されます。", MB_YESNOCANCEL + MB_ICONQUESTION, "タイトル")
If flag = IDYES Then
Messagebox "「はい」を押しましたね。", MB_OK + MB_ICONINFORMATION, "結果"
Else
If flag = IDNO Then
Messagebox "「いいえ」を押しましたね。", MB_OK + MB_ICONINFORMATION, "結果"
Elseif flag = IDCANCEL Then
Messagebox "「キャンセル」を押しましたね。", MB_OK + MB_ICONINFORMATION, "結果"
Else
'このプロンプトでは起こりえないエラーですが、定数の種類を見せるために追記してあります。
Messagebox "何が押されたのか不明です。", MB_OK + MB_ICONEXCLAMATION, "結果"
End If
End If
End Sub

2009年4月6日月曜日

IDボールトによるパスワードリセットその3

先日までにIDボールトによるパスワードリセットの方法を紹介した。

残りの方法について紹介したいところだが、エラーが出ているので紹介をためらった。
しかし、色々と設定を変更したにもかかわらず同じエラーになるので、その内容について記載しておきたい。


1.IDボールトの設定を行う。
これは、IDボールトの設定方法を参考にして欲しい。

2.セルフサービスパスワードのリセット権限を追加する
IDボールトによるパスワードのリセット権限の追加でリセット権限を追加する際、「セルフサービスパスワードのリセット権限」にチェックをつけておく。


3.PwdResetSample.nsfをコピーして、署名する
 Lotus Dominoのdata配下にあるPwdResetSample.nsfをコピーしてPwdReset.nsfというDBを作成する。このDBを2.でリセット権限をつけたユーザで署名する
 なお、このDBのACLは編集者以上にしておくこと 

4.Lotus DominoサーバでHTTPタスクを起動する
 load httpとしてLotus DominoをWebサーバとして利用できるようにする

5.パスワードリセットDBをWebで開く
 http://LotusDomino名/PwsReset.nsf
 DBを開くユーザは、2.で「セルフサービスパスワードのリセット権限」にチェックをつけたユーザとする。このユーザにはインターネットパスワードを設定するのを忘れないようにして欲しい。

6.画面の指示に従って新しいパスワードを入力して、ボタンをクリックする。
 

実行しても何も変わらない。さらに、Lotus Dominoのコンソールに次のようなエラーメッセージが表示されるのだ。結果としてパスワードはリセットされていないのである。

Server EFMIYOSV/EFMIYO reported the following problem causing authentication to fail: Missing or invalid Password Reset Trust certificate. Check the log file for details.
HTTP Server: Agent 'agUserPasswordReset' error: ResetUserPassword Failed: Missing or invalid Password Reset Trust certificate. Check the log file for details.



これは、NotesSessionクラスのResetPasswordメソッドを利用したものである。
記事ではWebからの利用としてみたが、Notesクライアントからの実行(RunOnServerメソッドを利用してサーバで実行させるのだが)でも同様のエラーメッセージが表示されることになった。

このため、現時点では、IDボールトによるパスワードリセットは、IDボールトによるパスワードのリセットその2で紹介したLotus Domino管理者が直接パスワードを新しいものにするというのが良い。




同じエラーが出て回避策を知っている方がいれば、是非教えていただきたい。
不具合でないこと(筆者の設定ミスであること)を祈っておく。

2009年4月3日金曜日

IDボールトによるパスワードのリセットその2

前回はIDボールトにより、パスワードをリセットしてみた。
では、本当に変更されたかどうかを確認してみよう。

と言っても、パスワードを変更したユーザのLotus Notesクライアントを起動するだけだ。

1.Lotus Notes クライアントを起動する。
2.通常通り、ログイン画面になるので、管理者から教えてもらった新しいパスワードを入力する。
 
3.IDボールトDBから新しいパスワードのIDがダウンロードされて、パスワードの再設定を要求する確認ダイアログが表示されるので、[OK]をクリックする。
 
4.パスワードの再設定画面になるので、パスワードを入力する。
 入力したら[OK]をクリックする。
 
5.ここで変更したパスワードの情報がIDボールトにアップロードされる。
6.Lotus Notesが正常に起動される。



これで、IDボールトの設定から復旧まで説明してきた。感覚をつかめてもらえたら幸いだ。
従来のパスワード復旧方法に比べたら格段に簡単になっているので、是非この機能を利用してほしい。

IDボールトのパスワードリセットには、もう1つ方法があるのだが、それはまた別の機会に紹介したい(筆者の環境でうまくいっていないので、紹介できないだけなのだが・・・)



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

IDボールトによるパスワードのリセットその1

IDボールトの設定を行ったので、今回は実際にリセットする方法を紹介したい。
リセットをするには、権限がないと行えない。

詳細は、
IDボールトの設定方法及びIDボールトによるパスワードのリセット権限の追加を参照して欲しい。


1.Lotus Domino Administratorを起動してサーバを開く。
2.[ユーザーとグループ]タブを開く。
3.パスワードをリセットしたいユーザを選択する。
  但し、あらかじめIDボールトの利用を許可したユーザでないと実行できないので注意!
 
4.[ツール][パスワードのリセット]アクションを実行する。
 
5.新しいパスワードを入力する画面が表示されるので、画面の指示に従って設定する。
 設定したら、[パスワードのリセット]をクリックする。
 
 ※この画面にある通知方法だが、Lotus Domino Administrator 8.5ヘルプにかいてある内容と異なるので、注意すること(翻訳確認してないよなぁ)。
 ここでは、管理者が直接パスワードを変更して、本人に教えるということで、そのまま新しいパスワードを2回入力する。
 また、パスワードは入力しても表示されない(XXXになる)ので、しっかりと覚えておくこと。
6.パスワードのリセットに成功すると、その旨を表示するダイアログが表示されるので[OK]をクリックする。
 
 ※パスワードが間違っていたり、不適切なパスワード(パスワードクオリティに達していない場合等)は、エラーとなり、パスワードは変更されない。
7.これで、このユーザーのパスワードは変更される。
 変更されたIDは「IDボールト」用のノーツDBに格納されている(ただし、ユーザーIDそのものではないようで、そのまま利用することは出来ない)。


実際にパスワードがリセットされたかどうかを確認するのは、次回に回そう。

IDボールトによるパスワードのリセット権限の追加

先日、IDボールトの設定方法でIDボールトの設定を行ったが、パスワードをリセットすることが出来るユーザを登録していなかったので、今回はその登録を行う箇所を紹介しよう。

1.Lotus Domino Administratorを起動して、サーバを開く。
2.[設定]タブを開いたら、「セキュリティ」-「IDボールト」に前回登録したIDボールトの設定文書があるので、それを選択する。
3.[ツール]-[IDボールト]-[パスワードのリセット権限]アクションを実行する。

4.パスワードのリセット権限ダイアログが表示されるので、左のリストからパスワードのリセットを実行させるユーザーを選択する。
選択したら、[次へ(N)]をクリックする。

5.確認ダイアログが表示されるので、[設定]をクリックする。

6.認証者IDの選択画面になるので、認証者IDを選択して、[OK]をクリックする。
7.認証者IDのパスワードを入力する。
8.完了画面が表示されるので、[OK]をクリックする。

これで、ここで設定したユーザはIDボールトの機能を利用してパスワードをリセットできるようになった。

2万アクセスを超えました!

4/2に2万アクセスを超えたみたいですね。
4/1だったら、エイプリルフールだ!なんてネタにもなったのですが(^^

1万アクセスから、2ヶ月半ですね。読んでくださっている方が着実に増えているのかな?と感じています。
それだけLotus Notes/Dominoに対するリクエストが多いのでしょう。

もっと記事を増やしてLotus Notes/Dominoの良いところを伝えていきますのでよろしくお願いします。
悪いところもしっかり伝えていきますよ。それで、改善されればそれがまたそれが良いところになりますから!!

2009年4月1日水曜日

IDボールトの設定方法

Lotus Domino 8.5の新機能の一つに「ID ボールト」という機能がある。
ユーザーIDのパスワードを忘れた場合に、簡単に復旧できるというものらしいが、具体的な記述が見あたらない。
・・・ということで、筆者の環境で試してみた。

難しい。IDボールトというノーツDBとセキュリティポリシーを使っているというのは分かったのだが、ひたすら難しい。
Lotus Domino Administrator 8.5 ヘルプに説明は一通り書いてあるのだが、どうも的を射ない。
英語のヘルプを直訳している感じだ(IBMさん、どうにかしてよ!!)

とりあえず、今日はIDボールトを既存のLotus Domino 8.5サーバに導入するという手順を紹介しよう。

1.Lotus Domino Administratorを起動して、サーバを開く
2.[設定]タブを開く
3.[ツール]-[IDボールト]-[作成]をクリックする


4.IDボールトについての説明画面が表示されるので[次へ(N)]をクリックする


5.Lotus Notes ID ボールト名及び説明の入力画面が表示されるので、Lotus Notes IDボールト名を入力する
  入力したら[次へ(N)]をクリックする
  ※Lotus Notes IDボールト名はノーツDBのファイル名になる
   説明はノーツDBのタイトルになる
  と言うことを踏まえて入力して欲しい


6.ボールトIDのパスワード及びロケーション(保存場所)の入力画面が表示されるので、パスワードを入力する
  さらに、ロケーションを選択したら[次へ(N)]をクリックする
  ※パスワードは8文字以上


7.ボールトサーバーを選択する画面が表示されるので[次へ(N)]をクリックする
  ※デフォルトで最初に開いたサーバー名が選択されている


8.Lotus Notes IDボールトの管理者を選択する画面が表示されるので管理者を選択する
  選択したら[次へ(N)]をクリックする


9.Lotus Notes IDボールトユーザーの組織(または組織単位)を選択する画面が表示されるので[次へ(N)]をクリックする
  ※後で設定可能


10.IDボールトを利用するユーザー(パスワードのリセットを許可する)を選択する画面が表示されるので[次へ(N)]をクリックする
  ※後で設定可能


11.IDボールトのポリシーを設定する画面が表示されるのでいずれかを選択する
  選択したら[次へ(N)]をクリックする
  ※ここでは、「特定のユーザーやグループに割り当てる新規ポリシーの作成」を選択する
  ※後で設定可能


12.IDボールトのポリシーを割り当てるユーザを選択する画面になるので、ユーザまたはグループを選択する
  選択したら[次へ(N)]をクリックする
  ※後で設定可能


13.パスワードを忘れた場合に表示するテキストを入力する画面になるので、テキストを入力する
  入力したら[OK]をクリックする
  ※ここには、テキストにURLを書くことが出来るが、書式が決まっているので注意!!
   〈A HREF="xxxx"〉xxxx〈/A〉
   と書く。ここのHTMLタグは大文字で書いておくこと。小文字だと認識されないようだ。


14.設定内容の確認画面になるので[ボールトの作成]をクリックする


15.認証者IDを選択する画面になるので、認証者IDを選択する
  選択したら[OK]をクリックする
  ※手順9.で組織を選択していない場合は表示されない



16.認証者のパスワードを入力する画面が表示されるので入力する
  入力したら[OK]をクリックする
  ※手順9.で組織を選択していない場合は表示されない


17.IDボールトが作成される
18.IDボールトの作成が完了すると、完了画面が表示されるので、[完了]をクリックする
  ※設定内容を保存しておきたい場合は、[クリップボードへコピー]をクリックして、メモ帳などへ貼り付けて保存しておくと良い



これで基本的な設定は完了である。
ポリシーに設定されたユーザがノーツクライアントを再起動するとそのタイミングで、IDボールトのDB(サーバーのIBM_ID_VALUTフォルダに作成される)にIDファイルの情報がアップロードされる。

手順の詳細については、『Lotus Domino Administrator 8.5 ヘルプ』の《目次ビュー》を表示して、[セキュリティ]-[Lotus Domino Server IDとLotus Notes ユーザーID]-[Lotus Notes IDボールト]-[IDボールトの作成と設定を行う]を参照してほしい。



次回は実際にIDボールトの機能をどのように利用するのかを紹介したい(まだ検証中なので、いつかは未定・・・)。


※この検証は、あくまで筆者の環境で行ったものであり、正しいかどうかを記載しているものではありません。誤りを発見した場合は、コメントに一報を入れていただくとありがたいです。