#java #osgi #lotus-domino #lotusscript #ibm-domino
#java #osgi #lotus-domino #lotusscript #ibm-domino
Вопрос:
Я разработал пакет OSGi для Domino, который должен выполнять код в контексте пользователя. В LotusScript также существует много кода, который слишком сложно переписать (веб-агенты). Итак, я ищу решение для запуска этих веб-агентов от имени пользователя и получения выходных данных (отпечатков). Я много пробовал, но теперь я застрял в том, что могу либо запустить агента как подписчика агента (результат session.EffectiveUserName) и иметь возможность получать выходные данные, либо запустить агента от имени пользователя, но не могу получить выходные данные. Но поскольку важно, чтобы код LotusScript учитывал поля чтения, он должен выполняться от имени пользователя. И поскольку мне нужен вывод от агента, чтобы сделать все остальное на Java, мне нужен способ также получить стандартный вывод.
Что я пробовал до сих пор:
- OpenNTF Domino API: я могу запускать агенты от имени пользователя, но я не могу получить результат (или я не знаю как)
String user = "Effective User/Acme"; TrustedSessionFactory factory = new TrustedSessionFactory(null); Sessions s = factory.createSession(user); Database db = .getDatabase(null, "path/db.nsf"); Agent ag = db.getAgent("LotusScript-Web-Agent") ag.run(); /* How can I grap the prints?? */
- Дарвино НАПИ: я не могу запускать агенты от имени пользователя, но я могу получить выходные данные (или я не знаю как)
String user = "CN=Effective User Name/O=Acme"; String prints = null; NSFSession nsfSession = null; NSFDatabase nsfDb = null; NSFAgent nsfAg = null; RunContext runContext = null; try { DominoAPI napi = DominoAPI.get(); nsfSession = new NSFSession(napi, user, true, false); nsfDb = nsfSession.getDatabase(null, "path/db.nsf"); nsfAg = nsfDb.getDesign().getAgent("LotusScript-Web-Agent"); runContext = nsfAg.createRunContext(true); runContext.redirectOutput(AGENT_REDIR.MEMORY); runContext.documentContext(nsfNote); runContext.run(false); /* How can I run the agent as "Effective User/Acme" and not as agent signer ?? */ prints = runContext.getStdoutBuffer(); } finally { if (runContext != null) runContext.free(); if (nsfAg != null) nsfAg.free(); if (nsfDb != null) nsfDb.free(); if (nsfSession != null) nsfSession.free(); }
- Domino-JNA: я не могу запускать агенты от имени пользователя, но я могу получить выходные данные (или я не знаю как)
String prints = NotesGC.runWithAutoGC(() -> { String user = "Effective User/Acme"; NotesDatabase ndb = new NotesDatabase(null, "path/db.nsf", user); NotesAgent ag = ndb.getAgent("LotusScript-Web-Agent"); Writer printWriter = new StringWriter(); NotesAgentRunContext narc = new NotesAgentRunContext(); narc.setUsername(user); narc.setCheckSecurity(true); narc.setOutputWriter(printWriter); ag.run(narc); /* How can I run the agent as "Effective User/Acme" and not as agent signer ?? */ return printWriter.toString(); });
Кто-нибудь знает решение или может дать мне подсказку, как решить эту ситуацию?