注释错误:读取视图条目时在索引中找不到条目

时间:2018-09-19 15:46:38

标签: xpages lotus-notes lotus-domino

我的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);

那么如果当前或下一个无效,我该如何真正进入下一个条目?

3 个答案:

答案 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块来确定最后处理的文档是什么,并仔细查看它(以及下一个)。它可能已损坏。