Ошибка Notes: запись не найдена в индексе при чтении записей - PullRequest
0 голосов
/ 19 сентября 2018

Мой xPage SSJS завершается с ошибкой в ​​строке:

viewEntry = view.getNext(viewEntry);

с ошибкой

Ошибка примечания: запись не найдена в индексе

У меня естьэта опция установлена ​​в false, но это не помогает:

view.setAutoUpdate(false);

Так что я подозреваю, что это терпит неудачу, потому что у пользователя нет доступа к СЛЕДУЮЩЕМУ документу из-за набора доступа читателя.Таким образом, такой документ можно увидеть не в представлении, а в ОБЩИХ.Как это исправить?

Побочная проблема заключается в том, что если происходит сбой сервера 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 голосов
/ 24 сентября 2018

Используйте вид навигатора.Если пользователь не может получить доступ к записи, то простая проверка с viewentry.getUniversalId() вернет ноль, и вы можете даже пропустить ее внутри итерации записей представления.

Попробуйте вместо этого код:

        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); 
0 голосов
/ 26 сентября 2018

Объедините ответ Ферри (заранее получите следующую запись) с проверкой действительности записи: https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_ISVALID_PROPERTY_2176.html

Это должно избежать вашей проблемы.Кроме того, используйте блок try / catch, чтобы определить, что является последним обработанным документом, и более внимательно посмотреть на него (и следующий).Это может быть повреждено.

0 голосов
/ 19 сентября 2018

Также стоит проверить, какая запись не найдена в индексе.Это может быть первым, в зависимости от контекста вашего кода.Например, он мог быть обновлен, чтобы убрать его из поля зрения.Сначала проверьте на ноль.Доступ к читателю также может быть проблемой, если вы работаете с ViewNavigator, существуют разные причины для доступа.Используйте команду try / catch, чтобы также проверить свою гипотезу - sessionAsSigner (или собственный сеанс ODA) будет иметь доступ к следующему документу, что позволит подтверждению регистрации.Как только вы можете подтвердить причину, вы можете кодировать ее.

ViewEntry.isValid () проверяет, нет ли у программного удаления или доступа пользователя, как указано в документации для ViewEntry и Document, которые оба имеют одинаковыеспособ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...