为什么我的xpage看不到另一个数据库中的视图?

时间:2017-11-19 01:36:29

标签: xpages views

(这是用于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年,所以我肯定我错过了一些简单的东西,但我不能'看到森林里的树木'。有人可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

您是否在应用程序的代码中的其他地方获得了该数据库?如果是,您是否在该数据库对象上调用.recycle()

我在迁移到Java时早期学到的一件事是,如果将句柄循环到数据库,返回原始值的getter(例如字符串)仍将返回该值。据推测它会被缓存。因此getTitle()getFilePath()仍将返回一个值,但任何更复杂的内容都无效。我这样做了好几年了,但我觉得它什么都不回。

在极少数情况下,我仍然需要回收(几乎所有项目都使用ODA),我只在循环中循环使用。每个会话的最大句柄非常高,没有“PANIC:查找处理超出范围”的风险,因为循环外的Domino对象数量。

答案 1 :(得分:1)

如果您正在使用&#34;没有登录/匿名&#34;为了您的网络访问, 然后确保&#34;公共访问&#34;正在设置 在您的CustomerParts.nsf中 - 通过以下所有方式:

  • 角色的ACL&#34; Anonymous&#34;允许&#34;阅读公共文件&#34 ;;
  • 该视图中的每个文档都有一个字段&#34; $ PublicAccess&#34;设置为文本&#34; 1&#34; ;
  • 该目标视图设置为&#34;公共访问&#34; - 通过安全&#34;键&#34;选项卡,在视图&#34;属性框&#34;;

否则,如果您在网上登录,那么 - 验证一切正常,在该视图的安全性&#34;键&#34;标签