在我的XPage中,我需要设置一个数据源(Domino文档(
我试着这样做:
<xp:this.data>
<xp:dominoDocument var="requestDocument" action="openDocument" databaseName="#{javascript: print('db ok'); return database.getFilePath();}"
documentId="#{javascript:
print('heloooo');
var conclusion = database.getDocumentByUNID(doc_source.getDocument().getParentDocumentUNID());
var oConclusion = new OsnovaUI_document(conclusion);
var requestDoc = oConclusion.getMainDocument();
print('docID: ' + requestDoc.getUniversalID());
return requestDoc.getUniversalID();
}">
</xp:dominoDocument>
</xp:this.data>
我注意到documentId
中的代码部分没有被执行。完全这就是为什么我把heloooo
放在那里。然而,databaseName
如预期的那样工作。在控制台中,我总是看到
09.03.2020 00:52:11 HTTP JVM: db ok
但并非如此:(
我做错了什么?提前感谢
最可能的原因是ignoreRequestParams
未设置为true
。除非您设置了这一点,否则数据源将根据URL查询字符串参数(HTTP请求参数(检索要编辑的文档的所有细节。因此,URL查询字符串参数优先,在没有设置任何内容的情况下,这意味着"使用新文档"。如果您已经定义了URL查询字符串参数应该优先,那么运行代码之后只忽略它是低效的。因此,action="openDocument"
也被忽略了——如果查询字符串中有一个docId,它会打开它,否则它会创建一个新文档。
当页面首次加载时,documentId
只能被处理一次。根据数据源是绑定到面板还是XPage/Custom控件,它也将在beforePageLoad
事件之前运行。所以运行时绑定(#{javascript:...
(没有任何作用。${javascript:...
将避免混淆。
错误处理可能有助于识别是否存在错误。XPages OpenLog Logger是最普遍的(免责声明,我是作者(https://openntf.org/main.nsf/project.xsp?r=project/XPages%20OpenLog%20Logger.
更改要在页面加载($(而不是动态(#(时计算的documentId:
<xp:this.data>
<xp:dominoDocument var="requestDocument" action="openDocument">
<xp:this.documentId><![CDATA[${javascript:
var conclusion = database.getDocumentByUNID(doc_source.getDocument().getParentDocumentUNID());
var oConclusion = new OsnovaUI_document(conclusion);
var requestDoc = oConclusion.getMainDocument();
print('docID: ' + requestDoc.getUniversalID());
return requestDoc.getUniversalID();
}]]></xp:this.documentId>
</xp:dominoDocument>
</xp:this.data>
如果数据库本身就是数据库,则不需要databaseName。