【问题标题】:Lotus Notes API giving error while accessing the NSFLotus Notes API 在访问 NSF 时出错
【发布时间】:2011-12-17 07:26:21
【问题描述】:

我一直在努力使用 JAVA Lotus notes API 从外部服务器访问 Lotus Notes(.nsf) 数据,但在访问 NSF 时,我收到了 Lot of functions 的以下错误。

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. 能够在外部服务器上创建 Lotus Domino 会话

所以我想请大家提供任何建议或解决方案来解决这个问题。


感谢您的快速回复。我非常感谢。我正在使用 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
}
}

【问题讨论】:

  • 也请出示相应的源代码。
  • 您的客户端计算机上是否安装了 Notes 客户端? notes.jar 需要安装 Notes 客户端 - 它必须能够在本地找到并加载 nnotes.dll 和 notes.ini 文件。
  • 您在运行代码的机器上运行的是什么版本的笔记或多米诺骨牌?
  • 我正在使用 NCSO.jar 进行远程连接。除此之外,Domino 版本是 8.5,NSCO.jar 版本也是如此

标签: java lotus-notes lotus-domino lotus


【解决方案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 文件。此外,请确保您正在编译的 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 代理之外运行的。

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

【讨论】:

  • 感谢您的快速回复。我非常感谢。我正在使用 NCSO.jar ,是的,我正在拨打远程电话。我与管理员核对并要求提供相同的 NCSO.jar 和 Notes.jar 。他们使用的服务器是 8.5 。但它仍然抛出相同的错误。除此之外,我不知道如何使用 eclipse 编写和使用 java,因为我完全是 Notes Java Development 的新手。请尽快帮助我。谢谢。 :)
  • 您现在需要使用正在生成错误的类更新您的问题,因为它不是直截了当的。您是否尝试实例化“lotus.domino.cso.Base”类?
【解决方案2】:

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

【讨论】:

  • 不,Notes.jar 可以访问服务器上的数据库。如果您在未安装 notes 或 domino 的计算机上运行代码,则仅需要 ncso.jar。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多