我正在使用带有标准文件上传控件的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新手,所以你知道..; - )
答案 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中的所有项目复制到我在数据库中创建的新文档中。