📄 +
字号:
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 + -