以用户身份运行lotusscript domino代理并从javaosgi包获取sdtoutput(lotusscript打印)

0dxa2lsx  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(222)

我在domino上开发了一个osgi包,它应该在用户上下文中执行代码。lotusscript中也有很多代码需要重写(web代理)。因此,我正在寻找一种解决方案,以用户身份运行这些web代理并获取输出(打印)。我已经尝试了很多,但现在我被卡住了,我要么以代理签名者的身份运行代理(session.effectiveusername的结果)并且能够获取输出,要么以用户的身份运行代理,但是不能获取输出。但是由于lotusscript代码必须尊重reader字段这一点很重要,所以它必须以用户身份运行。因为我需要代理的输出来用java完成其余的工作,所以我还需要一种获取stdout的方法。
到目前为止,我尝试了:
openntf dominoapi:我可以以用户身份运行代理,但是我不能获取输出(或者我不知道如何获取)

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();
}

dominojna:我不能以用户身份运行代理,但我可以获取输出(或者我不知道如何)

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();
});

有没有人知道解决办法或者能给我一个提示来解决这个问题?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题