LS2J: Передача NotesDocument в конструктор Java-класса?

  • Автор темы Serduko
  • Дата начала
S

Serduko

Добрый день! Возможно ли, если да, то как?
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
363
По-моему нет. Оно понимает только "простые" классы, типа String, Integer и т.п. Document не прокатит, но можно передать UNID документа в виде строки.
 
S

Serduko

По-моему нет. Оно понимает только "простые" классы, типа String, Integer и т.п. Document не прокатит, но можно передать UNID документа в виде строки.

Можно ли тогда получить NotesSession внутри класса, не агента?
 
S

Serduko

Я так понял NotesFactory - это для сервера, а как получить сессию на клиенте, интерактивно?
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
363
Нет, можно использовать и на клиенте, и вообще автономно от Лотуса, но надо соблюсти определённые правила. Я же давал ссылку на Help - там есть примеры:

This is an application that makes local calls and extends the NotesThread class:
Java:
import lotus.domino.*;

public class platform1 extends NotesThread {
    public static void main(String argv[]) {
        platform1 t = new platform1();
        t.start();
    }
    
    public void runNotes() {
        try {
            Session s = NotesFactory.createSession();
            // To bypass Readers fields restrictions
            // Session s = NotesFactory.createSessionWithFullAccess();
            String p = s.getPlatform();
            System.out.println("Platform = " + p);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

This is an application that makes local calls and implements the Runnable interface:
Java:
import lotus.domino.*;

public class platform2 implements Runnable {
    public static void main(String argv[]) {
        platform2 t = new platform2();
        NotesThread nt = new NotesThread((Runnable)t);
        nt.start();
    }
    
    public void run() {
        try {
            Session s = NotesFactory.createSession();
            String p = s.getPlatform();
            System.out.println("Platform = " + p);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
363
Например так:
Java:
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;

public class Class1 extends NotesThread {
    private Session session = null;
    private Document document = null;

    public Class1(String unid) {
        try {
            session = NotesFactory.createSession();
            // не уверен, что "прокатит". В противном случае придётся использовать
            // getDatabase(server, filepath) с указаниаем имени сервера и базы данных.
            Database database = session.getCurrentDatabase();
            document = database.getDocumentByUNID(unid);
        } catch (NotesException ne) {
            ne.printStackTrace();
        }
    }

    public void runNotes() {
        try {
            // Здесь твой код           
            System.out.println(document.getItemValueString("Form"));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try {
                if (session != null)
                    session.recycle();
            } catch (NotesException e) {
                // Nothing TODO
            }
        }
    }
}

соответственно в LS надо инициализировать класс Set javaObject = javaclass.CtreateObject("(Ljava/lang/String;)V", unid) и "запустить его javaObject.start()
Ничего я тут не напутал с инициализацией объектов LS2J? Давно не пользовался этой ерундой.
 
S

Serduko

Выдает такое сообщение, запускал не через агент (поэтому и подумал)

Хм, странно...
 

Вложения

  • Безымянный.png
    Безымянный.png
    5,3 КБ · Просмотры: 629

garrick

Lotus Team
26.10.2009
1 367
152
BIT
363
Ну, тогда извиняйте - был не прав.
А какую вообще задачу решаете? Зачем вам этот LS2J?
 
S

Serduko

Ну, тогда извиняйте - был не прав.
А какую вообще задачу решаете? Зачем вам этот LS2J?
Пока никакую, но была мысль сделать dialogbox с Jtree, с динамически изменяемым составом. Существующая реализация (сделана не мной) с Folder, в который добавляется список документов и при закрытии Dialogbox, список очищается, мягко говоря, мне не нравится. Сейчас задумываюсь сделать через personal view (изменять формулу перед запуском диалога), но от реализации на java тоже пока не отказался.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!