documentId 解析代码不会执行 XPages
documentId resolving code doesn't get executed XPages
在我的 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
但不是 heloooo :(
我做错了什么?提前致谢
最可能的原因是 ignoreRequestParams
未设置为 true
。除非您进行设置,否则数据源会根据 URL 查询字符串参数(HTTP 请求参数)检索有关要编辑哪个文档的所有细节。因此,URL 查询字符串参数优先,在未设置任何内容的情况下,这意味着 "use a new document"。如果您已定义 URL 查询字符串参数应优先,则 运行 使您的代码仅在事后忽略它是低效的。结果,action="openDocument"
也被忽略了 - 如果您在查询字符串中有一个 docId,它将打开它,否则它将创建一个新文档。
documentId
只能在页面首次加载时处理一次。根据数据源是绑定到面板还是 XPage/自定义控件,它也会在 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>
如果数据库本身,则不需要数据库名称。
在我的 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
但不是 heloooo :(
我做错了什么?提前致谢
最可能的原因是 ignoreRequestParams
未设置为 true
。除非您进行设置,否则数据源会根据 URL 查询字符串参数(HTTP 请求参数)检索有关要编辑哪个文档的所有细节。因此,URL 查询字符串参数优先,在未设置任何内容的情况下,这意味着 "use a new document"。如果您已定义 URL 查询字符串参数应优先,则 运行 使您的代码仅在事后忽略它是低效的。结果,action="openDocument"
也被忽略了 - 如果您在查询字符串中有一个 docId,它将打开它,否则它将创建一个新文档。
documentId
只能在页面首次加载时处理一次。根据数据源是绑定到面板还是 XPage/自定义控件,它也会在 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>
如果数据库本身,则不需要数据库名称。