Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[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のほうで詳しい資料が公開されていますので、まずはこちらをどうぞ。

まとめると以下のような感じです。忘れてしまったら、これを見ればすぐ思い出せると思います。

プロパティ - ID

# 説明
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
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
読み込み中...

トラックバック

トラックバックはありません

コメント

すばらしい、このような知識はどこで勉強できますか?

雷さん、コメントありがとうございます! 😀

わたしがよく参照しているのは、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/

基本的なところをおさえておけば、あとは独学でなんとかなると思います。
この連載が、少しでもお役に立てれば幸いです。

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 2569 to the field below:

^
×