2012-08-08 103 views
0

我重复了数据在当前数据库中循环通过文档的位置,这些文档包含数据库和视图名称。重复然后打开数据库和视图,并从在其中检索数据:无法从XPiNC引用另一个数据库中的视图

var dbOther:NotesDatabase = session.getDatabase(null, doc.getItemValueString("Database")); 
if(dbOther != null){ 
    var lookupView:NotesView = dbOther.getView(doc.getItemValueString("ViewName")); 
    var viewNav:NotesViewNavigator = lookupView.createViewNavFromCategory(key); 
}  

这适用于所有的浏览器正常,但如果我认为在Notes客户端,我得到了以下错误的XPage:发生异常调用方法NotesDatabase的。 getView(string)null

我测试过,通过将Server和FilePath属性写入日志来设置dbOther变量。我通过使用getViews和getAliases生成一个循环来检查它是否可以看到视图,并且所有视图别名都被写入到日志中而没有问题。

我已经手动输入了视图名称,以防未正确选择文档中的值,但收到相同的错误。

有没有一种方法可以连接到XPiNC中另一个数据库中的视图?我找到了一个XSnippet,它允许您动态地将视图数据源添加到您的页面,我认为这可能会解决我的问题,但希望在重新编写所有内容之前了解是否有其他解决方案!

+0

很久以前我在这里阅读有关这个​​问题:http://xpages.info/XPagesHome.nsf/Entry.xsp?documentId=B21BE03574FE36AD852578CB0066B5AD。基本上,作者使用'@Name(“[CN]”,@ Subset(@DbName(),1))+“!! dbname.nsf”'的语法来调用数据库。可能会对你有用。 – Naveen 2012-08-08 14:34:20

+0

我原本是这样写的。这是一个问题。我被告知它在后来的版本中修复了,但我没有真正验证过。我不再用XPiNC做很多事情。 – 2012-08-08 18:29:03

+0

在发布之前,我确实找到了此解决方案,但我不确定如何将其设置为NotesDatabase对象。它没有检索数据库,但我不知道如何使用getView? – 2012-08-09 08:42:29

回答

3

尝试一些得到一个数据库上手柄的这些其他方法:

这一次使用""代替null参数来指示当前服务器:

var dbOther:NotesDatabase = session.getDatabase("", doc.getItemValueString("Database")) 

这一次使用database.getServer(),而不是null参数:

var dbOther:NotesDatabase = session.getDatabase(database.getServer(), doc.getItemValueString("Database")) 

此人使用sessionAsSigner获得访问t Ø数据库(而不是使用当前用户的凭据):

var dbOther:NotesDatabase = sessionAsSigner.getDatabase(database.getServer(), doc.getItemValueString("Database")) 

您是否使用Lotus Notes 8.5.3客户端?

+0

嗨,我试过你建议的每个解决方案,修复问题的方法是使用database.getServer()。感谢您的全力帮助 – 2012-08-09 08:39:57

+0

database.getServer()是解决方案的原因是基于“什么是当前服务器?”这个问题。 'null'和'“”'用于当前服务器。在浏览器中,当前服务器是运行应用程序的服务器。但在XPiNC中,当前服务器是本地机器,因为本地XULRunner是提供XPage的服务器。如果您没有数据库的本地副本,则必须告诉Notes要使用哪个服务器。 – 2014-02-20 07:16:15