我在 Domino 上开发了一个 OSGi 包,它应该在用户的上下文中执行代码。LotusScript 中存在大量代码,重写工作量也很大(Web 代理)。所以我正在寻找一种解决方案,以用户身份运行这些 Web 代理并获取输出(打印)。我已经尝试了很多,但现在我被困住了,我可以将代理作为代理签名者(session.effectiveUserName 的结果)运行并且能够获取输出或以用户身份运行代理但不能抓住输出。但是因为 LotusScript 代码必须尊重 reader 字段是必不可少的,所以它必须以用户身份运行。而且因为我需要代理的输出来用 Java 完成其余的工作,所以我还需要一种方法来获取 StdOut。
到目前为止我已经尝试过:
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?? */
Darwino NAPI:我不能以用户身份运行代理,但我可以获取输出(或者我不知道如何)
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(); });
有谁知道解决方案或可以给我一个提示来解决这种情况?