Lotus Notes API在访问NSF时出错

时间:2011-12-17 07:26:21

标签: java lotus-notes lotus-domino lotus

我一直在使用JAVA Lotus Notes API从外部服务器访问Lotus Notes(.nsf)数据,但是在访问NSF时我收到了许多函数的以下错误。

NotesException: Not implemented
  at lotus.domino.cso.Base.notImplemented(Unknown Source)
  at lotus.domino.cso.View.getAllUnreadEntries(Unknown Source)
  at com.lotus.GetName.runNotes(GetName.java:40)
  at lotus.domino.NotesThread.run(Unknown Source)

观察:

  1. 我已经使用类路径(Notes.jar)
  2. 重新检查了我的设置
  3. 能够访问外部服务器。
  4. 能够在外部服务器上创建Lotus Domino会话
  5. 所以我想请求所有人提出任何建议或解决方案来解决这个问题。


    感谢您的快速回复。我真的很感激。我正在使用NCSO.jar,是的,我正在进行远程调用。我检查了我的管理员,并要求提供相同的NCSO.jar以及Notes.jar。他们使用的服务器是8.5。但它仍然抛出相同的错误。除此之外我不知道如何使用eclipse编写和使用java,因为我是Notes Java Development的新手。请尽快帮助我。谢谢。 :)

    我使用的代码是:

    public class GetName
    {
      public static void main(String argv[])
      {
           try
           {
    
               Database db;
    
               String ior = NotesFactory.getIOR("****");
    
                 Session s =  NotesFactory.createSessionWithIOR(ior,"****","****");
    
                 db =  s.getDatabase("****","mail/mail1/****");
    
        View v =  db.getView("$Inbox");
    
    System.out.println(v.getAllUnreadEntries().getCount());// Getting error on this line
    }
    }
    

2 个答案:

答案 0 :(得分:1)

如果没有更多信息,我将不得不在这里推断一些事情。首先,该错误表明您正在使用仅在Lotus Notes / Domino 8.5中可用的功能。鉴于错误显示“未实现”,我猜你正在使用未实现getAllUnreadEntries的Notes.jar / NCSO.jar。我怀疑这个问题是环境而不是你的逻辑。

检查您导入项目的jar文件是否来自Domino 8.5。早期版本的Domino的Java API不支持“getAllUnreadEntries”。

确保在Lotus Notes客户端(位于notes \ jvm \ lib \ ext目录中)中找到并复制安装的jar文件(通过defaut)的最佳方法。另外,请确保您编译的jar文件与您正在运行的版本匹配。因此,如果您使用Notes 8.5 jar开发了这个,并且它在服务器或客户端上的Domino 7或8.0上运行,则运行时将尝试运行不存在的方法时生成错误。你需要确保它在8.5上运行。

以下是我从Domino Designer帮助中提取的java代理示例,该代理访问视图中的未读条目。

import lotus.domino.*;

public class JavaAgent extends AgentBase {

  public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      // (Your code goes here) 
      Database db = agentContext.getCurrentDatabase();
      View view = db.getView("All");
      ViewEntryCollection vec = view.getAllUnreadEntries();
      System.out.println("View has " +
      vec.getCount() + " unread entries");     
      view.markAllRead();
      view.refresh();
      vec = view.getAllUnreadDocuments();
      System.out.println("View has " +
      vec.getCount() + " unread entries after markAllRead");    
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

这可能无法准确反映您尝试执行的操作,因为它将“AgentBase”用于java代理。但是try语句中的所有内容都适用。听起来像是在Notes代理之外运行。

您可以通过确保Notes.jar和NCSO.jar位于类路径中并检查实际使用的导入来编写使用Domino-Java API的任何类。 If you're not doing remote calls你可以使用lotus.domino。*,而不是lotus.domino.cso。*。

答案 1 :(得分:-1)

如果您使用的Notes.jar来自本地便笺安装,那么我认为它只能用于访问本地运行的Notes客户端。要访问远程服务器,还有另一个名为NCSO.jar的jar,它实现了远程Corba / IIOP协议。您可能需要让管理员从服务器上为您提供此jar的副本。