[Notes/Domino] 設計解析講座: データベースプロパティとアイコン(3)
気づいたら前回から1ヶ月以上経ってた……orz
もはや誰も見てないかもしれませんが、自分のメモのために更新。
詳細オプションの取得
DBの詳細オプションは、NotesDatabase.GetOption で取れますが、以下の問題があります。
- バージョンによっては一部取れないオプションがある(最新のオプションへの対応が遅い)
- 複数のDBに対して連続して実行すると、メモリリークを起こす場合がある(R6 で発生することを確認。最新バージョンでは直っているのかな??)
API で詳細オプションを取得するには、NSFDbGetOptionsExt を使用します。以下にサンプルを掲載します。
(※ NSFDbGetOptionsExt はドキュメントに無い関数です。その点ご留意ください。
また、下記では個人アドレス帳からデータを取得する処理になっているので、DB_SVR、DB_PATH 定数の値を適当に変更して試してください。)
Public Const MAXPATH = 256 Public Const WORDLEN = 65534 Public Const OS_TRANSLATE_NATIVE_TO_LMBCS = 0 Public Const OS_TRANSLATE_LMBCS_TO_NATIVE = 1 Public Type DBOPTIONSEXT Options As Long Options1 As Long Options2 As Long Options3 As Long End Type Public Const NOTESDLL = "nnotes.dll" Declare Function NSFDbOpen Lib NOTESDLL (ByVal PathName As String, rethDB As Long) As Integer Declare Function NSFDbGetOptionsExt Lib NOTESDLL (ByVal hDB As Integer, _ retDbOptions As DBOPTIONSEXT) As Integer Declare Function NSFDbClose Lib NOTESDLL (ByVal hDB As Long) As Integer Declare Function OSLoadString Lib NOTESDLL (ByVal hModule As Long, ByVal StringCode As Long, _ ByVal retBuffer As String, ByVal BufferLength As Integer) As Integer Declare Function OSPathNetConstruct Lib NOTESDLL (ByVal PortName As Long, ByVal ServerName As String, _ ByVal FileName As String, ByVal retPathName As String) As Integer Declare Function OSTranslate Lib NOTESDLL (ByVal TranslateMode As Integer, ByVal InData As String, _ ByVal InLength As Long, ByVal OutData As String, ByVal OutLength As Long) As Integer Sub Initialize Const DB_SVR = "" Const DB_PATH = "names.nsf" Dim strPath As String Dim hDb As Long Dim intRet As Integer Dim options As DBOPTIONSEXT strPath = Space$(MAXPATH) Call OSPathNetConstruct(ByVal &h0, DB_SVR, DB_PATH, strPath) intRet = NSFDbOpen(APITranslate(OS_TRANSLATE_NATIVE_TO_LMBCS, strPath), hDb) If intRet <> 0 Then MsgBox APIGetError(intRet), 0, "エラー" Exit Sub End If intRet = NSFDbGetOptionsExt(hDb, options) If intRet <> 0 Then MsgBox APIGetError(intRet), 0, "エラー" Call NSFDbClose(hDb) Exit Sub End If If (options.Options1 And &H00000020&) = &H00000020& Then MsgBox "未読マークを使用しない" Else If (options.Options2 And &H00000040&) = &H00000040& Then If (options.Options2 And &H00000080&) = &H00000080& Then MsgBox "未読マークを複製する(すべてのサーバー)" Else MsgBox "未読マークを複製する(クラスタサーバーのみ)" End If End If End If If (options.Options1 And &H00000800&) = &H00000800& Then MsgBox "文書テーブルマップの最適化" End If If (options.Options1 And &H00000010&) = &H00000010& Then MsgBox "空きスペースに上書きしない" End If If (options.Options1 And &H00001000&) = &H00001000& Then MsgBox "LastAccessed プロパティを保持" End If If (options.Options1 And &H00002000&) = &H00002000& Then MsgBox "トランザクションログを無効" End If If (options.Options1 And &H00000080&) = &H00000080& Then MsgBox "文書の階層情報を使用しない" End If If (options.Options2 And &H00000002&) = &H00000002& Then MsgBox "添付ファイルの圧縮形式として LZ1 を使用" End If If (options.Options1 And &H00004000&) = &H00004000& Then MsgBox "ヘッドラインモニターを許可しない" End If If (options.Options1 And &H00400000&) = &H00400000& Then MsgBox "データベースで多くのフィールドを許可" End If If (options.Options2 And &H00000800&) = &H00000800& Then MsgBox "返答スレッド履歴をサポート" End If If (options.Options2 And &H00001000&) = &H00001000& Then MsgBox "簡易検索を許可しない" End If If (options.Options2 And &H00010000&) = &H00010000& Then MsgBox "データベース設計の圧縮" End If If (options.Options2 And &H00040000&) = &H00040000& Then MsgBox "文書データの圧縮" End If If (options.Options2 And &H00080000&) = &H00080000& Then MsgBox "ビューの自動更新を無効にする" End If If (options.Options1 And &H00020000&) = &H00020000& Then MsgBox "一時削除を許可" End If Call NSFDbClose(hDb) End Sub Public Function APITranslate(ByVal intMode As Integer, ByVal strBuf As String) As String Dim strOut As String strOut = Space$(WORDLEN) Call OSTranslate(intMode , strBuf, LenBP(strBuf) - 1, strOut, WORDLEN - 1) APITranslate = StrLeft(strOut & Chr(0), Chr(0)) End Function Public Function APIGetError(ByVal intErrCode As Integer) As String Dim strIn As String Dim strOut As String Dim intCode As Integer strIn = Space$(255) strOut = Space$(255) intCode = intErrCode And &h3FFF Call OSLoadString(0, intCode, strIn, LenBP(strIn) - 1) strOut = APITranslate(OS_TRANSLATE_LMBCS_TO_NATIVE, strIn) APIGetError = Trim(strOut) End Function
※ 「ビューのデータの書き出しを無効にする」オプションは、どうやら NSFDbGetOptionsExt でも取得できないみたいです。アイコンのほうの $DisableExport が "1" かどうかで判断してください。同様に数値関係の値もアイコンから取ってください。アイコンについては、前々回のエントリを参照してください。
詳細オプションの設定
詳細オプションの設定には、同様に NSFDbSetOptionsExt を使用します。以下、「簡易検索を許可しない」オプションを有効にするサンプルを掲載します。
(※ NSFDbSetOptionsExt はドキュメントに無い関数です。その点ご留意ください。
また、下記では個人アドレス帳にデータを設定する処理になっているので、DB_SVR、DB_PATH 定数の値を適当に変更して試してください。)
Public Const MAXPATH = 256 Public Const WORDLEN = 65534 Public Const OS_TRANSLATE_NATIVE_TO_LMBCS = 0 Public Const OS_TRANSLATE_LMBCS_TO_NATIVE = 1 Public Type DBOPTIONSEXT Options As Long Options1 As Long Options2 As Long Options3 As Long End Type Public Const NOTESDLL = "nnotes.dll" Declare Function NSFDbOpen Lib NOTESDLL (ByVal PathName As String, rethDB As Long) As Integer Declare Function NSFDbSetOptionsExt Lib NOTESDLL (ByVal hDB As Integer, _ DbOptions As DBOPTIONSEXT, Mask As DBOPTIONSEXT) As Integer Declare Function NSFDbClose Lib NOTESDLL (ByVal hDB As Long) As Integer Declare Function OSLoadString Lib NOTESDLL (ByVal hModule As Long, ByVal StringCode As Long, _ ByVal retBuffer As String, ByVal BufferLength As Integer) As Integer Declare Function OSPathNetConstruct Lib NOTESDLL (ByVal PortName As Long, ByVal ServerName As String, _ ByVal FileName As String, ByVal retPathName As String) As Integer Declare Function OSTranslate Lib NOTESDLL (ByVal TranslateMode As Integer, ByVal InData As String, _ ByVal InLength As Long, ByVal OutData As String, ByVal OutLength As Long) As Integer Sub Initialize Const DB_SVR = "" Const DB_PATH = "names.nsf" Dim strPath As String Dim hDb As Long Dim intRet As Integer Dim options As DBOPTIONSEXT strPath = Space$(MAXPATH) Call OSPathNetConstruct(ByVal &h0, DB_SVR, DB_PATH, strPath) intRet = NSFDbOpen(APITranslate(OS_TRANSLATE_LMBCS_TO_NATIVE, strPath), hDb) If intRet <> 0 Then MsgBox APIGetError(intRet), 0, "エラー" Exit Sub End If options.Options2 = &H00001000& '簡易検索を許可しない intRet = NSFDbSetOptionsExt(hDb, options, options) If intRet <> 0 Then MsgBox APIGetError(intRet), 0, "エラー" Call NSFDbClose(hDb) Exit Sub End If Call NSFDbClose(hDb) End Sub 'APITranslate、APIGetError は省略
NSFDbSetOptionsExt の3番目の引数(Mask)は、設定するビットを限定するためのものです。これによって特定ビットのみを書き換えることができます。まあ通常は第2引数と同じ値を設定しておく、と思ってください。
「データベースプロパティとアイコン」の解説は、とりあえずここまで。足りないところはあるかと思いますが、ご容赦くださいませ(_ _;;
ニーズが高いと思われる「データベースの使用状況」については、別エントリで解説するかもしれません。しないかもしれないけど(汗
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。