2016-09-26 3 views
0

Lotusscript Aufruf der Java-Klasse erhalten diesen Fehler. Zusammenfassung: Bereich Produkt: Domino Designer auf Eclipse (DDE)NotesException: Ältere Version auf dem Server unterstützt diese Methode nicht

Technischer Bereich: Anwendungsentwicklung

Plattform: Windows 2008 R2 64bit

Release: 8.5.3

Reproduzierbare: Immer

1 Erstellen Sie SqlTest-Skriptbibliothek (Java) in der Notes-Datenbank. Model.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 in der Notes-Form:

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 Verwendung der Java-Klasse durch Lotusscript:

'call java class 

Call jTest(doc.UniversalID) 

4 Debug das Programm den Fehler in Java-Konsole finden Loggen Sie über IDE (Lotus Domino Designer). Verwenden Sie einige Drucksätze und finden Sie die Fehlerzeile (Java):

Database db = s.getCurrentDatabase(); 

5 Ich habe die folgenden Posts gesehen.

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

passing LotusScript parameter to Java

google Nichts, Probleme für Tage. danke allen, vielen Dank im Voraus.Erste Beiträge in stackoverflow.

+0

Also nur um zu verdeutlichen bekommen Sie, dass "Server diese Methode nicht unterstützt" beim Aufruf von s.getCurrentDatabase(), richtig? Und testen Sie das Session-Objekt vor der Verwendung auf Gültigkeit? – Duston

+0

im Domino Server Testprogramm anzeigen: NotesException: Ältere Version auf Server unterstützt diese Methode nicht. und Konsole drucken Sitzung ist OK.auf einem Notes Client-Computer: Test it receive follow: NotesException: IOR konnte nicht vom Domino Server abgerufen werden: http: /22.11.141.77: 63148/diiop_ior.txt. – witlili

Antwort

1

Das Problem liegt in der Art, wie Sie Ihre Sitzung bekommen: Sie öffnen eine komplett neue, die nichts mit der gerade geöffneten Sitzung zu tun hat. Diese neue Sitzung hat keine aktuelle Datenbank, da sie nicht mit Ihrer Frontend-Sitzung verbunden ist.

Sie Ihre Sitzung mit dieser Zeile initialisieren:

Session session = getSession(); 

Dann getCurrentDatabase arbeiten.

+0

danke für reply.the Model.java nicht erweitern AgentBase, so dass dies nicht funktioniert.Ich überprüfe die Designer Hilfe doc – witlili

0

dank Torsten Link. Ich teste die Java-Skript-Bibliothek viele Male, alle Fehler. Neu eine Javaagent nicht Java Script Library dann ist alles klar.

LotusScript- Code Kern:

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 

Kern javaagent Code:

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

Hinweis: Runtime Sicherheitsstufe, müssen Sie eingeschränkte Operationen ermöglichen.

Verwandte Themen