久々に LotusScript ネタです。このネタは前からあったのですが、整理していたら時間が経過しすぎてしまいました。
NSFDbClassGet というファンクションが Notes C API Toolkit で公開されているのですが、このファンクション Notes データベースのクラスを返してくれる便利なファンクションです。
NotesPeek を使えば確認できるのですが、LotusScript アプリケーション上でチェックしたい場合には NSFDbClassGet を直接 Call してしまうのが良いです。
実際に返してくれる値は Integer 型のデータなのですが、Toolkit の中の nsfdb.h を見ると以下のように定義されていることがわかります。
なので、nsfdb.h のマクロを参考にして LotusScript でも NSFDbClassGet の戻り値から DBCLASS_xxx を返すようにしてみました。hDB は NSFDbOpen を直接 Call してあらかじめ取得して....ん?あー、そういえば NSFDbOpen() を Call するサンプルってまだやってなかったですね。最後にサンプル書いておくので、それを参考にしてくださいです。後日あらためて NSFDbOpen と NSFDbClose だけについても記事書きます。
実際に使う場合は (Declarations) に以下の3行を追加して、Initialize イベントなどで以下のように Call してみてください。ちなみにこのサンプルは Notes 6 (W32) を前提にしているので、R5 の場合などは path を desktop5.dsk のように変更してください。尚、このサンプルを実行してなんらかの障害が出たとしても当方、一切責任は負えませんのでその点もあらかじめご了承ください。
NSFDbClassGet というファンクションが Notes C API Toolkit で公開されているのですが、このファンクション Notes データベースのクラスを返してくれる便利なファンクションです。
NotesPeek を使えば確認できるのですが、LotusScript アプリケーション上でチェックしたい場合には NSFDbClassGet を直接 Call してしまうのが良いです。
実際に返してくれる値は Integer 型のデータなのですが、Toolkit の中の nsfdb.h を見ると以下のように定義されていることがわかります。
#define DBCLASS_NOTEFILE 0xff01
なので、nsfdb.h のマクロを参考にして LotusScript でも NSFDbClassGet の戻り値から DBCLASS_xxx を返すようにしてみました。hDB は NSFDbOpen を直接 Call してあらかじめ取得して....ん?あー、そういえば NSFDbOpen() を Call するサンプルってまだやってなかったですね。最後にサンプル書いておくので、それを参考にしてくださいです。後日あらためて NSFDbOpen と NSFDbClose だけについても記事書きます。
Function SxGetDbClassID(hDB As Integer) As Integer
Dim retClass As Integer
Call NSFDbClassGet(hDB, retClass)
SxGetDbClassID = retClass
End Function
Function SxGetDbClassName(dbClassId As Integer) As String
Const DBCLASS_VALID_MASK = &HFF00
Select Case dbClassId Xor DBCLASS_VALID_MASK
Case 0: SxGetDbClassName = "DBCLASS_NSFTESTFILE"
Case 1: SxGetDbClassName = "DBCLASS_NOTEFILE"
Case 2: SxGetDbClassName = "DBCLASS_DESKTOP"
Case 3: SxGetDbClassName = "DBCLASS_NOTECLIPBOARD"
Case 4: SxGetDbClassName = "DBCLASS_TEMPLATEFILE"
Case 5: SxGetDbClassName = "DBCLASS_GIANTNOTEFILE"
Case 6: SxGetDbClassName = "DBCLASS_HUGENOTEFILE"
Case 7: SxGetDbClassName = "DBCLASS_ONEDOCFILE"
Case 8: SxGetDbClassName = "DBCLASS_V2NOTEFILE"
Case 9: SxGetDbClassName = "DBCLASS_ENCAPSMAILFILE"
Case 10: SxGetDbClassName = "DBCLASS_LRGENCAPSMAILFILE"
Case 11: SxGetDbClassName = "DBCLASS_V3NOTEFILE"
Case 12: SxGetDbClassName = "DBCLASS_OBJSTORE"
Case 13: SxGetDbClassName = "DBCLASS_V3ONEDOCFILE"
Case 14: SxGetDbClassName = "DBCLASS_V4NOTEFILE"
Case 15: SxGetDbClassName = "DBCLASS_V5NOTEFILE"
Case 16: SxGetDbClassName = "DBCLASS_V6NOTEFILE"
Case Else: SxGetDbClassName = "DBCLASS_UNKNOWN"
End Select
End Function
実際に使う場合は (Declarations) に以下の3行を追加して、Initialize イベントなどで以下のように Call してみてください。ちなみにこのサンプルは Notes 6 (W32) を前提にしているので、R5 の場合などは path を desktop5.dsk のように変更してください。尚、このサンプルを実行してなんらかの障害が出たとしても当方、一切責任は負えませんのでその点もあらかじめご了承ください。
Declare Function NSFDbOpen Lib "nnotes" (Byval PathName As String, rethDB As Integer) As Integer
Declare Function NSFDbClose Lib "nnotes" (Byval hDB As Integer) As Integer
Declare Function NSFDbClassGet Lib "nnotes" (Byval hDB As Integer, retClass As Integer) As Integer
Sub Initialize
Dim path As String
path = "desktop6.ndk"
Dim ret As Long
Dim hDB As Integer
Dim dbClassID As Integer
Dim dbClassName As String
ret = NSFDbOpen(path, hDB)
If ret = 0 Then
dbClassID = SxGetDbClassID(hDB)
dbClassName = SxGetDbClassName(dbClassID)
ret = NSFDbClose(hDB)
Msgbox "DBCLASS NAME:" & Chr(9) & dbClassName,,"Lotus Notes"
End If
End Sub