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>

如果数据库本身,则不需要数据库名称。