見出し画像

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クライアントで開くことができず、以下のようなメッセージが表示されます。

スクリーンショット 2021-07-24 15.20.03

では、ビューをAPIで一から作ればいいかというと、これがなかなかの労力なので、よほどのことがない限り、テンプレートDBを用意しておいて、そこから新規作成する方が効率的です。

注意: コードの利用においてチブル・システムズは一切の責任を負いません。自己責任でご利用をお願いいたします。

いいなと思ったら応援しよう!