为什么我的 xpage 看不到另一个数据库中的视图?
Why can't my xpage see the views in another database?
(这是用于 Web 浏览器的 XPages 应用程序)我为来自另一个数据库的视图创建了一个视图面板。视图显示为空,尽管我可以使用 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,刷新了视图索引,甚至运行修复了数据库。该页面仍然不会显示文档。 (没有读者字段,顺便说一句)
所以,然后我添加了一个计算字段来告诉我发生了什么。
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 - 是什么原因造成的?数据库中可能有 200 个视图。数据库服务器正确,标题正确,路径正确。因此,它似乎可以看到正确的数据库。但是,然后视图名称变为空白。所以,pview 不是空的(因为我检查过)但它是空的。我不明白。这么简单的事情让我抓狂。
仅供参考,我使用 xpages 已经有大约 5 年了,所以我确信我遗漏了一些简单的东西,但我就是不能 'see the forest for the trees'。有人可以给我指出正确的方向吗?
如果您使用 "No Login/Anonymous" 访问网络,
然后确保 "Public Access" 已设置
在您的 CustomerParts.nsf -- 通过以下所有方式:
- 角色 "Anonymous" 的 ACL 允许 "Read Public Documents";
- 该视图上的每个文档都有一个字段“$PublicAccess”设置为文本“1”;
- 该目标视图设置为 "Public Access" -- 通过安全 "key" 选项卡,在视图的 "property box";
否则,如果您确实在 Web 上登录,那么 --verify all is ok,在该视图的安全性 "key" 选项卡上。
您是否在应用程序代码的其他地方获取了该数据库?如果是这样,您是在该数据库对象上调用 .recycle()
吗?
我在迁移到 Java 早期学到的一件事是,如果您回收数据库的句柄,return 原始值(例如字符串)的吸气剂仍然 return 价值。大概它被缓存了。所以 getTitle()
和 getFilePath()
仍然是 return 一个值,但是任何变得更复杂的东西都不起作用。我这样做已经有好几年了,但我认为它只是 return 什么都没有。
在极少数情况下我仍然需要回收(我几乎所有项目都使用 ODA),我只循环回收。每个会话的最大句柄数如此之高,因此没有 "PANIC: Lookup handles out of range" 循环外 Domino 对象数量的风险。
(这是用于 Web 浏览器的 XPages 应用程序)我为来自另一个数据库的视图创建了一个视图面板。视图显示为空,尽管我可以使用 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,刷新了视图索引,甚至运行修复了数据库。该页面仍然不会显示文档。 (没有读者字段,顺便说一句)
所以,然后我添加了一个计算字段来告诉我发生了什么。
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 - 是什么原因造成的?数据库中可能有 200 个视图。数据库服务器正确,标题正确,路径正确。因此,它似乎可以看到正确的数据库。但是,然后视图名称变为空白。所以,pview 不是空的(因为我检查过)但它是空的。我不明白。这么简单的事情让我抓狂。
仅供参考,我使用 xpages 已经有大约 5 年了,所以我确信我遗漏了一些简单的东西,但我就是不能 'see the forest for the trees'。有人可以给我指出正确的方向吗?
如果您使用 "No Login/Anonymous" 访问网络, 然后确保 "Public Access" 已设置 在您的 CustomerParts.nsf -- 通过以下所有方式:
- 角色 "Anonymous" 的 ACL 允许 "Read Public Documents";
- 该视图上的每个文档都有一个字段“$PublicAccess”设置为文本“1”;
- 该目标视图设置为 "Public Access" -- 通过安全 "key" 选项卡,在视图的 "property box";
否则,如果您确实在 Web 上登录,那么 --verify all is ok,在该视图的安全性 "key" 选项卡上。
您是否在应用程序代码的其他地方获取了该数据库?如果是这样,您是在该数据库对象上调用 .recycle()
吗?
我在迁移到 Java 早期学到的一件事是,如果您回收数据库的句柄,return 原始值(例如字符串)的吸气剂仍然 return 价值。大概它被缓存了。所以 getTitle()
和 getFilePath()
仍然是 return 一个值,但是任何变得更复杂的东西都不起作用。我这样做已经有好几年了,但我认为它只是 return 什么都没有。
在极少数情况下我仍然需要回收(我几乎所有项目都使用 ODA),我只循环回收。每个会话的最大句柄数如此之高,因此没有 "PANIC: Lookup handles out of range" 循环外 Domino 对象数量的风险。