?? +
字號:
InputStreamReader fisr = new InputStreamReader(fin);
BufferedReader br = new BufferedReader(fisr);
String ior = br.readLine();
fin.close();
創建session:
我們調用NotesFactory的createSessionWithIOR方法,通過前面獲取的IOR,創建一個session對象。
Code
Session s = NotesFactory.createSessionWithIOR(ior,
"super admin" ,"admin password");
打開names.nsf:
我們調用session的getDatabase方法,打開指定服務器上的“names.nsf”數據庫。
Code
final static String DB_NAMES = "names.nsf";
Database dbCache = s.getDatabase(s.getServerName(),
DB_NAMES, false);
得到Users View:
我們調用Database的getView方法,打開指定數據庫上的“($Users)”視圖。
Code
View view = dbCache.getView("($Users)");
遍歷Users View:
我們可以遍歷指定數據庫上的“($Users)”視圖,得到每一個用戶的Document。
也可以指定一個用戶,專門取得他的Mail File,
Code
Document docKey = view.getDocumentByKey("zheng yun");
if (docKey == null)
System.out.println("docKey not found!");
else
{
strMailFile = docKey.getItemValueString("MailFile");
if (strMailFile == null)
System.out.println("strMailFile is null!");
else
System.out.println("strMailFile = " + strMailFile);
}
輸出結果就是:mail\zyun.nsf或者mail\zyun。
這樣,我們就知道了該用戶的郵箱所在的數據庫文件的路徑了。
打開郵箱數據庫文件:
知道了一名用戶的郵箱文件名稱,我們可以再用session的getDatabase方法打開該數據庫:
Code
Database dbMail = s.getDatabase(s.getServerName(),
"mail\\zyun.nsf", false);
if(dbMail == null)
System.out.println("cannot open database");
遍歷郵箱數據庫的所有Document:
根據DocumentCollection dc = dbMail.getAllDocuments();我們獲得了該數據庫中存儲的所有Document的集合,這就是所有的郵件。于是可以遍歷了:
Code
if (dbMail != null)
{
DocumentCollection dc = dbMail.getAllDocuments();
System.out.println("Mail database : " +
dbMail.getTitle() + " is " +
((int)(dbMail.getSize()/1024)) + "KB long and has " +
dc.getCount() + " documents");
String fn = dbMail.getFileName();
String title = dbMail.getTitle();
System.out.println(fn.toUpperCase() + " - " + title);
Document doc = dc.getFirstDocument();
while (doc != null) {
System.out.println(
doc.getItemValueString("Subject"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
System.out.println("From=" + doc.getItemValueString("From"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
System.out.println("Body=" + doc.getItemValueString("Body"));
System.out.println("~~~~~~~~~~~~~~~~~~~~\r\n");
String readFlag = doc.getItemValueString("Readed");
if(readFlag == null || readFlag!= "1" )
{
doc.appendItemValue("Readed ",
"1");
if (doc.save())
System.out.println("Document created and saved");
else
System.out.println("Something went wrong");
}
else
System.out.println("發現已經打上了標記!");
String docNoteID = doc.getNoteID();
System.out.println("NoteID = " + docNoteID);
String docNoteURL = doc.getNotesURL();
System.out.println("NoteURL = " + docNoteURL);
doc.recycle();
doc = dc.getNextDocument(); }
我們通過String readFlag = doc.getItemValueString("Readed");可以獲得這個郵件的“Readed”字段(自定義字段)。如果這個字段不存在,說明我們是第一次瀏覽該封郵件。這樣的話,我們通過doc.appendItemValue("Readed ", "1");以及doc.save(),給該封郵件增加這個已瀏覽標示字段。
另外,轉《通過JAVA-CORBA訪問Domino》中一段很有幫助的話:
如何從lotus.domino.NotesException 中獲取錯誤信息:
在你編寫domino的java/corba應用程序時,不可避免的要同異常處理打交道,NotesException當然是每個開發人員都不愿見到的但又不得不經常面對的問題。
如果你在寫程序時盡是簡單的采用
try{
….
}catch(Exception e){
e.printStackTrace();
}
的形式捕捉異常,那么一旦代碼拋出異常,你將變得一籌莫展,因為屏幕上不會打印出任何對你提供幫助的信息,這方面的資料更是鳳毛翎角, 連IBM的官方文檔中都沒有豐富的錯誤信息提示。錯誤捕捉代碼應該這樣寫:
try{
….
}catch(Exception e){
if(ex instanceof lotus.domino.NotesException){
System.out.println( "通過CORBA訪問數據庫發生錯誤,錯誤代碼為"
+((lotus.domino.NotesException)ex).id);
}
e. printStackTrace();
}
這是屏幕上將打印出錯誤代碼,有了錯誤代碼,我們還要知道錯誤代碼的含義,這就要到IDL文件中去查了。在corba.dll文件中NotesError這個接口定義了全部錯誤代碼(自己要做一下簡單的加法才能知道那里面錯誤代碼的具體值),錯誤代碼的變量名正是錯誤信息。這樣你便可以對出現的問題了然于胸了,對你解決突發性事件很有幫助。
參考資料:
1:《Java對Domino Objects的訪問》,by Robert Perron,Steve
2:《用Java通過DIIOP遠程操作Domino服務器》
3:《通過JAVA-CORBA訪問Domino》
4:《LotusNotes和Eclipse管理和運行Java程序》
url
http://www-900.ibm.com/cn/support/nav/200402/list-1.shtml
http://www.codestore.net/help/help6_admin.nsf
http://www-12.lotus.com/ldd/doc/domino_notes/6.5m2/help65_designer.nsf
http://www.cnblogs.com/zhengyun_ustc/category/29479.html
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -