• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Serduko

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

Можно ли тогда получить NotesSession внутри класса, не агента?
 
NotesFactory.createSession()

 
Я так понял NotesFactory - это для сервера, а как получить сессию на клиенте, интерактивно?
 
Нет, можно использовать и на клиенте, и вообще автономно от Лотуса, но надо соблюсти определённые правила. Я же давал ссылку на 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();
        }
    }
}
 
Например так:
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? Давно не пользовался этой ерундой.
 
Выдает такое сообщение, запускал не через агент (поэтому и подумал)

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

Вложения

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab