[Notes/Domino] 設計解析講座: ノートヘッダ
今回でやっとノートのところに入ります。毎度更新が遅くてスミマセン(_ _;;
ノートの構造
ノートの構造は、ノートヘッダとアイテムに大別されます。アイテムはさらにヘッダ情報と値で構成されています。(アイテムについては後日詳述します。)
以下のページに図がありますので、これを見るとイメージしやすいと思います。
The Parts of a Domino Database
ノートヘッダの値の取得
ノートヘッダから値を取得するには、NSFNoteGetInfo 関数を使います。実はこの関数は、この連載中ですでに登場していて、「ノートクラスと $Flags」の回でノートクラスを取得しているところで使っています。
NSFNoteGetInfo が便利なのは、上述のノートクラスを除くと、追加日(下図参照)が取得できるのと、DBハンドルを取得できることでしょうか。LotusScript から呼ぶ場合は、これ以外はあまり使わないと思います。
それぞれサンプルを示します。
<追加日の取得>
Public Const NOTEINFO_NOTE_DB = 0 Public Const NOTEINFO_NOTE_ID = 1 Public Const NOTEINFO_NOTE_OID = 2 Public Const NOTEINFO_NOTE_CLASS = 3 Public Const NOTEINFO_NOTE_MODIFIED = 4 Public Const NOTEINFO_NOTE_PRIVILEGES = 5 Public Const NOTEINFO_NOTE_FLAGS = 7 Public Const NOTEINFO_NOTE_ACCESSED = 8 Public Const NOTEINFO_NOTE_PARENT_NOTEID = 10 Public Const NOTEINFO_NOTE_RESPONSE_COUNT = 11 Public Const NOTEINFO_NOTE_RESPONSES = 12 Public Const NOTEINFO_NOTE_ADDED_TO_FILE = 13 Public Const NOTEINFO_NOTE_OBJSTORE_DB = 14 Public Const NOTESDLL = "nnotes.dll" Type TIMEDATE Innards(1) As Long End Type Declare Sub NSFNoteGetInfo Lib NOTESDLL (Byval hNote As Long, _ Byval wNoteMember As Integer, pValue As Any) Declare Function ConvertTIMEDATEToText Lib NOTESDLL (Byval IntlFormat As Integer, _ Byval TimeFormat As Integer, InputTime As TIMEDATE, Byval retTextBuffer As String, _ Byval TextBufferLength As Integer, retTextLength As Integer) As Integer Sub Initialize Dim ss As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim td As TIMEDATE Set db = ss.CurrentDatabase Set doc = db.GetDocumentByID("{適当なノートIDを入力してください}") Call NSFNoteGetInfo(doc.handle, NOTEINFO_NOTE_ADDED_TO_FILE, td) Msgbox APITIMEDATE2String(td) End Sub Function APITIMEDATE2String(td As TIMEDATE) As String Dim s As String * 81 Dim i As Integer Call ConvertTIMEDATEToText(0, 0, td, s, 80, i) APITIMEDATE2String = Strleft(s & Chr(0), Chr(0)) End Function
<DBハンドルの取得>
(※上記例とほぼ同じなので、超省略(^^; )
Dim hDb As Long Call NSFNoteGetInfo(doc.handle, NOTEINFO_NOTE_DB, hDb)
(参考)IDの仕組み
ノートヘッダには OID (Originator ID)が入っていますので、ついでにIDの仕組みについて記載しておきます。
まあ、私が説明するまでもなく、IBMのほうで詳しい資料が公開されていますので、まずはこちらをどうぞ。
まとめると以下のような感じです。忘れてしまったら、これを見ればすぐ思い出せると思います。
# | 略 | 説明 |
---|---|---|
1 | OF | ランダムな値(TIMEDATE) |
2 | ON | ノートの作成日時(TIMEDATE) |
3 | SD | ノートの更新日時(TIMEDATE) |
4 | SN | 保存された回数(バージョン) |
5 | DB | DBのレプリカID(TIMEDATE) |
6 | NT | ノートID(DB内での連番。レプリカごとに値は異なる) |
- OID (Originator ID) = OF + ON + SD + SN
- UNID (Universal ID) = OF + ON
- GNID (Global Note ID) = DB + NT
- NID (Note ID) = NT
- IID (Instance ID) = SD + NT
- GIID (Global Instance ID) = SD + DB + NT
- ※ TIMEDATE 構造体については、以前のエントリを参照してください。
コメント
すばらしい、このような知識はどこで勉強できますか?
Posted at 2011/05/15 5:31 PM by 雷
雷さん、コメントありがとうございます! 😀
わたしがよく参照しているのは、IBMのAPIドキュメントです(ベタですが)。
https://www.ibm.com/developerworks/lotus/documentation/capi/
わからないところは、フォーラムで検索すればたいがい見つかります。
http://www.ibm.com/developerworks/lotus/community/
あとは、Toolkit のヘッダファイルですかね。
https://www.ibm.com/developerworks/lotus/documentation/capi/
基本的なところをおさえておけば、あとは独学でなんとかなると思います。
この連載が、少しでもお役に立てれば幸いです。
Posted at 2011/05/15 10:13 PM by takenoff
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。