在XPage上载中从LotusScript调用Java代理

时间:2013-02-20 16:22:09

标签: java xpages lotus-domino

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

WQS-agent在LotusScript中。

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

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

我正在使用param文档调用Java代理,这些都是基本的东西。

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

Java代理声称UniversalID无效:

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

但是,如果我尝试在LotusScript代理中找到该文档,则在调用Java代理之前,使用相同的UNID找到该文档: 设置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。

Domino 8.5.3

非常感谢任何帮助!

/ J

P.S。我是一个Java新手,所以你知道..; - )

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  • 保存
  • 检索此新文档的UNID
  • 将它传递给agent.run - java并且它有效!