Notes C API探訪: NSFDbCreate(関数)
Notes/Dominoのデータベースを一から作ることは、開発する人を除けばほとんどいないでしょう。Dominoデザイナーでよくデータベースを開発する人であっても、実は無名のビューが備わっていることは、意識しないとわからないかもしれません。「完全に空のデータベース」を作るには、NSFDbCreate関数を使えばできます。
NSFDbCreate
NSFDbCreate関数は、完全に空のデータベースを作成します。
#include <nsfdb.h>
STATUS LNPUBLIC NSFDbCreate (
const char far *PathName,
USHORT DbClass,
BOOL ForceCreation);
PathNameは、OSPathNetConstructで作成したパスを指定します。
DbClassは、作成するデータベースの種類を指定します。
ForceCreationは、PathNameで指定したパスに、すでにファイルが存在した場合、強制的に上書きするかを指定します。
なお、この関数でデータベースを作成しても、ハンドルはオープンされません。データベースにアクセスするには、改めてNSFDbOpenなどで開く必要があります。
DBCLASS_***
DbClassで指定できる種類には、以下の定数を使用します。
#include <nsfdb.h>
/* Define NSF DB Classes - These all begin with 0xf000 for no good
reason other than to ENSURE that callers of NSFDbCreate call the
routine with valid parameters, since in earlier versions of NSF
the argument to the call was typically 0. */
#define DBCLASS_BY_EXTENSION 0 /* automatically figure it out */
#define DBCLASS_NSFTESTFILE 0xff00
#define DBCLASS_NOTEFILE 0xff01
#define DBCLASS_DESKTOP 0xff02
#define DBCLASS_NOTECLIPBOARD 0xff03
#define DBCLASS_TEMPLATEFILE 0xff04
#define DBCLASS_GIANTNOTEFILE 0xff05
#define DBCLASS_HUGENOTEFILE 0xff06
#define DBCLASS_ONEDOCFILE 0xff07 /* Not a mail message */
#define DBCLASS_V2NOTEFILE 0xff08
#define DBCLASS_ENCAPSMAILFILE 0xff09 /* Specifically used by alt mail */
#define DBCLASS_LRGENCAPSMAILFILE 0xff0a /* Specifically used by alt mail */
#define DBCLASS_V3NOTEFILE 0xff0b
#define DBCLASS_OBJSTORE 0xff0c /* Object store */
#define DBCLASS_V3ONEDOCFILE 0xff0d
#define DBCLASS_V4NOTEFILE 0xff0e
#define DBCLASS_V5NOTEFILE 0xff0f
#define DBCLASS_V6NOTEFILE 0xff10
#define DBCLASS_V8NOTEFILE 0xff11
#define DBCLASS_V85NOTEFILE 0xff12
#define DBCLASS_MASK 0x00ff
#define DBCLASS_VALID_MASK 0xff00
基本的にはDBCLASS_NOTEFILEを指定すれば標準的なデータベースフォーマットで作成してくれます。Ver.8.5以下の古いODSで作成することも可能なようですね。
サンプルコード
#include <global.h>
#include <nsfdb.h>
#include <osfile.h>
void nsfdbcreateTest() {
char path[MAXPATH] = "";
STATUS status = OSPathNetConstruct(nullptr, "", "hoge.nsf", path);
if (ERR(status) != NOERROR) {
std::cerr << "OSPathNetConstruct error." << std::endl;
return;
}
status = NSFDbCreate(path, DBCLASS_NOTEFILE, FALSE);
if (ERR(status) != NOERROR) {
std::cerr << "NSFDbCreate error." << std::endl;
return;
}
std::cout << "Database 'hoge.nsf' is created." << std::endl;
}
まとめ
実際問題、NSFDbCreate関数を使ってデータベースを作成するより、既存のデータベースやテンプレートからコピーして作成する方が機会としては多いでしょう。なぜなら、ビューが一つもないデータベースは「初期化されていないデータベース」として、Notesクライアントで開くことができず、以下のようなメッセージが表示されます。
では、ビューをAPIで一から作ればいいかというと、これがなかなかの労力なので、よほどのことがない限り、テンプレートDBを用意しておいて、そこから新規作成する方が効率的です。
注意: コードの利用においてチブル・システムズは一切の責任を負いません。自己責任でご利用をお願いいたします。