0

我正在使用带有标准文件上传控件的 XPage 上传文件。在数据源上,我有一个 WebQuerySave 代理。

WQS-agent 在 LotusScript 中。

用户正在上传一个 XML 文件,我们有一个现有的帮助程序库来帮助解析正在上传的 XML - 这就是 WQS 在 LotusScript 中的原因。

由于我无法将上传的文件分离到服务器,我正在调用 Java 代理来将 XML 读取为字符串并将其存储在文档中。

我正在使用参数文档调用 Java 代理,所有基本内容。

在参数文档中,我包含了包含附件的文档的 UniversalID,这是我的问题!

Java 代理声称 UniversalID 无效:

“HTTP JVM:4091 无效的通用 ID”

但是,如果我尝试在 LotusScript 代理中查找文档,则在调用 Java 代理之前使用相同的 UNID 找到该文档: Set tempDoc = db.Getdocumentbyunid(unid)

Java 代码:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import lotus.domino.Agent;
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.Session;

public class JavaAgent extends AgentBase {
    public void NotesMain() {
        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            Database db = agentContext.getCurrentDatabase();
            Agent agent = agentContext.getCurrentAgent();

            // Get document used for passing data
            System.out.println(agent.getParameterDocID());

            Document paramDoc = db.getDocumentByID(agent.getParameterDocID());
            String UniversalID = paramDoc.getItemValueString("unid");

            System.out.println(UniversalID);
            Document doc = db.getDocumentByUNID(UniversalID);

当我运行 Java 代理时,我不会从打印命令中得到任何东西,但也许这是意料之中的......(?)

如果我在现有文档上手动运行所有内容,它就可以工作。但不是通过浏览器提交的文件。

对我来说,感觉包含附件的文档还没有准备好用于 Java。

多米诺骨牌 8.5.3

非常感谢任何帮助!

/J

PS我是Java新手,所以你知道.. ;-)

4

4 回答 4

1

我似乎记得上下文文档有一个临时 UNID,当您调用 save() 方法时,它会更改为其永久值。所以我最好的猜测是,您的 LotusScript 代码在保存之前正在读取上下文文档的 universalId 属性。

因此,如果我是对的,只需将您的调用移动到 LotusScript 代理中获取 universalId 属性,直到您保存上下文文档并将该值传递到您的 Java 代理中。

于 2013-02-20T21:14:32.943 回答
1

您可以将扩展库与 extlibx 包一起使用吗?如果是这样,那么已经内置了一个 XML 解析器,sbt.XmlNavigator。请参阅 XPages Extension Library 书的第 13 章。避免调用调用 Java 代理的 LotusScript 代理可能值得一看。您可以使用 Java 中的这些包,但也可以使用 SSJS。撕掉创可贴并使用它(或另一个基于 Java 的 XML 解析器,我相信有一些)可能更容易。现在可能有点工作,但对未来会更有用。

于 2013-02-20T16:37:24.410 回答
0

我可以解决它的唯一方法是将 documentContext 中的所有项目复制到我在数据库中创建的新文档中。

  • 保存那个
  • 检索此新文档的 UNID
  • 将其传递给 agent.run - java,它成功了!
于 2013-02-20T21:58:05.957 回答
0

paramDoc请记住在将其传递给 Java 代理之前保存在 LotusScript 代理中。

于 2013-02-20T17:14:46.237 回答