(这是用于Web浏览器的XPage应用程序)我为另一个数据库中的视图创建了一个视图面板。尽管我可以使用Notes客户端清楚地看到大约15个文档,但视图显示为空。这是观点来源......
<xp:viewPanel rows="30" id="viewPanel3">
<xp:this.facets>
<xp:pager partialRefresh="true"
layout="Previous Group Next" xp:key="headerPager" id="pager2">
</xp:pager>
</xp:this.facets>
<xp:this.data>
<xp:dominoView var="view3"
databaseName="test\Customer\part.nsf"
viewName="LkpMscParts-55EQUIPMENT">
</xp:dominoView>
</xp:this.data>
我验证了ACL,刷新了视图索引,甚至在数据库上运行了fixup。该页面仍然不会显示文档。 (没有读者领域,顺便说一句)
所以,然后我添加了一个计算字段来告诉我发生了什么。
var filepath = database.getFilePath();
var partfile = filepath.toLowerCase().replace("ereq_main","part");
var partdb = session.getDatabase(database.getServer(),partfile,false);
print("partdb views total = "+partdb.getViews().length)
for(x=0;x<partdb.getViews.length;x++){
print("v name = "+partdb.getViews[x].getName());
}
print("partdb server = "+partdb.getServer());
print("partdb title = "+partdb.getTitle())
var vname = "LkpMscParts-55EQUIPMENT";
sessionScope.PartViewName = vname;
var pview = partdb.getView(vname);
if(pview==null){
sessionScope.PartViewError = "Nothing for LkpMscParts-55EQUIPMENT.";
print("pview is null")
return null;
}
var vecol = pview.getAllEntries();
print("partdb = "+partdb.getFilePath());
print("pview = "+pview.getName());
print("pview lines = "+pview.getRowLines());
print("vecol count = "+vecol.getCount())
return vname;
我在控制台上看到了这个:
11/18/2017 08:10:48 PM HTTP JVM: partdb views total = 0
11/18/2017 08:10:48 PM HTTP JVM: partdb server = CN=domsvr3/O=abc
11/18/2017 08:10:48 PM HTTP JVM: partdb title = Inventory Parts
11/18/2017 08:10:48 PM HTTP JVM: partdb = test\Customer\part.nsf
11/18/2017 08:10:48 PM HTTP JVM: pview =
然后崩溃
Script interpreter error, line=27, col=46: [TypeError] Exception occurred calling method NotesView.getRowLines() Notes error: Invalid or nonexistent document (LkpMscParts-55EQUIPMENT)
Notes error: Invalid or nonexistent document (LkpMscParts-55EQUIPMENT)
注意视图数组的长度是0 - 给出了什么? db中可能有200个视图。数据库服务器正确,标题正确且路径正确。因此,看起来它可以看到正确的数据库。但是,视图名称是空白的。所以,pview不是null(因为我检查过它),但它是空的。我不明白。这么简单的事情让我疯狂。
刚才,我已经和xpages一起工作了大约5年,所以我肯定我错过了一些简单的东西,但我不能'看到森林里的树木'。有人可以指出我正确的方向吗?
答案 0 :(得分:2)
您是否在应用程序的代码中的其他地方获得了该数据库?如果是,您是否在该数据库对象上调用.recycle()
?
我在迁移到Java时早期学到的一件事是,如果将句柄循环到数据库,返回原始值的getter(例如字符串)仍将返回该值。据推测它会被缓存。因此getTitle()
和getFilePath()
仍将返回一个值,但任何更复杂的内容都无效。我这样做了好几年了,但我觉得它什么都不回。
在极少数情况下,我仍然需要回收(几乎所有项目都使用ODA),我只在循环中循环使用。每个会话的最大句柄非常高,没有“PANIC:查找处理超出范围”的风险,因为循环外的Domino对象数量。
答案 1 :(得分:1)
如果您正在使用&#34;没有登录/匿名&#34;为了您的网络访问, 然后确保&#34;公共访问&#34;正在设置 在您的CustomerParts.nsf中 - 通过以下所有方式:
否则,如果您在网上登录,那么 - 验证一切正常,在该视图的安全性&#34;键&#34;标签