【问题标题】:NotesException:Older version on server does not support this methodNotesException: 服务器上的旧版本不支持此方法
【发布时间】:2016-09-26 14:00:30
【问题描述】:

Lotusscript 调用 Java 类得到这个错误。 抽象的: 产品领域:Domino Designer on Eclipse (DDE)

技术领域:应用程序开发

平台:Windows 2008 R2 64bit

发布:8.5.3

可重现:总是

1 在 Notes 数据库中创建 SqlTest 脚本库(Java)。 模型.java:

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.SQLException;

    import java.sql.Statement;

    import lotus.domino.*;

    public class Model{

    /**

    Get database connection
    @return
    */

    public static Connection getConn(){

    Connection conn = null;

    String SqlDriverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    String SqlDBUrl = "jdbc:sqlserver://22.11.95.30:1433;DatabaseName=TMSTEST";

    String SqlUserName = "sa";

    String Sqlpwd = "1q2w3e4r!";

    try {

    Class.forName(SqlDriverName);

    conn = DriverManager.getConnection(SqlDBUrl, SqlUserName, Sqlpwd);

    System.out.println("database connection sucess");

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println("database connection failure");

    }

    return conn;

    }

    public static boolean test1(String id){

    //System.out.println("---------------------");

    Connection conn = getConn();

    Statement stmt = null;

    String sql;

    // Open the current Notes db

    try {

    Session s = NotesFactory.createSession("22.11.95.100:63148", "admin test/testeam", "testtest");

    System.out.println("session is OK");

    Database db = s.getCurrentDatabase();

    //  System.out.println("Title of URL database: \"" + db.getTitle() + "\"");

    if (db.isOpen())

    System.out.println("Is open");

    else

    System.out.println("Not open");
    Document doc = null;

    //through the id para get the Notesdocument

    doc = db.getDocumentByUNID(id);

    System.out.println(id);

    //insert the Notesdocument data to sql

    if (doc != null) {

    sql = "insert into TEST_USER(userID, userName,xqbh) values('123456','"+doc.getItemValueString("fld_xqbh")+"', '"+doc.getItemValueString("fld_xqmc")+"')";

    System.out.println("SQL :"+sql);

    stmt = conn.createStatement();

    stmt.execute(sql);

    System.out.println("excute finish");

    return true;

    }else{

    return false;

    }

    } catch (NotesException e) {

    // TODO auto generate catch block

    e.printStackTrace();

    return false;

    }catch(SQLException se){

    se.printStackTrace();

    return false;

    }finally{

    try{

    if(stmt != null) stmt.close();

    if(conn != null) conn.close();

    }catch(Exception e1){

    e1.printStackTrace();

    }

    }

    }

    }

备注表单中的2:

    Uselsx "*javacon"
    Use "SqlTest"


    Function jTest(id As String) As Boolean

        Dim jSession As New JAVASESSION

        Dim jClass As JAVACLASS

        Dim jObj As JavaObject

        Set jClass = jSession.GetClass("Model")

        'Msgbox jClass.className 

        Call jClass.test1(id)
    End Function

3 通过 Lotusscript 使用 java 类:

'call java class

Call jTest(doc.UniversalID)

4 调试程序通过IDE(Lotus Domino Designer)在java控制台日志中找到错误。使用一些打印语句并找到错误行(Java):

   Database db = s.getCurrentDatabase();

5 我看过关注的帖子。

Invoking method on a Java class from lotus script (LS2J)

passing LotusScript parameter to Java

google 没什么,好几天了。 谢谢大家,在此先感谢。stackoverflow 中的第一个帖子。

【问题讨论】:

  • 所以只是为了澄清你在调用 s.getCurrentDatabase() 时得到“服务器不支持这种方法”,对吧?并且在使用 Session 对象之前,您是否对其进行了有效性测试?
  • 在 Domino Server 测试程序中显示:NotesException:Older version on server does not support this method.并且控制台打印会话正常。在 Notes 客户端机器中:测试它接收如下:NotesException:无法从 Domino 服务器获取 IOR:22.11.141.77:63148/diiop_ior.txt.Such 一团糟。

标签: java lotus-notes lotusscript ls2j


【解决方案1】:

问题在于您获取会话的方式:您打开了一个与当前打开的会话无关的全新会话。该新会话没有当前数据库,因为它没有连接到您的前端会话。

只需使用这一行初始化您的会话:

Session session = getSession();

然后 getCurrentDatabase 将起作用。

【讨论】:

  • 感谢回复。Model.java 没有扩展 AgentBase,所以这不起作用。我查看 Designer 帮助文档
【解决方案2】:

感谢 Torsten Link。 我多次测试java脚本库,都失败了。新建一个 Javaagent 而不是 java 脚本库,那么一切都清楚了。

核心 LotusScript 代码:

    Dim agent As NotesAgent
    Set db = s.CurrentDatabase
    Set agent = db.GetAgent("javaAgent")
    If agent.RunOnServer(doc.NotesID) = 0 Then
      Messagebox "Agent ran",, "Success"
    Else
      Messagebox "Agent did not run",, "Failure"
    End If

核心javaagent代码:

     Agent agent = agentContext.getCUrrentAgent()
     Document doc = db.getDocumentbyID(agent.getParameterDocID())

注意:运行时安全级别,需要允许受限操作。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多