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?

xpages视图

如何在 XPage 上配置 xe:viewFileItemService 以过滤分类视图中的数据?

避免静态视图引用,但启用不同的活动来修改视图

选择器视图中来自核心数据的数据