为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

浅析WEB方式进行Notes新邮件接收

2011-10-19 2页 pdf 142KB 37阅读

用户头像

is_148594

暂无简介

举报
浅析WEB方式进行Notes新邮件接收 75 2011年5月刊 软件开发与设计信息与电脑 China Computer&Communication Lotus Domino系统在国内企事业单位办公自动化系统中应用较 为广泛,Domino是比较独特和封闭的非关系数据库管理系统。通过 Notes客户端可以实现安全方便的收发邮件,然而Lotus Notes身身是 一种C/S模式程序,在强调系统安全性的同时,也给系统管理员和用 户带来了诸多安装、管理、使用上的不便。当下邮件、公文系统使用 WEB方式已成事实,本文就ASP开发环境下的Notes新邮件接收作以 浅析,供...
浅析WEB方式进行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;iWri te (CComVar ian t (L"
共有邮件")); m_piResponse->Write(varText); m_piResponse->Write(CComVariant(L"封")) 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,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索