浅析WEB方式进行Notes新邮件接收
75
2011年5月刊 软件开发与设计信息与电脑 China Computer&Communication
Lotus Domino系统在国内企事业单位办公自动化系统中应用较
为广泛,Domino是比较独特和封闭的非关系数据库管理系统。通过
Notes客户端可以实现安全方便的收发邮件,然而Lotus Notes身身是
一种C/S模式程序,在强调系统安全性的同时,也给系统管理员和用
户带来了诸多安装、管理、使用上的不便。当下邮件、公文系统使用
WEB方式已成事实,本文就ASP开发环境下的Notes新邮件接收作以
浅析,供...
75
2011年5月刊 软件开发与设计信息与电脑 China Computer&Communication
Lotus Domino系统在国内企事业单位办公自动化系统中应用较
为广泛,Domino是比较独特和封闭的非关系数据库管理系统。通过
Notes客户端可以实现安全方便的收发邮件,然而Lotus Notes身身是
一种C/S模式程序,在强调系统安全性的同时,也给系统管理员和用
户带来了诸多安装、管理、使用上的不便。当下邮件、公文系统使用
WEB方式已成事实,本文就ASP开发环境下的Notes新邮件接收作以
浅析,供初学者交流参考。
1. 了解Notes/Domino工具包
我们需要首先了解用何方法从外部获得Domino/Notes系统中的数
据和对象,Lotus提供的接口和工具什么样。我们可以从IBM公司得到
丰富的Notes/Domino的工具包。
• Lotus C API toolkit
• Lotus C++ API toolkit
• Lotus Domino Toolkit for Java/CORBA
• Lotus and Notes Toolkit for COM
• Lotus Domino Driver for JDBC (简称LDDJ)
• NotesSQL
• Lotus XML Toolkit(简称DXL)
• Custom Tag Converion kit(简称DCT)
• LotusScript Extensions toolkit(简称LSX)
在Domino/Notes的Toolkit中,C/C++的功能最为强大,能充分利
用Domino/Notes已有功能,修改数据库设计,并实现Domino/Notes的
能力扩展,对数据的处理能力也最高。从未来Domino技术发展趋势
看,IBM公司在Domino/Notes和J2EE平台的结合方面做了大量工作,
使用Java/CORBA工具包,用户不必安装Notes客户端就可访问Domino
数据库中的绝大部分数据,但Java应用数据处理的速度不快,对Notes
数据对象的操纵能力与C/C++工具相比差距较大。
2. 实现新邮件接收
2.1通过Domino代理写入网关数据库,前台程序比如ASP程序通
过数据库接口访问数据库,从而得到新邮件数目。
2.2通过Toolkit工具统计新邮件数目,其中用CAPI实现功能较为
强大,基本可以操作Notes数据库中所有的数据对象(包括数据库及
ACL、文档和域、
单、视图、文件夹、代理) ,再通过ASP程序使
用注册的ATL COM组件来获得Notes的未读文档数。
3. 做好准备工作
我们准备用CAPI新建ATL COM工程来读出Notes未读邮件和总邮
件数,开发工具准备选用Visual C++ 7.0,Lotus CAPI的应用可以根据
notes.ini中的信息获得当前用户信息,根据查找到的ID文件验证用户
身份。Notes的绝大部分API都封装在nNotes.dll文件中,其中包括有
ACL, User,Database,Document,Item等多方面的API函数。
我们可以在IBM公司网站下载Domino对应版本CAPI,解压到相
应目录例如c:\notesapi下,本文以Domino5.08为例,打开目录可以看
到Include目录和Lib目录,设置好系统变量包括系统路径。
4. 整理编程思路
我们要整理好自己的编程思路,先打开VC++7.0,新建Visual
C++项目ATL项目类型,模板选择ATL项目,可取名dmnew,设置好
项目属性,添加notes.lib,设置项目VC++项目,CAPI包含文件目录和
库文件目录,在项目向导下的服务器类型里选择动态链接库(DLL),
并添加ATL Active Server Page组件类,可取名newmail,其它属性均
选择默认值,在自动生成的Idmnew 接口添加方法getnew([in] BSTR
username, [in] BSTR passwd, [out,retval]VARIANT* vOut),
开始需要初始化Notes环境,打开数据库,使用其自动建立的
m_piResponse对象,可以在ASP页面上输出出错信息,便于调试。
error =NotesInit();
if ( error!=NOERROR)
{
O S L o a d S t r i n g ( 0, E R R ( e r r o r ),
szErrorStr, 256 - 1);
varText.vt = VT_BSTR;
v a r T e x t . b s t r V a l =
CComBSTR(szErrorStr).Copy();
m_piResponse->Write(varText);
return S_OK;
}
使用SECKFMSwitchToIDFile自动切换到指定ID,这个API
不能支持复杂密码,同时修改Notes.ini相关配置。
er ror= SECKFMSwitchToIDFi le ( id f i le, idpassword,
idUserName, 100, 0, NULL);
依据变量server_name,pathname构成Domino数据库全路径,打
开数据库。
error = OSPathNetConstruct(NULL, server_name,pathname,
full_netpath);
error=NSFDbOpen(full_netpath, &hDb);//打开数据库
获得指定数据库所有的未读文档列表,与此同时更新内存中未
读文档列表。用户的未读标志存放在客户端的desktop.dsk文件和服务
器的数据库,当用户关闭数据库时,客户端和服务器的未读标志会同
步。
nameLen=WORD(strlen(zhUserName));
error = NSFDbGetUnreadNoteTable(hDb,zhUserName,
浅析WEB方式进行Notes新邮件接收
鲍连杰 李冶
(沈阳师范大学科信软件学院,辽宁沈阳 110034)
摘要:进行Domino数据库研究开发的目的,就是实现与企业应用相结合,让用户更方便快捷地了解数据库中尚未处理的邮件数量及内容,在
企业内部网站上有所反映,从而提高工作效率。
关键词:WEB方式;ASP组件;新邮件接收
中图分类号:TP312 文献标识码:A 文章编号:1003-9767(2011)05-0075-02
76
2011年5月刊软件开发与设计 信息与电脑 China Computer&Communication
nameLen,TRUE,&hTable); error=NSFDbUpdateUnread(hDb,
hTable);//
得到数据库中某个视图或文件夹的未读文档数和信息
error=NIFFindDesignNoteByName(hDb,zhViewName,
&ViewID);
//取得指定视图或文件夹的所有文档
error=NIFOpenCollection(hDb,hDb,ViewID,0,hTable,
&hCollection,NULL,NULL,NULL,NULL);
error=NIFUpdateCollection(hCollection);
利用NIFReadEntries读取文档集的指定文档,再与前面的所
有未读文档列表逐一比较,相同的则是该视图或文件夹的未读文档列
表。
CollPosition.Level=0;
CollPosition.Tumbler[0]=0;
//读取文档集的指定文档
e r r o r = N I F R e a d E n t r i e s ( h C o l l e c t i o n,& C o l l P o s i t i o n,
N AV I G AT E _ N E X T, 1 L,N AV I G AT E _ N E X T, 0 x F F F F,
READ_MASK_NOTEID,&hBuffer,NULL,NULL,&NotesFound,
&SignalFlags);
if (hBuffer !=NULLHANDLE)
{ I d L i s t = ( N O T E I D f a r
*)OSLockObject(hBuffer);
w h i l e ( I D S c a n ( h Ta b l e, f F i r s t,
&NoteID))//依次取得hTable表中的文档号
{ fFirst=FALSE;
for (i=0;i
Wri te (CComVar ian t (L"共有邮件"));
m_piResponse->Write(varText);
m_piResponse->Write(CComVariant(L"封
div>"))
varText.lVal =iViewUnread;
m_piResponse->Wri te (CComVar ian t (L"
其中有"));
m_piResponse->Write(varText);
m_piResponse->Write(CComVariant(L"封新邮件
"));
在ASP文件中调用已注册的ATL DLL文件。
dim test
dim retval
set test=Server.CreateObject("dmnew.newmail")
retval=test.getnew("notes文件名","notes密码")
5.
涉及问
5.1中文处理问题
Domino涉及到中文部分需要处理,每个中文字符前面需加
0x13,GB2312编码大约包含6000多汉字(不包括特殊字符),编码
范围为第一位b0-f7,第二位编码范围为a1-fe,用以下函数进行处理:
void hangzi_zhuan(char *src,char *des)
{ unsigned char highchar;
unsigned char lowchar;
int l;
int k;
int m;
l=WORD(strlen(src));
for(k= 0,m=0;k<=l;k++,m++)
{
lowchar =( unsigned char)( src[k]);//取源
字符串低位
highchar =(unsigned char)(src[k+1]); //取
源字符串高位
if ( (highchar>=0xa1) && (highchar<=0xfe) &&
(lowchar>=0xb0) && (lowchar<=0xf7) )
{
//此字符是汉字
des[m]=0x13;
des[m+1]=lowchar;
des[m+2]=highchar;
k=k+1;
m=m+2;
}
else
{ //此字符不是汉字
des[m]=lowchar;
}
}
}
5.2系统变量设置问题
对系统变量进行设置库文件目录、包含文件目录和系统路径时,
需要注意这些路径设置的总长度不能超过256个字符,之后的设置不
起作用。
参考文献:
[1]Lotus C API 5.0.8 Reference
[2] Lotus C API 5.0.8 User Guide
本文档为【浅析WEB方式进行Notes新邮件接收】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。