我对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);
它工作得很漂亮 - 但我想修改代码以引用不同数据库中的视图。在Brad的帖子中,代码可以被增强&#34;实现这一目标。但我一直在尝试和搜索一段时间,但无法完成增强。
感谢您的帮助。 --Lisa&安培;
答案 0 :(得分:4)
在第二行中,您可以通过从组件 viewPanel1 中提取的 viewName 在视图上建立句柄。您的电话是 database.getView(viewName)。这相当于NotesDatabase .getView() 的程序化参考。如果您获得了要连接的其他数据库的句柄,则可以在该句柄上调用相同的 .getView()调用。
首先,建立与其他数据库的连接;这是通过 session 关键字(NotesSession)完成的,如下:
var extDB = session.getDatabase(dbName)
正如Howard指出的那样, session 关键字是当前用户的会话,并且将受到该用户的所有ACL权限/分配/角色的约束。如果您需要提升权限以编程方式公开其他数据,您可以使用 sessionAsSigner 关键字(也是 NotesSession ,只需使用签名者的凭据,您自己) ,或者您可以将NSF签名为服务器ID,以赋予它更高的权限。
然后像往常一样使用 extDB 句柄代替数据库关键字(与session.getCurrentDatabase()大致相同);像这样:
var vw = extDB.getView(viewName)
如果在该NSF中不存在该名称的视图,那么 NotesDatabase.getView()调用将返回null,因此您需要确保它是&#39;在那里并以编程方式检查并处理空返回。
[编辑] 由于您正在使用 @DbColumn 的移植 @ function ,因此使用Frantisek Kossuth建议的方法可能很简单,但依赖于当前用户的NotesSession 。要覆盖该用户的(缺少)权限并获得所有文档的完全可见性&#39;在单独的NSF中,如果使用 sessionAsSigner 关键字,您仍然需要在the columnValues上获取View的句柄,如上所示。 [/编辑]
答案 1 :(得分:1)