www涩-www黄网站-www黄色-www黄色com-国产免费拍拍视频在线观看网站-国产免费怕怕免费视频观看

ASP組件實現Notes新郵件提醒

2013-12-12 10:47:37 電力信息化  點擊量: 評論 (0)
中文摘要:通過對Domino數據庫進行研究開發,探索Domino數據庫如何和企業應用結合,如何能讓用戶更快了解數據庫中未處理郵件數量及內容,反映到企業內部網站上,來達到提高辦公工作效率的目的。正文:目前電力系統
中文摘要:
通過對Domino數據庫進行研究開發,探索Domino數據庫如何和企業應用結合,如何能讓用戶更快了解數據庫中未處理郵件數量及內容,反映到企業內部網站上,來達到提高辦公工作效率的目的。
 
正文:
目前電力系統中辦公自動化系統使用較多的是Lotus Domino系統,Domino是一個比較獨特、比較封閉的非關系數據庫管理系統。通過Notes客戶端可以安全方便的收發郵件,但是Lotus Notes本身是一種C/S模式程序,在強調系統安全性的同時,給系統管理員和用戶帶來了不少安裝、管理、使用上的麻煩。目前郵件、公文系統使用WEB方式已是大勢所趨,本文針對ASP開發環境下對新郵件提醒作一些初步研究,旨在給初學者提供一種思路。
一、了解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++工具相比有較大差距。
 
二、新郵件提醒實現方法:
1、通過Domino代理寫入網關數據庫,前臺程序例如ASP程序通過數據庫接口訪問數據庫得到新郵件數目。
2、通過Toolkit工具對新郵件進行統計,其中用CAPI實現功能比較強大,幾乎可以操作Notes數據庫中所有的數據對象(包括數據庫及ACL、文檔和域、表單、視圖、文件夾、代理) 。然后通過ASP程序使用注冊的ATL COM組件來取得Notes的未讀文檔數。
三、準備工作
        本文準備利用CAPI新建ATL COM工程來讀出Notes未讀郵件和總郵件數,開發工具準備選用Visual C++ 7.0,使用Lotus CAPI的應用將根據notes.ini中的信息來得到當前用戶的信息,根據查找到的ID文件來驗證用戶身份。Notes的大部分API都封裝在nNotes.dll文件中,其中包括有ACL,Database,User,Document,Item等各個方面的API函數。
       在IBM公司網站下載Domino對應版本CAPI,解壓至相應目錄例如c:\notesapi下,我們這里以Domino5.08舉例,打開目錄可以看到Include目錄和Lib目錄,設置好系統變量包括系統路徑。
 
四、編程思路
        打開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)
         {
              OSLoadString(0, ERR(error), szErrorStr, 256 - 1);
              varText.vt = VT_BSTR;
              varText.bstrVal = CComBSTR(szErrorStr).Copy();
              m_piResponse->Write(varText);
              return S_OK;
         }
     使用SECKFMSwitchToIDFile自動切換到指定的ID,這個API不能支持復雜密碼,同時修改Notes.ini相關配置。
error= SECKFMSwitchToIDFile( idfile, 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,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;
     //讀取文檔集的指定文檔
error=NIFReadEntries(hCollection,&CollPosition,NAVIGATE_NEXT,1L,NAVIGATE_NEXT,0xFFFF,READ_MASK_NOTEID,&hBuffer,NULL,NULL,&NotesFound,&SignalFlags);
if (hBuffer !=NULLHANDLE)
         {    IdList=(NOTEID far *)OSLockObject(hBuffer);
              while(IDScan(hTable,fFirst,&NoteID))//依次取得hTable表中的文檔號
              {    fFirst=FALSE;
                   for (i=0;i<NotesFound;i++)
                       if (NoteID==IdList[i])
                   {    iViewUnread++;
                       break;
                   }
              }
              OSUnlockObject(hBuffer);
              OSMemFree(hBuffer);
         }
    
DLL文件中引用m_piResponse對象在ASP頁面顯示總郵件數目和新郵件數目。
          VariantInit(&varText);
         varText.vt =  VT_I4;
        varText.lVal =NotesFound ;
m_piResponse->Write(CComVariant(L"<div align='left' class='black'><font size=2>共有郵件"));
         m_piResponse->Write(varText);
         m_piResponse->Write(CComVariant(L"封</font></div>"));
 
 
         varText.lVal =iViewUnread;
m_piResponse->Write(CComVariant(L"<div align='left' class='black'>其中有<b><font color=red size=2>"));
         m_piResponse->Write(varText);
   m_piResponse->Write(CComVariant(L"</font></b>封新郵件</div>"));
 
在ASP文件中調用已注冊的ATL DLL文件。
dim test
dim retval
set test=Server.CreateObject("dmnew.newmail")
retval=test.getnew("notes文件名","notes密碼")
 
 
五、涉及問題
    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;
           }
         }
}
 
       2、系統變量設置
在系統變量里面設置庫文件目錄、包含文件目錄和系統路徑,注意這些路徑設置總長度不要超過256個字符,256個字符以后的設置將不會起作用。
      
3、Domino里面郵件數據庫的“收件箱”是一個共享文件夾,它的視圖名稱為“$Inbox”。
 
 
參考文獻
Lotus C API 5.0.8 User Guide
Lotus C API 5.0.8 Reference
 
作者簡介
佘世洲(1975年生),男,1997年安徽大學電子工程系本科畢業,工程師。
郵件地址:redbug03@163.com
通訊地址:安徽銅陵供電公司信息中心
郵編:244000
電話:0562-2664404
大云網官方微信售電那點事兒

責任編輯:和碩涵

免責聲明:本文僅代表作者個人觀點,與本站無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
我要收藏
個贊
?
主站蜘蛛池模板: 欧美日韩视频一区二区在线观看 | 美女网站18 | 欧美精品亚洲精品日韩专区 | 欧美成a人片在线观看久 | 成人免费xxxxx在线视频 | 久久久成人啪啪免费网站 | 精品久久久久久久久久久久久久久 | 日本精品高清一区二区不卡 | 亚洲精品天堂一区在线观看 | 特别福利视频在线观看 | 国产成人福利视频在线观看 | 欧美另类高清xxxxx | 四虎免费大片aⅴ入口 | a级精品九九九大片免费看 a级毛片免费观看网站 | 毛片在线免费观看网站 | 欧美成人免费全网站大片 | 中文无码日韩欧免费视频 | 欧美三级一级 | 久久综合九九 | 99精品观看 | 性做久久久久免费看 | 高清国产精品久久 | 久久久高清免费视频 | 免费国产成人高清在线观看视频 | 国产成人精品福利网站人 | 中文字幕亚洲精品久久 | 一级毛片中国 | 欧美另类在线视频 | 国产精品手机在线播放 | 国产成人一区二区三区精品久久 | 黄色三级理论片 | 色综合精品久久久久久久 | 欧美成人短视频 | 久久极品| 在线观看片成人免费视频 | 日韩欧美一级a毛片欧美一级 | 免费欧美一级片 | 久久精品高清 | 韩国精品视频在线观看 | 亚洲小视频在线 | 超清波多野结衣精品一区 |