0

我想通过质子接口从 node.js 运行 Java 代理。可悲的是我无法让代理上下文工作

Node.js 代码

async function callEvalAgent(query) {
  const agent = await db.useAgent({ name: "search" });
  console.log("got the agent");

  const requestDocUNID = await db.createDocument({
      document: {
        Form: "searchRequest",
        query
      }
  });
  console.log("queryDoc created");
  console.log(requestDocUNID);

  await agent.run({
    selection: { search: { query: "Form = 'document'" } },
    context: { unid: requestDocUNID }
  });

  ...
}

输出:

got the agent
queryDoc created
B72CA8819EDA0691C1258592003BFBE5

...

代理代码

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();
          Document requestDoc = agentContext.getDocumentContext();
          String query = requestDoc.getItemValueString("query");
          
         ...

      } catch(Exception e) {
          System.out.println("bla");
          e.printStackTrace();
      }
   }
}

运行代码时,我得到一个NullPointerExceptionat

String query = requestDoc.getItemValueString("query");

由于 agentContext 为空,因此在 Domino 服务器上。如果我之后手动检查它,那么我认为具有给定 UNID 的文档会出现在我的视图中。

我做错了什么?使用与此处的 HCL 示例相同的方法

4

1 回答 1

1

文档应该更清楚。

文档应说明提供给代理的可选文档可用于代理使用ParameterDocID.

在 Java 代理中执行以下操作:

    final Session session = getSession();
    final Database db = session.getCurrentDatabase();
    final AgentContext agentContext = session.getAgentContext();
    final Agent agent = agentContext.getCurrentAgent();
    final String noteid = agent.getParameterDocID();
    final Document context = db.getDocumentByID(noteid);

在 LotusScript 代理中执行如下操作:

    Dim session As New NotesSession
    Dim agent As NotesAgent
    Dim db As NotesDatabase
    Dim context As NotesDocument

    Set agent = session.CurrentAgent
    Set db = session.CurrentDatabase

    Set context = db.GetDocumentByID(agent.ParameterDocID)
于 2020-07-31T19:34:39.820 回答