XPages Repeat控件:如何获取外部数据库文档的可访问URL
实现XPages Repeat控件中文档主题的跳转功能
要让Repeat里的主题文本跳转到外部数据库extdb.nsf的对应文档XPage,只需要给<xp:link>添加value属性,用XPages的API或手动构造正确的文档URL即可,以下是两种可靠的实现方式:
方法一:用XPages内置API生成URL(推荐)
这种方式会自动处理数据库路径、文档UNID等参数,避免硬编码出错,性能也更优:
修改你的<xp:link>标签,添加xp:this.value属性:
<xp:link escape="true" id="link1" styleClass="a"> <xp:this.title><![CDATA[#{javascript:rowData.getDocument().getItemValueString("Subject")}]]></xp:this.title> <xp:this.text><![CDATA[#{javascript:rowData.getDocument().getItemValueString("Subject")}]]></xp:this.text> <xp:this.value><![CDATA[#{javascript: // 获取当前视图条目对应的文档 var doc = rowData.getDocument(); // 获取文档所属的外部数据库 var targetDb = doc.getParentDatabase(); // 替换成你实际用于显示文档的XPage名称(比如"document.xsp") var targetXPage = "document.xsp"; // 调用内置API生成跳转URL return com.ibm.xsp.model.domino.DominoUtils.getDocumentUrl(targetDb, doc, targetXPage); }]]></xp:this.value> </xp:link>
优化提示
如果你的视图已经包含文档UNID(大部分默认视图都有),可以不用打开文档,直接通过视图条目获取UNID,提升性能:
把rowData.getDocument()相关的代码替换成rowData.getUniversalID(),比如主题文本可以改成:
rowData.getColumnValue("Subject")
这样避免频繁打开文档,减少资源消耗。
方法二:手动构造URL(适合自定义参数场景)
如果你需要添加额外的URL参数,或者明确控制路径,可以手动拼接URL:
<xp:link escape="true" id="link1" styleClass="a"> <xp:this.title><![CDATA[#{javascript:rowData.getDocument().getItemValueString("Subject")}]]></xp:this.title> <xp:this.text><![CDATA[#{javascript:rowData.getDocument().getItemValueString("Subject")}]]></xp:this.text> <xp:this.value><![CDATA[#{javascript: // 获取文档UNID var docUNID = rowData.getDocument().getUniversalID(); // 拼接URL:外部数据库路径 + XPage名称 + 文档ID参数 // 如果是跨服务器访问,需要换成完整URL,比如"http://yourserver/extdb.nsf/document.xsp?..." return "extdb.nsf/document.xsp?documentId=" + docUNID + "&action=openDocument"; }]]></xp:this.value> </xp:link>
注意事项
- 确保
extdb.nsf的访问权限设置正确,当前应用的用户能访问目标数据库和文档。 - 务必替换代码中的
targetXPage或手动拼接里的XPage名称为你实际配置的那个(比如你可能用的是viewDoc.xsp)。
内容的提问来源于stack exchange,提问作者theBastian
相关产品推荐
相关产品推荐

