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

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

2009年6月30日火曜日

自分が所属するグループ名の確認

しばらく記事を書いていませんでした。
ネタが切れてきたのと、忙しいのという両方の理由です。ごめんなさい。

さて、なので今日は手抜きです。
自分がどのグループに所属しているのかを確認する方法です。

@UserNamesListという関数を使うだけです。
複数のグループに所属している可能性があるので、リストで返されます。
従って、サンプルでは@Implodeを使ってリストを結合しています。

@IsMember関数を使えば、特定のグループに所属しているかどうかを調べることもできますね。
わざわざドミノディレクトリにアクセスしなくて良いので、なかなか重宝するのではないでしょうか?


-----------------------------------------------------------------
@Prompt([Ok];"自分が所属するグループ名の確認";@Implode(@UserNamesList))


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月25日木曜日

文字列の抽出

文字列を抽出するには、Left、Mid、Rightなどがありますが、今回は
Strleftbackを使ってみます。
これは、対象の文字列を後ろから(右側)から検索していきます。
見つかったら、先頭から見つかった箇所までを抽出するというものです。


サンプルは、自DBのフルパスを元にして、パスのみ(ファイル名を除いたもの)を抽出するものです。そのため、検索する文字は"\"としてあります。

Sub Click(Source As Button)
 Dim session As New NotesSession
 Dim curdb As NotesDatabase
 Dim tmp As String
 
 Set curdb = session.CurrentDatabase
 tmp = Strleftback( curdb.FilePath, "\", 1, 1 )
 Msgbox "抽出前:" & Chr$(9) & curdb.FilePath & Chr$(10) & "抽出後:" & Chr$(9) & tmp
End Sub

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月17日水曜日

DKS Plus for Lotus Domino Direct

今回は、DKS Plus for Lotus Domino Direct(以下、DKSDD)という製品の紹介です。

すでに、販売されているものですが、知らない人も多いと思いますので。

ノーツDBの文書に添付されているオフィスファイル(Excel、PowerPoint、Word)をPDFに変換、暗号化して鍵をかけるというものです(元のファイルがPDFの場合、直接暗号化して鍵をかけます)。

暗号化することにより、ファイルが盗まれても閲覧できなくなります。
また、鍵をかけることにより、適正なユーザ以外、閲覧できなくなります。
鍵の元となるアクセス権は、そのファイルが添付されているノーツDBのACL(のロール)を利用します。

つまり、ノーツDBにアクセスできないユーザは、絶対にそのファイルを閲覧することができなくなり、添付ファイルをダウンロードして、他の人に渡すという不正行為を防ぐことができます。
また、ノーツDBにアクセスできても、ロールにより、きめ細かい制御が可能(閲覧、印刷、コピーの可不可)です。。


DKSDDは、Lotus Dominoの他にサーバ機器を構築する必要がないと言うところも優れた点です。
(実際には、PDFに変換するためのサーバ製品をLotus DominoがあるPCにインストールする必要があります)

下図は、DKSDDの概要を表しています。



メーカの製品情報ページ
から、評価版をダウンロードできます。
ドキュメントの情報管理に困っていると言う方は、是非一度、チェックしてみてください。

弊社でも取り扱っていますので、気軽にお問い合わせください。
※製品紹介ページは、こちら
2009年12月25日改修

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月16日火曜日

8.0.3提供中止!?

(参考)Lotus Notes/Domino 8.0.x メンテナンスリリースの今後についてにあるように、Lotus Notes/Domino 8.0.xは8.0.2が最終リリースとなりました。

筆者のブログで何度も取り上げてきたリッチテキストの不具合リッチテキストが破壊される・・・その後では、8.0.x系の修正は8.0.3で行われる予定です。と書きましたが、これはなくなってしまいました。

8.0.2でHotFixが出ているとはいえ、ちょっと冷たいですね。

8.0.xも8.5も導入が進んでいないということを良く聞きますので、新しいバージョンに注力したいと言うことなんでしょう。


なお、前述の記事でも書いていますが、Notes/Domino 8.5であれば、この不具合は発生しませんので、安心してください。

2009年6月15日月曜日

ハッシュパスワード

デザイナーヘルプの@VerifyPasswordの説明を見ると
構文
@VerifyPassword( password ; password )
パラメータ
password
文字列。文字列式またはパスワードフィールド名を指定します。

と書いてあります。
でも、パラメータは2つあります。どちらのことを指しているのでしょうか?

正解は、
1つ目のpasswordは文字列、2つ目のpasswordはハッシュされた文字列を指すのです。
クロスリファレンスのNotesSessionクラスのVerifyPasswordメソッドの説明を見ると、それが正しいことが分かります。
構文
flag = notesSession.VerifyPassword( password$, hashedPassword$ )
パラメータ
password$
String 型。ハッシュされる文字列です。
hashedPassword$
String 型。ハッシュされた文字列です。

ですね。
でも、実際には違うものなので、同じ構文(パラメータの順序)かどうかは分かりません。

これも一種の不具合でしょう。でも、きっと直らないでしょうから、皆さんは気をつけて使ってください。

ということで、今回のサンプルです。
文字列を2回入力して、それが正しいかどうかを確認するものです。

実際の利用場面としては、ハッシュ化されたパスワードをノーツDBに格納しておいて、
それと入力された文字列を比較して正しいかどうかを確認するという所でしょう。

-------------------------------------------------------------------
tmpPassword := @HashPassword(@Prompt([OkCancelEdit];"パスワードの入力";"何か文字列を入力してください。";""));
comfirmPassword := @Prompt([OkCancelEdit];"パスワードの確認";"確認のため、再度文字列を入力してください。";"");

rem {@VerifyPasswordの引数の1つ目は文字列で、2つ目は@HashPasswordでエンコードされた文字列です。};
@If(@VerifyPassword(comfirmPassword;tmpPassword)=1;@Prompt([Ok];"パスワードの確認";"パスワードは正しいです。");@Prompt([Ok];"パスワードの確認";"入力されたパスワードが誤っています。"))


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月10日水曜日

営業日の計算

今日は、久しぶりに@関数のサンプルです。
よく「xx営業日」という言い方をします。土日祝祭日は日数に数えないで、あとxx日あるという意味ですね。
ノーツでは、6.0.xから、これを簡単に算出できるようになりました。
@BusinessDaysという関数を使います。
期間と除外する曜日、日付を引数として渡せば、その期間の営業日を返してくれるというものです。

サンプルでは、最初の日と最後の日、それと除外する曜日を選択すると、その期間内の営業日数を返してくれます。
除外する日付は組み込んでませんので、必要な場合はカスタマイズしてみてください。


カスタマイズしたいけど方法が分からないと言う方は、筆者の会社までご相談ください(^^

StartDate := @Prompt([OkCancelEdit];"初日の入力";"営業日を計算する最初の日付を入力してください。";@Text(@Today));
EndDate := @Prompt([OkCancelEdit];"最終日の入力";"営業日を計算する最後の日付を入力してください。";"");
Jogaibi := @Prompt([OkCancelListMult];"除外曜日の選択";"営業日として数えない曜日を選択してください。";"";"1:日":"2:月":"3:火":"4:水":"5:木":"6:金":"7:土");
ExcludeDay := @Replace(Jogaibi;"1:日":"2:月":"3:火":"4:水":"5:木":"6:金":"7:土";"1":"2":"3":"4":"5":"6":"7");

tmp1 := @BusinessDays(@TextToTime(StartDate);@TextToTime(EndDate);@TextToNumber(ExcludeDay));
tmp2 := @BusinessDays(@TextToTime(StartDate);@TextToTime(EndDate));

ret := @If(Jogaibi=1;@Text(tmp2);@Text(tmp1));

@Prompt([Ok];"営業日";StartDate + "から" + EndDate + "までの営業日数は、" + ret + "日です。")


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月9日火曜日

現在のユーザ名を表示する

今回もネタがないのでテキトーに。

現在のユーザ名を取得するというものです。
利用するメソッドそのものは簡単なもので、NotesSessionクラスのUserNameまたはUserNameListメソッドです。
二つの違いは、別名を含むか含まないかというのと、String型で返すかNotesName型で返すかという程度のものです。

この2つのメソッドは現在のセッションに対するユーザ名を取得するものです。
そのため、どこで実行されたかにより返す値が異なります。

クライアント上で実行される場合、その時のノーツユーザ名が表示されますが、
スケジュールエージェントなど、サーバで実行される場合はサーバ名を返します。

サンプルは、UserNameListの値を表示するものです。
クライアントでの実行を想定したものになっているので、ボタンを押したユーザの情報が表示されます。

-------------------------------------------------------------------
Sub Click(Source As Button)
Dim session As New NotesSession
Dim i As Integer

i = 1
Forall x In session.UserNameList
Msgbox x.Common, MB_OK + MB_ICONINFORMATION, "ユーザ名の表示[" + Cstr(i) + "]"
i = i + 1
End Forall
End Sub

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月8日月曜日

みにーちゃん

先週の土曜日、ディズニーシーに行ってきました。
雨だというのに、大勢のお客様が入ってました。すごいですね・・・って自分もその一人なので何とも言えませんが。

筆者は絶叫系のマシンは大嫌いなので、乗りません。
ということで、夕方の早い時間にはもう飽きてしまいます。
なので、園内をひたすらブラブラするのですが、そんなときに見つけたのが、これ↓

掃除をしているお姉さんがほうきで描いていました。
雨もあがってきていたので、晴れたら消えちゃうんだろうなぁ、もったいないなぁと思い、
「写真に撮っても良いですか!?」と聞いたら、快く「いいですよ。」と返事をしてくれましたので、パシャリと。
可愛いミニーちゃんですね。

近くにいたおこちゃまたちも喜んで見てました。

ちょっとほんわかした土曜日でした・・・

2009年6月5日金曜日

埋め込み設計要素の「表示」って・・・

埋め込みビューのテストをしていて、気がついたことです。



いつものようにメニューの[作成][埋め込み設計要素][ビュー]を実行しようと思ったら・・・
あれ?ない?「表示」?何これ?
・・・
・・・
!!「表示(V)」って・・・
View → ビュー → 表示
翻訳しすぎだろっ!
一瞬分からんかったぞ!

些細なことだけど、ちゃんとしてくれないと困るよね。
出荷前に検証して欲しいなぁ。

2009年6月4日木曜日

累計3万アクセス突破!

恒例の?アクセス件数報告ネタです。
今回は3万アクセス突破です。!

前回の2万アクセスからちょうど2ヶ月です。
1万から2万が2ヶ月半ですから、半月ほど早まったわけですね。

これもひとえに皆様のおかげです(ホントにそう思ってるのかって?ホントです!)
最近は、他のブロガーさんたちもお邪魔していただくようになっていますが、
まだまだ隠れたノーツ好きの人がいると思ってます。

些細なことでも構いませんので、コメントくださいませ。
貴方のその一言が、ノーツを発展させて、私の記事を書く活力になります!

では、これからもよろしくお願いしますね。

ノーツDBの文書を取得する

昨日に引き続いてJavaのサンプルです。

このサンプルを実行するには、JRE(JDKでも良い)の他に、ノーツクライアントがインストールされていることが必須です。
また、CLASSPATH変数に、「c:\Lotus\Notes\jvm\lib\ext\Notes.jar」
を追加する必要もあります。
※c:\Lotus\Notes\は筆者のノーツクライアントのプログラムパスです。

このNotes.jarの中にノーツをJavaから扱うためのプログラムが格納されているんですね。
それを利用しますよ。と言っているのが
import lotus.domino.*;
です。


今回のサンプルは、ローカルPCにある"abcde.nsf"をオープンして、
"($All)"ビューにある文書を取得して、そのタイトルをコンソールに出力するというものです。
この場合のコンソールは、「コマンドプロンプト」になります(筆者は当然?Windows環境なので)。
実行すると以下の画面のようになります。


----------------------------------------------------------------
import lotus.domino.*;

public class OpenDocument extends NotesThread {
//メイン
public static void main( String[] args ) {
try {
//スレッドを開始する
NotesThread.sinitThread();

//Sessionの開始
Session session = NotesFactory.createSession();

//指定したNotes DBのオープン
Database curdb = session.getDatabase( "", "abcde.nsf" );

//ビューの取得
View view = curdb.getView( "($All)" );

//ビュー内の文書の取得
Document doc = view.getFirstDocument();

//全文書分ループ
while ( doc != null ) {
//文書のSUbjectフィールドを表示
System.out.println( doc.getItemValue( "Subject" ) );

//次の文書を取得
doc = view.getNextDocument( doc );
}

}
catch ( NotesException e ) {
System.out.println( e.id + " " + e.text );
}
}
}



【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年6月3日水曜日

ノーツDBのタイトルを表示する

今までにも幾つかJavaでノーツにアクセスするというサンプルを載せてきたが、いずれもエージェントベースのものだった。

今回はJavaネイティブ?の環境からノーツへアクセスすると言うことをしてみたい。
そのためには、JDKが必要であるが、それは用意して欲しい。

筆者の環境はLotus Notes/Domino 8.5なので、Java6を用意した。
Lotus Notes/Dominoが利用できるJavaのバージョンは、次のリンクを参照して欲しい。
(参考)IBM Lotus 製品でサポートされている Java のバージョン


さて、サンプルは、ローカルPCにある"abcde.nsf"というノーツDBを開いて、タイトルを表示するという簡単なものである。

----------------------------------------------------------------
import lotus.domino.*;

import java.io.*;
import java.util.*;

public class DisplayTitle extends NotesThread {
//メイン
public static void main( String[] args ) {
try {
//スレッドを開始する。
NotesThread.sinitThread();

//Sessionの開始
Session session = NotesFactory.createSession();

//指定したNotes DBのオープン
Database curdb = session.getDatabase( "", "abcde.nsf" );

//Notes DBのタイトルの取得と表示
String dbTitle = curdb.getTitle();
System.out.println( dbTitle );
}
catch ( NotesException e ) {
//e.printStackTrace();
System.out.println(e.id + " " + e.text);
}

}
}


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

2009年6月1日月曜日

blogramって何?

筆者がこのブログを始めて、1年と2ヶ月ちょっとが経ちました。

さまざまなランキングサイトに登録したり、アクセス解析もしてます。
どんな会社の人が見に来てるのかな?とかどんな記事が読まれているのかな?
というのを見て楽しんでます。

ノーツ関係はプログラム開発から運用まで幅広くこなしている(つもり)なので、
何かあれば、筆者の会社までご連絡ください。
迅速に安価に対応しますよ(^^


さてさて、今日はまた1つ新しいサイトに登録したので、その紹介です。
brogram.jpというサイトです。
ランキングサイトなのですが、面白いのが
登録してあるブログにはどのような話題が多いのか、そのブログのみどころなどを自動で解析して紹介してくれるのです。

また、そのブログ記事に書かれているワードを元に、関連するブログを紹介してくれる「エコー」という機能があったりします。


試しに覗いてみてください。


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