小技/小ネタ:@Text( DateTimeValue ; "*") ?
@Text( DateTimeValue ; "*")
と書かれても何のことか?と思われる人もいるでしょう。
これは、所謂、Notes/Dominoで隠されている関数のパラメーターです。
Notes/Dominoの中には、開発上内部で利用しているが、Helpなどには記載されていない関数というのが存在します。
ここでそのような物を紹介して良いのか?と言われるかも知れませんが、日本のNotes関係のMailing Listでも出回っていましたし、ここでLinkしているNotes411とかでも過去に紹介されていたのではないかと思いますので、皆さんもご存知のことだと思います。
こういった隠し関数とか機能は、Mail Templateを解析していると発見することが多いのも事実で、Mail TemplateというのはNotes/Dominoの機能をフル活用して作成されているのです。
というより、Mailの機能を実現したり、Notesの機能を実現するために開発者がこういった関数を作っているというのが正しいかも知れません。
話を元に戻して、この式の意味ですが、これは例えば、文書にボタンを定義して、その式に以下のように書いてみると分かるでしょう。
@Prompt([Ok] ; "現在の日時のNotesの16進数表現" ; @Text(@Now ; "*"))
返されるのは、16進数のある値ですが、これを見て皆さんは何を思われるでしょうか?
これは、DBのReplicaIDであったり、文書のUNIDであったり、要するにNotes/DominoでDBや文書を特定している重要なIDと同じものです。
このような隠し関数があることはどうでもいい訳ですが、このLogicを使ってReplicaIDやUNIDが生成されているということを知ることも重要かも知れません。
Notes/DominoではこのReplicaIDやUNIDというのが非常に重要で、これによって相手が同じもののReplicaであるという判断をしているのです。
そういう意味では、Notes/Dominoを動かすServerやClientの時間をいたずらに変更すべきではありません。
時間を利用して成り立っているのがNotes/Dominoですから、時間を変更することはDBを壊してしまうことにもつながりかねないのです。
話が少し逸れてしまいました。
このReplicaIDやUNIDですが、それは上の式で試したように単に時間なのです。
皆さんも日本でDBを作成すると、ReplicaIDは"4925...."というようになることはご存知でしょうし、USのTemplateとかを見ると、"8525....."となっていることも分かります。
つまり、最初はDBを作成した国によって固定的なのです。
これは、以下のTechnoteを参照するとわかります。
Lotus Software Knowledge Base Document
Title: How To Interpret the Hexadecimal Values in a Time/Date Value
Doc #: 7003019
URL: http://www.ibm.com/support/docview.wss?rs=899&uid=swg27003019
このTechnoteに書かれているように、最初の2桁はGMTからLocal TimeへのズレとDST(Day Light Saving)を示しているわけであり、DBを作成した国によって一定になるのです。
Technoteの記述から"49"で始まる場合は、日本の東京時間を示していることになる訳です。
これを知っていてどうなのか?ということは無いのですが、こういうことも知っていると、Notes/Dominoにとってどれだけ時間ということが重要であるか?をご理解頂けるのではないかと思います。
一気にUser登録をしたいといった要望から、Toolなどを使って複数のServerでUser登録を行うといったこともあるかも知れません。
その際、Mail DBを生成させると、偶然にも同じReplicaID(時間)のDBもできることもありうる訳です。
Notes/DominoはReplicaIDでDBが同じであるかどうかを判断していて、同一Server上に同一ReplicaIDのDBがあるとReplicationなどで思わぬ動きをしてしまいますが、これは皆さんもご存知のことでしょう。
時間が命のNotes/Dominoだということを、今一度肝に銘じておくべきかも知れません。