当前位置:编程文档 >> VC++ >> 通过VC++和Web访问Notes数据库
首页

通过VC++和Web访问Notes数据库

所属类别:VC++
推荐指数:★★★★
文档人气:32
本周人气:6
发布日期:2008-8-15


1. 开发平台、工具以及环境说明:
采用Lotus Domino/Notes C++ API Release 2.0 for PC软件包,
操作系统为Window98,VC++为6.0企业版,Lotus Domino/Notes为4.6中文版。
2. 软件包的安装以及批处理文件的修改:
Notes API软件包为一个ZIP压缩文件,可以直接解压后使用。现在假定该软件包解压至D:\Notes\Cppapi.

在Cppapi下共有五个子目录,VC++下开发时将用到Include和Lib两个子目录。Include 子目录中存放了C++ API的头文件,Lib中有多个存放开发时使用的静态和动态链接库的子目录,开发人员要根据自己的开发平台选择不同的子目录,这里我们选择MSWIN32子目录,也就是使用微软的WIN32平台下的库函数。接下来,要修改C:\Autoexec.bat中的PATH,让它能够指向D:\Notes\Cppapi\Lib\MSWIN32,因为开发出来的应用程序要使用该目录下的lcppn20.dll(该动态链接库名称表示它是Lotus Notes C++ API 2.0版的动态链接库)。
3. VC++编译选项和环境设置:
* 在Project Settings | C/C++中的Preprocessor definitions添加W32,表示使用的是WIN32平台;
* 在Project Settings | Link 中的Object/library modules中加入Notescpp.lib,该静态库包含了API函数头文件中定义的类、数据结构和函数的实现。
* 在Options | Directories中的Include Files的搜索路径中加入D:\Notes\Cppapi\Include,Library的搜索路径中加入D:\Notes\Cppapi\Lib。需要特别注意的是,由于Notes API函数的头文件定义比较详细,与VC++的头文件定义有冲突的地方,因此要把这两个路径放在搜索路径的第一个,否则编译时会出现链接错误。
* 在需要使用Notes API头文件的地方包含头文件lncppapi.h即可。它是所有头文件的最高级,通过它可以使用所有Notes API头文件中定义的类、数据结构和函数。
4. 访问Notes数据库的步骤:
* 建立LNNotesSession对象,通过该会话对象的初始化来建立和Domino服务器的连接。
* 建立LNDatabase对象,用来存储通过LNNotesSession::GetDatabase函数获取的数据库对象。
* 定义文档数组对象,打开数据库对象,获取该数据库中的文档数组。
* 编辑:定义文档对象,从数据库文档数组中获取需要的文档;打开文档,进行编辑操作;存储文档;关闭文档
* 删除:定义文档对象,从数据库文档数组中获取需要的文档;调用数据库对象的DeleteDocument函数来删除该文档
* 增加:定义文档对象,从调用数据库对象的CreateDocument函数获取新创建的文档对象;调用文档对象的CreateItem函数创建文档域;存储文档;关闭文档
* 关闭数据库对象。
* 关闭会话对象。
5. 注意事项:
* 打开数据库对象或存取文档时,Notes会索取用户身份验证。目前Notes C++ API没有提供可以隐式给出身份验证而避免多次显式询问,除非使用Notes C API。
* Notes API的出错处理比较差,因此对于Note数据库的相关操作最好放入try语句,而通过catch语句来处理出错情况。注意,要在try语句前加入LNSetThrowAllErrors(TRUE),即让Notes扔出所有操作异常,以便处理。
* 对Notes数据库的访问结束后,应该调用LNNotesSession::Term函数来结束会话。如果没有调用,将会引起严重的内存泄漏。
* 虽然可以在应用程序的一开始就建立与Notes数据库的会话,在应用程序结束时关闭会话,但我们不提倡采用这种方法。因为出于自身强大安全性的需要,Domino服务器对数据库的访问操作会采取很多实时的附加操作,因此长时间占用资源是非常不好的行为,甚至如果采取这种方法的用户数量较多,会造成Domino服务器的崩溃。
* 开发时,尽量使每一次对Notes数据库的访问获得的数据得到最大的利用,把可以在客户端完成的事情尽量在客户端完成,例如:常用数据在客户端的存储,对用户某项越权操作的否定等等。
* 在执行任何对Notes数据库的操作之前,必需保证已经建立了合法的会话,即成功地调用了LNNotesSession::Init函数和IsNotesInitialized函数。如果采用了多线程,则所有辅助线程在对Notes数据库进行操作前,必须调用LNNotesSession::InitThread函数;在调用LNNotesSession::Term函数前,辅助线程必须调用LNNotesSession::TermThread函数。
6. 简单范例
目的:
 依据用户给出数据库名称,返回给该数据库的标题。
代码:
 #include "lncppapi.h"
 LNNotesSession session;
 LNDatabase  db;
 LNStatus  status;
 LNString  dbname;
 LNString  dbtitle;

 dbname = 用户给出的数据库名称;

 LNSetThrowAllErrors(TRUE);

 try
{
 if (status = session.Init())
 throw status;
if (!IsNotesInitialized())
throw "Cannot initialize Notes";
if (!&session)
 throw "Error Session";

if (status = session.GetDatabase(dbname, &db, Domino服务器的名称))
throw status;

dbtitle = db.GetTitle();
AfxMessageBox((CString)dbtitle);

}
catch (LNStatus err)
{
 char ErrorBuf[LNERROR_MESSAGE_LENGTH];
LNGetErrorMessage(err, ErrorBuf);
 AfxMessageBox(ErrorBuf):
}
catch (char* pErrorMessage)
{
 AfxMessageBox(pErrorMessage);
}

session.Term;


二、 通过Web访问Notes数据库
1. 服务器设置
Domino服务器必须配置了HTTP服务器,并且在服务器启动时同时启动HTTP服务器。要想在Domino服务器启动时启动HTTP服务器,可以通过修改Winnt目录下的Notes.ini文件来实现。打开Notes.ini文件,其中有一行为“Service=...”,在它的最后添加HTTP,存盘后重新启动Domino服务器即可。
2. 典型的Domino服务器的HTTP服务过程
当有Web用户访问Domino服务器时,如果用户想访问的是标准HTML文件,Domino服务器将按典型的Web服务器的方式把HTML文件发送给Web浏览器;如果用户想要访问某个Notes数据库,Domino服务器将首先查找该数据库的ACL(访问权限列表),然后根据查询结果把数据库的内容递交Domino引擎进行处理,最后发送给用户用浏览器可以识别的HTML流,这样用户就可以看见该数据库的内容,包括:视图、文件夹等等。
3. 开发Notes数据库的Web应用程序的途径
* 采用HTML文件和CGI脚本的结合。Notes数据库内容基本不对用户开放(当然必要时也可以直接访问Notes数据库),而是通过标准的HTML文件和CGI脚本来实现对Notes数据库的操作。这种方法的技术基础是可以在CGI脚本中使用Notes API来访问Notes数据库,类似于在VC++下访问Notes数据库。这种方法的优点是设计和规划比较简单,可以采用很多HTML技术,产生富有激情、创造力、能吸引人的界面,Web应用程序可以与Domino服务器分离。缺点是开发过程非常复杂,不易维护。
* 采用Notes提供的Web应用程序开发的技术,包括导航器、文本搜索、在表单中嵌入HTML文本等等。Notes应用程序开发中的设计元素同时也支持通过Web来访问,有些设计元素在设计时还可以加入HTML代码。这种方法的优点是可以使用很多Notes提供的数据库操作技术,例如:执行代理,公式,操作等等,甚至使用与Notes客户相同的代码段,从而减小了开发工作量。缺点是界面不够吸引人,由于Notes用户和Web用户要共享数据库,从而对应用程序的设计的要求很高,要求非常细致地设计两种用户将要面对的界面,精确地定义设计元素面向的对象。另外Notes客户可以使用的很多操作在Web用户面前是不可见的或是无效的,因此在实现很多操作时要同时考虑两种用户的需求。
* 采用分层技术,同时提供对HTML文件和Notes数据库的直接访问。分层技术指的是把主要用来提供门面的HTML文件放在上层,让用户一开始就可以看见;把Notes数据库放在底层,用户可以通过HTML文件中的超链接来访问Notes数据库。这种方法同样需要考虑Notes和Web两种用户,但是比前一种方法要好得多。因此在开发大多数的基于Notes的Web应用程序都采用这种方法。
4. 不支持Web的Notes操作。
参见文档<<从Notes数据库过渡到Web>>。
5. 简单范例
目的:
让Web用户先看见欢迎画面,然后引导用户打开工作通知文档
步骤:
* 建立主页数据库home.nsf。
* 设置HTTP服务器属性,在主页URL中输入/home.nsf?OpenDatabase,表示一旦有Web用户访问Domino服务器,就会打开主页数据库。设置允许浏览数据库为“是”。
* 在主页数据库中创建导航器,在导航器中加入需要的内容,并创建一个链接指向工作通知文档

 

文档说明:

     

相关文档


读取评论列表……