我的xPage SSJS在行中失败:
viewEntry = view.getNext(viewEntry);
有错误
注释错误:在索引中找不到条目
我确实将此选项设置为false,但无济于事:
view.setAutoUpdate(false);
所以我怀疑它失败了,因为用户由于设置了读取器访问权限而无法访问NEXT文档。因此,此类文档无法在视图中看到,而只能在TOTALS中看到。如何解决?
另一个问题是,如果Domino服务器崩溃,那么
这是我的代码:
var view:NotesView = database.getView("xxxxxxx");
view.setAutoUpdate(false);
var viewNav:NotesViewNavigator = view.createViewNav();
var viewEntry:NotesViewEntry = viewNav.getFirst();
while (viewEntry != null) {
if (viewEntry.isCategory()){
// I work with category entry data
} else if(viewEntry.isTotal()){
// I collect totals
} else {
// I work with view entry
}
var tmpEntry:NotesViewEntry = viewNav.getNext(viewEntry);
viewEntry.recycle();
viewEntry = tmpEntry;
}
它在以下行中失败:viewNav.getNext(viewEntry)
Script interpreter error, line=1001, col=37: [TypeError] Exception occurred calling method NotesViewNavigator.getNext(lotus.domino.local.ViewEntry)
Notes error: Entry not found in index ((xxxxxxx))
tmpEntry:NotesViewEntry = viewNav.getNext(viewEntry);
那么如果当前或下一个无效,我该如何真正进入下一个条目?
答案 0 :(得分:2)
也许值得验证在索引中找不到哪个条目。根据代码的上下文,它可能是第一个。例如,可能已对其进行了更新以将其从视图中移除。首先检查null。读者访问权限也可能是一个问题,如果您使用的是ViewNavigator,则有不同的访问原因。使用try / catch也可以验证您的假设-sessionAsSigner(或ODA的本机会话)将有权访问下一个文档,这将允许日志记录进行确认。确定原因后,就可以对其进行编码。
ViewEntry.isValid()验证软删除或用户是否没有访问权限,如ViewEntry和Document的文档中所述,它们都具有相同的方法。
答案 1 :(得分:0)
使用视图导航器。如果用户无法访问条目,则使用viewentry.getUniversalId()
进行的简单检查将返回null,因此您甚至可以在视图条目迭代中将其跳过。
请尝试以下代码:
view.setAutoUpdate(false);
ViewNavigator nav = view.createViewNav();
ViewEntry entry = nav.getCurrent();
ViewEntry nextEntry = null;
while (entry != null) {
if (entry.isCategory()) {
nextEntry = nav.getNextSibling();
} else {
nextEntry = nav.getNext();
}
if (!entry.isTotal()) {
// do something with the entry
} else {
// skipped entry
}
//don't forget to recycle!
entry.recycle();
entry = nextEntry;
}
view.setAutoUpdate(true);
答案 2 :(得分:0)
结合条目的有效性检查来组合Ferry的答案(提前获得下一个条目):https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_ISVALID_PROPERTY_2176.html
那应该避免您的问题。另外,使用try / catch块来确定最后处理的文档是什么,并仔细查看它(以及下一个)。它可能已损坏。