1

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

有谁知道解决方案或可以给我一个提示来解决这种情况?

4

0 回答 0