【问题标题】:documentId resolving code doesn't get executed XPagesdocumentId 解析代码没有被执行 XPages
【发布时间】:2020-06-20 19:27:06
【问题描述】:

在我的 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 :(

我做错了什么?提前致谢

【问题讨论】:

  • documentId 中的代码可能没有运行。在 DominoDocument 操作之前没有运行其他代码—— doc_source 是在哪里定义的?还有什么是 Osonava_UI?删除此代码,打印语句可能会起作用。

标签: xpages lotus-domino ssjs


【解决方案1】:

最可能的原因是ignoreRequestParams 未设置为true。除非您设置,否则数据源将根据 URL 查询字符串参数(HTTP 请求参数)检索有关要编辑的文档的所有细节。因此,URL 查询字符串参数优先,在没有设置任何内容的情况下,这意味着“使用新文档”。如果您已定义 URL 查询字符串参数应该优先,那么运行您的代码之后仅仅忽略它是低效的。因此,action="openDocument" 也会被忽略 - 如果查询字符串中有 docId,它将打开它,否则它将创建一个新文档。

documentId 只能在页面首次加载时处理一次。根据数据源是绑定到面板还是 XPage / 自定义控件,它也会在 beforePageLoad 事件之前运行。所以运行时绑定(#{javascript:...)没有效果。 ${javascript:... 会避免混淆。

错误处理可能有助于识别是否存在错误。 XPages OpenLog Logger 是最普遍的一种(免责声明,我是作者)https://openntf.org/main.nsf/project.xsp?r=project/XPages%20OpenLog%20Logger

【讨论】:

    【解决方案2】:

    将 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多