NotesとQtでWindows、Mac OS X、Ubuntuのデスクトップアプリ(その7 - データベース・基本編)
Notesデータベースは、Note(文書)の集合体です。文書はアイテムの集合体で、アイテムの中でもリッチテキストアイテムはコンポジットデータの集合体です。Notesデータにアクセスするには、何はなくともデータベースにアクセスする必要があります。データベースにアクセスするには、データベースハンドル(DBHANDLE型)を取得する必要があります。
Notesデータベースのハンドルを取得する基本は、パスを使った方法です。Notesのフルパス(以下、ネットパス)は、Notesポート、サーバ名、ファイルパスの3つから構成されます。Notesポートは、TCP/IP以外に思いつかない現在では、ポートを意識することはほとんどないですが、AppleTalkやNetWare(IPX/SPX)、モデムを使った通信など、ネットワークプロトコルがいくつもあった時代の名残と言えるでしょう。おそらく今は、Notesポートはデフォルト(指定なし)で済むはずです。サーバ名はDominoサーバ名を指定するか、指定なし(=ローカル)とします。ファイルパスは、データディレクトリからの相対パスを指定することになります。ローカルであれば、フルパスも指定できます。これら3つの要素を組み合わせて、一つのテキストとして表されるのがネットパスです。
ネットパス自体は、文字列を特定の区切り文字でつなげればいいのですが、仕様が変更されることもありますし、移植性の観点からも、API関数を通じて作成した方が無難です。
ネットパスを作るには、OSPathNetConstructという関数を使います。逆に、できあがっているネットパスを3要素に分解するのがOSPathNetParse関数です。
STATUS LNPUBLIC OSPathNetConstruct (const char far *PortName, const char far *ServerName, const char far *FileName, char far *retPathName); STATUS LNPUBLIC OSPathNetParse (const char far *PathName, char far *retPortName, char far *retServerName, char far *retFileName);
Notesデータベースを、ネットパスを使ってオープンし、ハンドルを得るのがNSFDbOpen関数です。データベースへのアクセスを終了する場合はNSFDbClose関数を使います。
STATUS LNPUBLIC NSFDbOpen (const char far *PathName, DBHANDLE far *rethDB); STATUS LNPUBLIC NSFDbClose (DBHANDLE hDB);
最後にNotesデータベースの基本情報についてです。Notesデータベースの情報バッファは1つの文字列、128バイトで構成されます。データベースタイトルはこの中の1つで、ほかにカテゴリ、クラス(引き継ぎ元テンプレート名)、設計クラス(マスターテンプレート名)も、この128バイト中に共存します。4つとも設定すると、平均32バイト、日本語の全角LMBCSで設定すると、1つあたり全角10文字程度しか設定できません。何とも窮屈なデータです。
タイトルを含む4つの基本情報を取得するには、NSFDbInfoGet関数を使います。長さはNSF_INFO_SIZEとして定義されているので、バッファを用意して取得すればOKです。
取得したい基本情報から、目的のデータ(例えばタイトル)を取り出したい時はNSFDbInfoParse関数を使います。データの種類はINFOPARSE_XXXとして定義されています。バッファサイズはNSF_INFO_SIZEを用意すればいいでしょう。必ずしも全体の4分の一とは限らないですし。
基本情報を変更する場合は、先の2つに加えて、NSFDbInfoModifyとNSFDbInfoSetを使いますが、詳しくは折を見て説明したいと思います。
STATUS LNPUBLIC NSFDbInfoGet (DBHANDLE hDB, char far *retBuffer); void LNPUBLIC NSFDbInfoParse(char far *Info, WORD What, char far *Buffer, WORD Length); #define INFOPARSE_TITLE 0 #define INFOPARSE_CATEGORIES 1 #define INFOPARSE_CLASS 2 #define INFOPARSE_DESIGN_CLASS 3 void LNPUBLIC NSFDbInfoModify(char far *Info, WORD What, const char far *Buffer); STATUS LNPUBLIC NSFDbInfoSet (DBHANDLE hDB, char far *Buffer);
ここまでの関数を踏まえて、Notesデータベースクラスを定義していきましょう。