xpages:引用来自不同数据库/应用程序的视图
Posted
技术标签:
【中文标题】xpages:引用来自不同数据库/应用程序的视图【英文标题】:xpages: referencing a view from a different database/application 【发布时间】:2015-05-20 14:00:04 【问题描述】:我对 xpages 很陌生。一段时间以来,我一直在网上搜索我的问题的答案。似乎答案应该很简单。
我一直在玩我从 Brad Balassaitis 出色的 Xcellerent.net 站点获得的一段代码,该站点动态填充视图面板的“jumptoitems”列表。代码从 xpage 的 beforeRenderResponse 事件运行。
var viewName = getComponent('viewPanel1').getData().getViewName();
var vw = database.getView(viewName);
var colNum = 1;
var cols:Vector = vw.getColumns();
for (var i=0; i < cols.length; i++)
if (cols[i].isSorted() && !cols[i].isHidden())
colNum = i + 1;
break;
var letters = @DbColumn(null, viewName, colNum);
var options = @Trim(@Unique(@UpperCase(@Left(letters, 1))))
viewScope.put('jumpToOptions', options);
它工作得很好——但我想修改代码以引用不同数据库中的视图。在帖子中,布拉德说可以“增强”代码来实现这一点。但我一直在试验和寻找一段时间,无法完成增强。
感谢您的帮助。 --丽莎&
【问题讨论】:
【参考方案1】:在您的第二行中,您通过从组件 viewPanel1 中提取的 viewName 建立视图的句柄。您的电话是 database.getView(viewName)。这相当于NotesDatabase.getView() 的程序引用。如果您获得了要连接的其他数据库的句柄,则可以在该句柄上调用相同的 .getView() 调用。
首先,建立与其他数据库的连接;这是通过 session 关键字(NotesSession)完成的,例如:
var extDB = session.getDatabase(dbName)
正如霍华德所指出的那样,session 关键字是当前用户的会话,并将作为该用户受制于所有 ACL 权限/分配/角色。如果您需要提升权限以以编程方式公开其他数据,您可以使用 sessionAsSigner 关键字(这也是一个 NotesSession,只需使用签名者的凭据,您自己,或者您可以将 NSF 签名为服务器 ID,以赋予它更高的权限。
然后像往常一样使用您的 extDB 句柄代替 database 关键字(与 session.getCurrentDatabase() 大致相同);像这样:
var vw = extDB.getView(viewName)
NotesDatabase.getView() 如果该名称的视图在该 NSF 中不存在,则调用将返回 null,因此您需要确保它存在并以编程方式检查和处理一个空返回。
[编辑] 由于您正在使用 @DbColumn 的移植 @ 函数,因此使用 Frantisek Kossuth 建议的方法可能很容易,但依赖于 NotesSession 当前用户。要覆盖该用户的(缺乏)权限并获得单独 NSF 中所有文档值的完全可见性,您仍然需要使用 sessionAsSigner em> 关键字。 [/编辑]
【讨论】:
补充 Eric 的出色回应,如果您的用户无权访问其他数据库,您可以使用 sessionAsSigner 根据 XPage 设计的签名者而不是登录的用户名来获取访问权限。 感谢您的回答。这正是我所需要的。 很高兴听到@LisaGerlich。如果您认为它足够,请接受答案。【参考方案2】:根据您的代码,您还需要在@DbColumn
公式中指定数据库。
var letters = @DbColumn([database], viewName, colNum);
你可以阅读它here 或there...
除了文档格式之外,您还可以使用 API 格式 "server!!database"
作为单个字符串值。
【讨论】:
以上是关于xpages:引用来自不同数据库/应用程序的视图的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 视图可以引用来自不同数据集/项目的其他表和视图吗?
如何将 CKEditor 自定义配置文件添加到 XPages?