投稿

2009の投稿を表示しています

今年も終わりです・・・

イメージ
なかなかネタが見つからないまま、今年も終わりを迎えようとしています。

ということで、これが今年最後の投稿になるでしょう。

昨年の年末では、ブログの総アクセス数が7,000前後だったことを考えると、
今年一年で、60,000以上のアクセスがあったという事です。
ノーツは古いとか、使いづらいとか言われつつも、これだけのアクセスがあるという事は
まだまだノーツは現役でいけると思っています。

新しい技術が出てきても、良いものは良い!と言いたいです。


ネタが少なくなってきても、必ず更新は続けていきます。
来年も是非、このブログ(と筆者の会社)をご愛顧くださいますよう、
よろしくお願いします。


では、良いお年をお迎えください。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

弊社の製品紹介ページができました

イメージ
過去に3回にわたって紹介した、弊社の取り扱い製品ですが、
やっと、HPに製品紹介ページができました。


お祝いしてくださる方は、下のボタンを押してやってください。


過去のブログ記事(下図参照)にもリンクを付けましたが、


せっかくなので、こちらに製品紹介ページのリンクを貼り付けておきます。
是非、ご覧いただいてお問い合わせいただければと思います。

株式会社エフの取り扱い製品

よろしくお願いします。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

8.5.1で変わったところ その4

イメージ
久々の投稿です。なかなかネタが見つからずに苦労してました。
ということで、8.5.1の変わったところネタです。

ということで、久々のお願いです。

ポチッと押してください。


デザイナが大きく変わったという事は、8.5.1で変わったところ その2でお伝えしましたが、他にもありました。
下図を見てください。



これは、デザイナでスクリプトライブラリにLotusScriptを記述しているところです。
ここで、「Sub」ステートメントにマウスカーソルを合わせたところです。
すると、ポップアップの形で、ヘルプが表示されるのです。
構文なんかを忘れてしまったときは便利に使えますね。


ただ、筆者の環境では、Dimにカーソルを合わせると、なぜかエラーになり、ヘルプが表示されませんでした。
不具合なのか,筆者の環境に問題があるのかはまだ不明です。
情報をお持ちの方がいたら、コメントしていただけると助かります。





最近は、気温の上がり下がりが激しいですね。こんな時に体調は崩しやすいものです。
十分、注意してくださいね。

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

個人情報探査 for Lotus Domino

イメージ
筆者の会社の製品紹介第3弾です。

【参考】
第一弾:DKS Plus for Lotus Domino Direct
第二弾:Office to PDF for Lotus Domino

では、いつものように、ポチッと押してください。



今回の製品は、
ノーツDBに添付されているファイルの中を探査して、そこに個人情報が含まれているかどうかをレポートする!
というものです。
製品名称は、『個人情報探査 for Lotus Domino』(仮)です。

【システム構成図】


【特徴】
探査するNotes DBを指定するだけ!探査結果は、Notes DB単位を文書として保管可能!探査結果から、添付ファイルがある文書を特定可能!個人情報は「住所、氏名、電話番号、メールアドレス」から特定!探査するNotes DBごとに探査の閾値を設定可能!


Notes/Domino導入当初は、Notes DBの目的が決められていて、整然と文書データが登録されていたかもしれません。
ですが、月日の経過とともに、Notes DBの中に色々な文書が登録されてしまって、収拾がつかない!
Notes DBをローカルレプリカさせたいけど、個人情報が含まれていると、持ち出しさせるのが危ないなぁ・・・
なんて言うときに、この製品で探査していただくと、すっきりとしますよ!


本製品について、詳しいことがお知りになりたい方、デモを見せて欲しいと言う方は、
筆者のアドレスか、もしくは筆者の会社までご連絡ください。
いつでもお伺いしますよ!!
※製品紹介ページは、こちら
2009年12月25日改修


※本製品は、クオリティ株式会社の個人情報探査エンジンを利用しています。
クオリティ株式会社のページへ


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

8.5.1で変わったところ その3

イメージ
8.5.1ネタの第三弾です。

今週末最後のお願いです。

ポチッと押してください。
※「にほんブログ村」総合ランキングで1万位以内に入りました!ありがとうございます!!(2009年11月25日 11:00時点)


今回はちょっとクレーム気味です。
ノーツクライアントやデザイナーでよく使うプロパティ。
こちらでの問題?です。

下図は、デザイナーでフォームを編集しているときの、「フォームプロパティ」ダイアログです。


8.5.1でも従来と同じような画面になっていますね。
昔からノーツに携わっている方にはなじみのあるダイアログでしょう。
フォームだけでなく、文字、表、ビュー、エージェントなど色々なところで活躍してくれました。

と、ここで・・・
他のプロパティ画面はどうなったのかなぁ?と調べていたら・・・
エージェントのプロパティの見え方が変わっているじゃないですか!
下図を見てください。これが8.5.1でのエージェントのプロパティです。


さらによく調べてみると、エージェントのタイプによって、プロパティの表示方法が変わることが分かりました。
従来のプロパティダイアログで表示されるもの
「式」「インポートされた Java」「シンプルアクション」
Eclipseベースのプロパティビューで表示されるもの
「Java」「LotusScript」

なんで、全部まとめて変更しないかなぁ。非常に中途半端です。
8.5.1で、LotusScriptは非常にコーディングしやすくなりましたが、従来のバージョンからの移行期であるとも考えられますね。
注意して使いましょう。

8.5.1で変わったところ その2

イメージ
昨日に続いて、8.5.1ネタです。

ということで・・・

もう、恒例ですね。ポチッと押してください。


さて・・・今日はデザイナで変わったところを紹介します。

下図を見てください。


LotusScriptライブラリの編集画面です。
ノーツアプリケーションを作成した方なら分かるかと思いますが、がらっと変わってますね。

大きく見ると、以下の3点ですね。
1.現在カーソルがある行がはっきりと分かる。
2.エラーの箇所がはっきりと示される。
3.Function関数なのか、Sub関数なのか、オブジェクトの種別が明確になっている。

カーソル行は、以前のバージョンでは画面の右下にひっそりと書いてあるだけでしたが、行全体がハイライトされることによって、分かりやすくなってます。
エラーの箇所も、以前のバージョンでは、赤字で表示されていましたが、場合によっては、赤字にならなかったりして、どこがエラーなんだろう?と分からないことも多々あったかと思います。
さらに、オブジェクトの種別ですが、今まではどんなものもすべて同じアイコンでした。
これが内容によって、アイコンが変わってくれるので、どんなオブジェクトを生成したのかがはっきり分かって良いですね。
そして、今までは、Classステートメントは(Declarations)の中に表示されていたのですが、これが独立して表示されるようになりました。

これなら開発者用のエディタとして、十分使いこなしていくことができそうですね。



この記事を読んだ貴方!すぐに8.5.1にバージョンアップしましょう!
お問い合わせは、筆者の会社まで!!


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

8.5.1で変わったところ その1

イメージ
気がついたら、8.5.1の日本語版がダウンロードできますねで書いたとおり、8.5.1をダウンロードして、アップグレードしてみました。

その結果、細かいところに変化があるのが分かりました。
今日は、そのうちの1つを紹介します(と言ってもたいしたことは書けません)。

その前に!

今日もこちらのクリックをよろしく!貴方のクリックがノーツを世に広めます(笑)




下図を見てください。ドミノディレクトリのユーザビューです。
今までは、ローマ字のユーザ名しか表示していませんでしたが、8.5.1では、日本語のユーザ名も表示されてます。



メールの宛先画面では、このような表示も可能でしたが、ついに?通常のビューでも実現されたと言うことです。

でも・・・そんなに嬉しいかなぁ?
どうなんでしょう?


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

Office to PDF for Lotus Domino

イメージ
筆者の所属している会社で、ちょっとした製品を作成してみました。
今日はその製品の紹介です。

その前に、恒例のお願いです!

今日もこちらをクリックしてから読んでくださいね。





製品名は「Office to PDF for Lotus Domino」(仮)です。
Officeドキュメント(Word、Excel、PowerPoint)をPDFに変換するサーバ製品です。

【システム構成図】


【特徴】
クライアントに専用ドライバは不要。使い方は、簡単!ファイルを添付してメールするだけ!PDFファイルにすかし(会社名及びメールアドレス)を印刷することが可能!e-mailアドレスを設定することにより、Lotus Notesクライアント以外からも利用可能!ログを採取しているので、誰がPDFに変換したのか、管理も可能!

ただ、PDFに変換するだけではなく、「強制的にすかしを入れる」というところがポイントです。

・誰が作成したPDFなのか、一目で分かるようにしたい。
・誰がPDFへの変換を行ったのか、記録を確認したい。
・PDF変換は全社で統一したものを利用したい。
・フリーのドライバを使われるのはコンプライアンス上、困る。
などと言うときに、本製品をお使いいただければ、解消されます。

※本製品の稼働には、Lotus Domino、Microsoft Office、Zeon DocuCom PDF Serverが必要になります。


本製品について、詳しいことがお知りになりたい方は、筆者のアドレスか、
もしくは筆者の会社までご連絡ください。
※製品紹介ページは、こちら
2009年12月25日改修


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

気がついたら、8.5.1の日本語版がダウンロードできますね

IBM Lotus Notes/Domino 8.5.1 および IBM Lotus Enterprise Integrator 8.5.1 の発表の中にあるリンクにひっそりと書いてあったので気がつきませんでしたが・・・
(↑こんなことを書いてますが、実は、先日参加した、XPagesの講習会で使っていたNotes/Dominoが8.5.1日本語版だったので、知ったのですよ。)

すでにLotus Notes/Domino 8.5.1の日本語版がダウンロード可能になっていますね。


残念ながらフリートライアルは8.5のようですが、パスポートアドバンテージに加入されている方は、ダウンロードして使ってみましょう。

環境設定文書の作成方法

イメージ
今回は、筆者がよく使う手法の紹介です。

その前に、恒例のお願いです!

今日もこちらをクリックしてから読んでくださいね。

ノーツDBに動作を設定する文書を作りたい場合、プロフィール文書を使うと思います。
以前は筆者もプロフィール文書を使っていましたが、
内容の確認が難しい(どういう状態にあるのか、いちいち画面を開かないと確認できない等)ので、今は余り使っていません。

その代わり、普通の文書を作成して使っています。
プロフィール文書は、ノーツDBに1つだけ作成できるという特性を持っているのですが、
普通の文書はそうではありません。

そこで、1つしか作成できないように工夫する必要があります。

筆者は以下の手順で行っています。
1.環境設定文書用のフォームを作成する
2.環境設定文書用のビューを作成する
3.ビューに以下のアクションを追加する
----------------------------------------------------------
tmp := @DbColumn("Notes":"NoCache";"";"Config_V";1);
@If(@IsError(tmp)|tmp="";@Command([Compose];"Config_F");@Command([EditDocument]))
----------------------------------------------------------

これで、このボタンをクリックすると、環境設定文書を1つだけ作成できるようになります。


環境設定文書だけではなく、普通に1文書しか作成させたくない。と言う場合に利用できます。
お試しあれ。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

ノーツDBのタイトルが設定されないことがある

イメージ
さて、今日はIBMさんのサイトからの情報ネタです。
筆者もはまったので、お知らせしておきます。

その前に・・・

今日もこちらをクリックしてから読んでくださいね。

データベースのファイル名を変えてサーバーにコピーするとデータベースタイトルが設定されない <= これ、バグだったんですね。

ノーツDB(8.0からはノーツアプリケーションと言うんだけど、しっくりこないよね)を作成する際、テンプレート化していたんですね。それでバックアップとテストを兼ねて、ノーツDBをコピーしたら、ノーツDBタイトルが空っぽになってる。
あれ?おかしいな、と思って、何度か試したけど結果は同じ。ノーツDBタイトルは設定されない。

何かやってはいけないことでもしたかな?と思って、テンプレートから設計を引き継いで、ノーツDBを作成したら、成功したので、「ま、いっか。」と思ってました。

テンプレートを作ってノーツDBを開発している方は気をつけましょう。

気がついたら6万突破してた・・・

イメージ
最近、めっきり記事を書かなくなった筆者ですが・・・

気がついたら、累計6万アクセスを突破してましたね。
すごいですね。
アクセスしてくる方々も多種多様です。
ノーツのベンダーさんから、エンドユーザの方まで大勢の方に読んでもらっています。

恒例の?前回からxヶ月ですが、5万アクセス到達!!が9/11ですから、約2ヶ月ですね。
さすがに、更新を怠ると、間が伸びますね。

読者の皆さん、しっかりしているということで・・・

ただし!読んでるだけではいけません。

これをクリックして、Lotus Notes/Dominoをもう一度広めましょう。

知らない人にも読んでもらうことが、Lotus Notes/Dominoを広める一つの方法だと思いますので(なぁんて)。

では、今後ともよろしくお願いしますね。

文書から別の文書を開く

今日のは「忘れてた・・・」シリーズです。
以前、プログラミングして、ここでは使えないんだな。と認識していたのですが、いつものサンプルDBに登録するのを忘れていて、すっかり忘れていたのですが・・・

文書を開いていて、そこから別の文書を開くというものです。
通常、文書リンクアイコンがあれば、それをクリックすることで別の文書を開くことができます。
しかし、文書リンクではなく、文書のUNIDしか情報を持っていない場合はどうすればよいのでしょうか?

文書UNIDから文書を開く方法として、真っ先に思い浮かぶのは
@Command([OpenDocument])
だと思います。

しかし!
デザイナーヘルプをよく見ると・・・
「データベースが文書ビューレベルで開いていて、そのビューに開きたい文書が含まれていなければなりません。」
となっています。
つまり、このコマンドはビュー上でしか動作しないのです。

これでは、文書から別の文書を開くと言う方法には使えません。


そこで、考えるのがLotusScriptを使って、どうにかできないか?ということです。
文書を開くには、ComposeDocumentもしくはEditDocumentを使います。
が、ComposeDocumentは新規文書の作成なので、ここでは使えません。
となると、EditDocumentです。
しかし、EditDocumentは、開く文書が特定できている必要があります。

今、分かっているのは開きたい文書のUNIDです。
ということで、開きたい文書を特定します。
開きたい文書は、同一DB内にあるとすれば、
NotesDatabase#GetDocumentByUNIDを使って、文書を特定することができます。

後は、この文書をEditDocumentで開くだけです。
簡単にできますね。


以下は、これを実現したサンプルです。
サンプルなので、UNIDはコードの中に埋め込んであります。
実際に使うときは、NotesUIDocument#FieldGetTextメソッドを使って取り出してください。
Sub Click(Source As Button) Dim unid As String Dim session As New NotesSession Dim curdb As NotesDatabase Dim op…

LotusScriptで実行したエージェントは・・・

昨日に続いて、今日も「今まで知らなかった・・・」シリーズです。

プログラムからエージェントを実行する場合、皆さんはどのようにしているでしょうか?

@コマンドの
@Command([ToolsRunMacro];"エージェント名")
@Command([RunAgent];"エージェント名")
を使うか、もしくは、
LotusScriptのNotesAgentクラスのRunメソッド(RunOnServerメソッド)
を使うかのいずれかでしょう。


一見、@コマンドかLotusScriptかの違いしかないように感じますが、実はそうではなかったのです!

実は、LotusScriptのNotesAgentクラスRunメソッドでは、できないことがあるのです。

デザイナーヘルプを良く読むと分かるのですが・・・
MessageBox(Msgbox)やInputboxなど、ユーザからの入力を待つような関数が実行出来ないのです。

ちなみにヘルプには『ユーザーは呼び出されたエージェントと直接対話できません。ユーザーの出力は Lotus Domino log に保存されます。』と書いてあります。
※クライアントからエージェントを実行した場合、「Lotus Domino log」というのは、ローカルPCにある「log.nsf」を指すので、そこに記録されます。

エージェントを間接的に実行するような場合は、この点に注意しましょう。
@コマンドや@関数も積極的に利用しましょう!という良い教訓ですね?

LSSファイルのインクルード

当たり前というか、ヘルプを見れば書いてあるというか。
でも、筆者は今日、この瞬間まで知らなかったので、忘れないように書いておきます。

スクリプトライブラリにプログラムを記述する際、色々なプログラムで利用するような定数はあらかじめ、LSSファイルにまとめておいて、そのファイルをインクルードするというような事があると思います。
筆者の場合、ノーツDBの設計を隠す場合にも使っていますが・・・

さて、LSSファイルをインクルードする方法ですが、
%include "LSSファイル名"
とします。
この時、LSSファイルは、ノーツのプログラムディレクトリに存在する必要があります。

これだと、LSSファイルをたくさん作ると、プログラムディレクトリがごちゃごちゃしてしまいますね。
PCの移行やノーツのバージョンアップなどで、ファイルがどこかに行ってしまうとも限りません。

実は、%include命令のLSSファイルは、「相対パス指定」「絶対パス指定」という書き方もできるのです。

1.相対パス指定とは
 ルートパスをノーツのプログラムディレクトリとして、そこからファイルを検索する方法
 ノーツプログラムが「c:\lotus\notes」の場合
 %include "lss\test1.lss"
 は、「c:\lotus\notes\lss\test1.lss」というファイルを利用します。 

2.絶対パス指定とは
 ドライブ名からパスを指定する方法
 %include "c:\miyolss\test1.lss"
 は、「c:\miyolss\test1.lss」というファイルを利用します。


ということで、フォルダ管理をうまく活用して、LSSファイルの達人になりましょう。

エージェントを有効化する

イメージ
病床からの復帰第一弾です。

NotesDBに作成したスケジュールエージェント(ヘルプでは定期エージェントとなってます)は、LotusScriptで有効化/無効化を切り替えることができます。

【サンプルソース】
Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Dim agent As NotesAgent 'PDF変換エージェントを取得する Set db = session.CurrentDatabase Set agent = db.GetAgent( "エージェント名" ) 'エージェントを有効化して保存する agent.IsEnabled = True Call agent.Save() End Sub
とても簡単ですね。
ノーツDBを取得して、エージェントを取得して、IsEnabledプロパティをTrueにして、エージェントを保存するだけ。

これはヘルプにもあるとおり、「定期エージェント」でのみ有効です。
実際のエージェント画面を見てもらえば分かりますが、「有効」「無効」を示すアイコンがあるエージェントでだけ、使えるんですね。


ところが・・・
定期エージェントにも関わらず、このサンプルが実行出来ない(つまりは、IsEnabledプロパティの変更が有効にならない)場合があります。

下図を見てください。エージェントの設定画面です。



ここにあるように、「エージェントが有効になったときにサーバーを指定」のチェックがついていると、NotesAgentクラスのIsEnabledプロパティをTrueにしても保存できないのです。


これに対する解決策は2つあります。

1.「エージェントが有効になったときにサーバーを指定」のチェックを外しておく。
 そうすれば、問題なくエージェントが保存できます。

2.NotesAgentクラスのServerNameプロパティを一緒に設定する
 NotesAgentクラスのIsEnabledプロパティをTrueにした後、ServerNameプロパティも一緒に設定しておくことで、エージェントが保存できるようになります。
 サーバ名は正しいものを設定しないと、このエー…

Lotus夜Day2009

イメージ
すみません。

諸事情により、Lotus夜Day2009に参加することができませんでした。
代わりに?筆者の所属する会社の社長に参加していただきました。

次の機会には必ず、参加いたしますので、皆様にはその時にお会いしましょう。

下の写真は社長がGet!してきた戦利品です。
シャツは着ると、「あぁ、ノーツやってて良かったぁ」という気分になりますね。


このブログのネタもまた少し増えてきた感じなので、様子を見ながら記事を書いていきます。
よろしくお願いします。


追伸
時々、直接ご質問をいただきますが、そう言った事への回答はいたしておりません。
些細なことでも筆者の会社を通じていただければ幸いです。

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

このブログの訪問者って?Part2

イメージ
久しぶりの投稿です。

が!Notes関連の記事ではないです。ごめんなさい。
随分前に、このブログの訪問者って?と言う記事を書いて、その中で、このブログへの訪問者の年齢別分布をお見せしました。

今回は、男女比というものが判明したので、それを掲載します。


・・・どちらが男性とは書いてませんが、色的に見ても数的に見ても分かりますよね。
女性に人気がないなぁ。
ノーツの技術者は女性が少ないのかしら?知り合いには女性もいるんですがね。
肝心なことは書かないから、嫌がられているのかしら?

真相は分かりませんが・・・
筆者のブログから言えるのは、「ノーツに携わっているのは、40前後のおっさんが多い」ということですね。

うんうんとうなずかないで、若い人や女性にも広めていきましょうね。



あ!筆者も来週行われるLotus夜Dayには参加しますよ。たくさん情報交換しましょうね。
勝手に引用(ごめんなさい)→Lotus夜Day 2009 ~祝!!Lotus Notes 20歳(はたち)やでぇ~ 開催案内






そういえば、デザイナが無償になるんですね。個人的には嬉しさと悲しさ半々かな?
DBの改修のお仕事が減っちゃうのかなぁ・・・なんて。
それとも、「作ったんだけど、どう改修して良いか分からないから、お願い!」
なんて仕事が増えるんでしょうか?
いずれにしても、ノーツが盛り上がれば良し!としましょう。

アウトラインのラベル

イメージ
久しぶりの投稿です。サボっていたわけではありません。ホントにネタがなかったんです。

ということで、小ネタを発見したので、その報告です。
もしかしたら知っている方も入れませんが・・・

ノーツDBの設計でアウトラインを作成する方は多いかと思います。
(昔はナビゲータでしたねぇ)

このアウトライン。
ビューを表示させたり、フォームを表示させたり、@関数を書いて実行させたりできます。
その時、画面上に表示するラベルを設定できるのですが、ここにも@関数を書くことができるんですね。
下図を見てください。
通常は、アウトラインプロパティ画面の赤丸で囲んだ箇所にラベルを記述します。
すると、下部にあるプログラムペインにその内容が表示されます。
ところが、このプログラムペインをよ~く見てください。
青丸で囲んだ場所ですね。グレーアウトされてはいますが、「式」と書いてあります。

ここに@関数を書いてみると、なんと実行されるんですね。
ここで、注意して欲しいことがあります。
@関数は、必ず、プログラムペインに記述してください。
プロパティ画面のラベル欄に書いても無効になります。

ちなみに、ラベルに今日の日付を表示させようとして@Today関数を埋め込んだのが下図です。
アウトラインプロパティ画面のラベル欄は「計算結果」となっていますね。


下図は、上で作成したアウトラインをページに埋め込んで、それを表示したものです。
確かに今日の日付が表示されています。


これを活用すると、1つのアウトラインで、非表示式を使うことなく、複数の属性を持たせることができますね。

是非、試してみてください。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

プロフィール文書が存在しているか否か その2

プロフィール文書が存在しているか否かでは、作成日と更新日、最終アクセス日を用いて、プロフィール文書がすでに存在しているかどうかのサンプルを書きました。

その中で、haruさんから、NotesDocumentクラスのHasItemを使ってはどうか?というコメントをいただいたので、試してみました。

サンプルはこんな感じです。
(前略) set prodoc = db.GetProfileDocument( "ProfileForm" ) If Not ( prodoc.HasItem( "フィールド名" ) ) Then 'プロフィール文書が存在しない場合の処理 End If (後略)
結果、正しく動作しますね。

こちらの方が分かりやすいですね。ただ、プロフィール文書のフィールド名に依存してしまうので、汎用的ではなくなってしまいます。
自社で活用される場合、プロフィール文書のフィールド名をある程度共通化しておくと、便利に使えるのではないでしょうか。

5万アクセス到達!!

ついに5万アクセスを超えました。
すごいですねぇ。
4万アクセス!の記事を書いてから、およそ1ヶ月半ですね。
8月は夏ばて?で記事がアップ出来ていなかったというのに、このアクセス数。

なんなんでしょう?怖いくらいですね。
記事のアップがあまりにもないと、そのうちお叱りを受けるんじゃないかと・・・


まだまだノーツは奥が深いところがあるので、そう言ったところを調査して、記事をアップするようにしますので、これからも見てくださいね。



そうそう。ランキングサイトへの協力も忘れないでね。

プロフィール文書が存在しているか否か

イメージ
ノーツDBの設定情報を格納するものとして、プロフィール文書を使っている方は多いのではないだろうか?

プロフィール文書は、特殊な文書で普通の文書と同じように扱うことはできない。
@コマンドで呼び出す場合、@Command([EditProfile])を使う必要があるし、
LotusScriptの場合、NotesDocumentクラスのGetProfileDocumentメソッドを使う必要がある。

@コマンドの場合、プロフィール文書用のフォームがノーツDBに存在している必要があるが、
LotusScriptの場合、そのフォームがなくても動作してしまうところがすごい。
(NotesDocumentクラスがバックエンドなので、仮想のフォームを設定できるため)


さて、ではプロフィール文書がすでに作成されているかどうかをLotusScriptで調べることは可能であるのか?
通常の文書であれば、NotesDocumentクラスのIsNewNoteプロパティであったり、NotesUIDocumentクラスのIsNewDocプロパティで調べることもできるし、
もしくはNoteIDが0になっている場合、ということでも判断できる(UNIDは、仮で割り当てられるので、判断できない)。

実は、プロフィール文書では、上記のいずれも利用できないのだ。
GetProfileDocumentメソッドはNotesDocumentクラスのものなので、NotesUIDocumentクラスのIsNewDocプロパティはそもそも利用できないし、NotesDocumentクラスのIsNewNotesプロパティもFalseを返すのだ。
さらには、NoteIDも0以外の値を返す始末。

うーん・・・プロフィール文書、恐るべし。

ここで諦めてはもったいない。なんとか判断する方法はないだろうか?


ということで、ちょっと強引だが、次の方法を考えてみた。
CreatedプロパティとLastModifiedプロパティ、LastAccessedプロパティ、この3つがいずれも同じ日付、時間を指していたら?
それは、作成されてから、一度も更新されておらず、なおかつ、誰も編集モードで開いていない。
ということは、新規作成の状態。つまりは今までは存在しなかったのではないか?
となる。

サンプルを書くと、こんな感じ?


(前略) set …

3つの変数を比較する

イメージ
当たり前と言えば当たり前なんだけど・・・
3つの変数を比較する方法です。

a、b、cという3つの変数があったとして、全部が同じかどうかを比較するには
どうすればよいか?

If a = b then
If a = c then
Msgbox "3つとも同じ値です", MB_OK, "3つの変数の比較"
End If
Else
Msgbox "どれかの値が違っています。", MB_OK, "3つの変数の比較"
End If

この場合、aとcが違う場合、なんのメッセージも表示されずに終わってしまいます。
つまり、不完全だということです。

If ( a = b ) and ( a = c ) then
Msgbox "3つとも同じ値です", MB_OK, "3つの変数の比較"
Else
Msgbox "どれかの値が違っています。", MB_OK, "3つの変数の比較"
End If

これなら、最初にa、b、cの値を比較するので、大丈夫ですね。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

Working Smarter Forum 2009に行ってきました。

イメージ
昨日に開催されたWorking Smarter Forum 2009に行ってきました。

さて、基調講演でちらっとお話しがありましたが、参加申込者が約1,500名ということでした。
今年も盛況だったようですね。
出展会場には、おなじみの会社の他、今年初めて出展する会社も何社かあったようです。
セッションをずっと聴いていると、なかなか出展会場を回る時間が取れないのが残念です。

何社かは、興味深い所がありましたので、詳しい話を聞いてみたいですね。


今年もノベルティをゲットしました。
アンケートに答えるともらえるLotus特製ブックカバーと、スタンプラリー完成(5個押印)でもらえる、ドライバーキットですね。


こちらは、出展各社のノベルティです。
チームスタジオ、アイ・ティ・フロンティア、トレンドマイクロ、ネスコ(敬称略)からいただきました。



そういえば、すでにセッションの資料ダウンロードができるそうです。
セッションを聴けなかった方は、是非ダウンロードしてみてください(別にIBMの回し者ではありません)。
こちらから


筆者の会社も、来年辺りは、何かしら出展できるように頑張らないといけないですね。

文書を新規ウィンドウで表示する

イメージ
ビューで文書を選択した状態で、マウスの右クリックをすると、ポップアップメニューがひらくが、その中に「新規ウィンドウで開く」というのがある(下図参照)。



これを実現する@コマンドが@Command([OpenInNewWindow])である。

ヘルプには何も書いてないが、複数文書選択しても意味がない。
カーソルが当たっている場所の文書だけが対象になる。

こちらの思惑としては、選択した文書の数だけウィンドウが開いてくれるのかなぁ。なんて・・・
まぁ、1万文書選択されたら、それだけのウィンドウが開くのか?なんてことを考えれば当たり前とも言えるが・・・

プロンプト表示その2

イメージ
で、Messagebox関数の使い方について触れたが、この時は、Messagebox関数の戻り値としてどのボタンがクリックされたかをチェックするものだった。

今回は、Messageboxの見栄えを変更するための、定数を紹介する。
といっても、lsconst.lssをインクルードするのは同じ。
後は、Messagebox関数のオプションにMB_xxxxという値を設定するだけだ。

サンプルは、このオプション定数を使って、色々なダイアログを表示しているものだ。
どのような画面が表示されるかは、実際に実行して確認してみてほしい。


------------------------------------------------------------------------
%include "lsconst.lss"

Sub Click(Source As Button)
Messagebox "スクリプトで記述すると、色々なタイプのメッセージが表示できます。", MB_OK, "タイトル"
Messagebox "ダイアログに表示するアイコンも変化させられます。", MB_OK + MB_ICONEXCLAMATION, "タイトル"
Messagebox "ボタンの種類も変更できます。", MB_YESNOCANCEL, "タイトル"
Messagebox "アイコンとボタンの組み合わせも可能です。", MB_OKCANCEL + MB_ICONQUESTION, "タイトル"
End Sub


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

ハッシュ関数とベリファイ関数

イメージ
ハッシュパスワードで、@関数のハッシュパスワードについては、サンプルを掲載したが、Lotus Scriptのサンプルは掲載していなかった。

ということで?、Lotus Scriptでのサンプルを載せる。

2回文字列を入力して、それぞれのハッシュ化内容が正しいかどうかを検証するというものだ。

ハッシュしたものだけをどこかに格納しておき、別に入力した文字列とベリファイするようにすれば、パスワードとして使えるだろう。
各自で、改造してみて欲しい。

---------------------------------------------------------------------------------------------
Sub Click(Source As Button)
Dim session As New NotesSession
Dim inputData As String 'ハッシュ化する文字列
Dim hashData As String 'ハッシュされた文字列
Dim confirmData As String '確認用文字列
Dim ret As Boolean 'ハッシュのベリファイ結果

' 文字列の入力
inputData = Inputbox( "文字列を入力してください。", "ハッシュ関数の確認" )
If inputData = "" Then Exit Sub

' 入力文字列のハッシュ化
hashData = session.HashPassword( inputData )

'確認用文字列の入力
confirmData = Inputbox( "確認用文字列を入力してください。", "ハッシュ関数の確認" )

'ハッシュ化文字列とのベリファイ
ret = session.VerifyPassword( confirmData, hashData )

'結果発表

IBM Working Smarter Forum 2009

忘れていましたが・・・IBM Working Smarter Forum 2009 - Japanに出ているように、9/8に赤坂プリンスホテル(大阪は、9/11に帝国ホテル)Working Smarter Forum 2009が開催されます。

今まで、LotusDayと呼ばれていたイベントですね。


筆者はすでに参加申し込み済みです。
例年、大勢の方がいらっしゃるようなので、できれば事前に申し込みをしておきましょう!
まだしてない。と言う方はこの記事を読み終わったら、すぐに登録しましょうね。

筆者は今年は、出展とかはしないので、会場をブラブラとしています。
プロフィールの似顔絵に似た奴に出くわしたら、一言声を掛けてやってください。

出展者の皆様も、見かけても逃げないでくださいね。

ツールバーから「Notesの終了」が消えた!?

イメージ
些細なことだが、筆者は悲しかったのと困ったので、書いておく。

ノーツにはツールバー(昔のバージョンでは、スマートアイコンと呼んでいた)がある。
このツールバー、標準のまま使うのではなく、カスタマイズして使うと結構便利になるので、重宝していた。

筆者がよくカスタマイズするツールバーは以下のもの(画面はLotus Notes 7.0のものを抜粋)。
・選択文書を既読に
・選択文書を未読に
・形式を選択して貼り付け
・データベースを開く
・標準
・Lotus Notesの終了
・表のプロパティ
・文字のプロパティ


これらを既存のツールバーにセットして使っていたのだが、
ノーツ8.5では、[Lotus Notesの終了]がなくなっている。

なんで?
@Command([ExitNotes])はなくなってないし、動くよね?
他に何か不都合でもあったの?

他にも全文検索の検索バーを表示してくれる[検索]もなくなってるし・・・

何、この微妙な変更は?
ちゃんと説明して欲しいっていうか、復活させろ!


特に、[検索]はヘルプDBで重宝して使ってるのだが(ヘルプDBは、起動時に全文検索のバーが表示しないように設計されているので、ツールバーに[検索]をセットして、強引に表示するようにしてました)、ツールバーのカスタマイズでも変更できない!→@Command([ViewShowSearchBar])のアイコンを追加して、保存すると追加されたものが消えてしまう。

これは、もうバグでしょ!?非道いよ!!


仕方がないので、筆者はヘルプDBの設計を変更して、全文検索のバーの非表示をコメントアウトしました。

16進数を10進数に変換する関数を自作してみた

イメージ
x進数を10進数に変換する関数で16進数を10進数に変換する関数があることを紹介した。

しかし、ないものだと思っていたので、自作してみた。
さらにせっかくなので、関数化してみた。
もっと綺麗に書けるかもしれないが、やっつけだったので勘弁して欲しい(汗)。

Function HexToDec( HexStr As String, DecLong As Long ) As Boolean     '--------------------------------------------     ' 【16進数から10進数へ変換する関数】     '     ' 引数: HexStr 16進文字[Input]     ' DecLong 10進数[Output]     ' 戻り値: True 成功     ' False 失敗     ' 作成者: 御代 政彦     ' 作成日: 2009/07/22     ' バージョン: 1.0     '--------------------------------------------     On Error Goto ErrProc         Dim HexLen As Integer '16進数の桁数     Dim HexInt As Integer '16進数の各桁を数値にしたもの     Dim i As Integer 'カウンタ         '16進数の桁数を取得する     HexLen = Len( HexStr )         '16進数の桁数分ループする     For i = 1 To HexLen         '各桁を数値に変換する         HexInt = Fto15( Mid( HexStr, HexLen + 1 - i, 1 ) )         If HexInt = -1 Then             HexToDec = False             Exit Function         End If         '桁数に16のべき乗を書けたものを累積していく         Dec…

x進数を10進数に変換する関数

イメージ
数値をx進数に変換してみるの中で、10進数に変換する関数はない。と書きましたが・・・

ありました。

Val関数を使います。
元々は、文字列を数値にする関数なのですが、
特別な記号を使うことで、16進数や2進数を10進数に変換することができるのです。
特殊な記号とは、ヘルプにも書いてありますが、
&h及び&です。
「&h文字列&」というように、&hと&で囲うと間の文字列が16進数として判断されます。
&hの代わりに、&oや&bを使うとそれぞれ8進数、2進数となります。


サンプルは16進数を10進数に変換するものです。
応用して、2進数を10進数に変換するものを作ってみてください。

Sub Click(Source As Button)     Dim inp As String     inp = Inputbox( "16進数を入力してみてください", "16進数を10進数に変換" )     Msgbox Format( Cstr( Val( "&h" & inp & "&" ) ), "#,###" ) End Sub




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

数値をx進数に変換してみる

イメージ
10進数からx進数への変換のサンプルです。
とは言っても、
2進数、8進数、16進数のみです。
それぞれBin、Oct、Hex関数を使うだけの簡単なものです。
この中で使えそうなのは、BinとHex関数ですね。

入力できる10進数に限界があるのは、Long型だからです。
ノーツでは、数値はそこまでしか扱えないので、注意が必要です。

ヘルプを見ると分かりますが、BinやHexもLong型の限界までしか変換をサポートしていません(戻り値の最大桁数が決まっています)。


ちなみに、10進数への変換を行う関数はないんですね。ちょっと残念。

Sub Click(Source As Button)     On Error Goto ErrProc         Const MSGTITLE = "数値のバイナリ表現"     Dim ret As String         '基本となる数値の入力     ret = Inputbox( "-2,147,483,648~2,147,483,647の数値を入力してください。", MSGTITLE, "0" )         '入力チェック     If ret = "" Then         Msgbox "キャンセルがクリックされたので、処理を中止します。", _         MB_OK + MB_ICONINFORMATION, MSGTITLE         Exit Sub     End If     If Not ( Isnumeric( ret ) ) Then         Msgbox "入力された値は数値ではありません。", _         MB_OK + MB_ICONEXCLAMATION, MSGTITLE         Exit Sub     End If         'x進数への変換結果     Msgbox _     "10進数表現:" & Chr$(9) & ret & Chr$(10) & _     " 2進数表現:" & Chr$…

4万アクセス!

イメージ
前回(累計3万アクセス突破!)から2ヶ月かからずに、4万アクセスに達しました。

ネタが尽きてきて、あまり記事を書けていないのに、これだけアクセスしてくれるのは嬉しいです。

まだまだ続けていく気はありますので、期待しないで見てください。

ネタを増やすため、引き続きお仕事の依頼も受け付けておりますので、
お気軽にお問い合わせください。

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

第43回葛飾納涼花火大会

イメージ
昨夜は、地元の花火大会がありました。雨天と言うことで心配だったのですが、決行されました。
葛飾区に引っ越してきて7年目。今の場所に住み始めてもうすぐ丸3年。
毎年、見てきましたが雨というのは初めてです。

自宅の近所の江戸川河川敷まで歩いていき、そこで遠目に見てきました。


雨という割には、綺麗に見えますね。


写真の下の方に写ってる橋は常磐線の鉄橋です(金町-松戸間の所ですね)。

この時間に電車に乗ると、見えるかもしれないです。その近くを国道6号線が走っているのですが、なんか自動車がゆっくりと走っているように見えました。きっと花火を見ているのでしょう。


・・・最早、花火ではないですね。
火事です。爆発です(笑)。

さすがに連発すると、その煙?で周りが曇ってしまい、綺麗に見えませんでした。
風向きや天気の影響もあるのでしょう。


来年は、晴れて欲しいなと思った夜でした。