Получить все начальные значения верхнего уровня из NotesView
Какой самый простой способ получить все начальные значения верхнего уровня из представления заметок? Я нашел свойство "TopLevelEntryCount", возвращающее количество всех категорий, но я тоже хочу значения.
Для итерации представления записей и значений столбцов нужно слишком много времени.
Set ecl = view.Allentries
Set ve = ecl.Getfirstentry()
While Not(ve Is Nothing)
If IsArray(ve.Columnvalues(0)) Then
If flag = "" Then
arr = ve.Columnvalues(0)
Else
arr = ArrayUnique(ArrayAppend(arr, ve.Columnvalues(0)))
End If
Else
'error if arr is not already an array
arr = ArrayUnique(ArrayAppend(arr, ve.Columnvalues(0)))
End If
flag = "1"
Set ve = ecl.Getnextentry(ve)
Wend
Кто-нибудь знает более быстрый путь? Он не должен быть написан на LotusScript, на самом деле я бы предпочел Java, JS или SSJS.
2 ответа
Идея 1. Вы можете использовать класс NotesViewNavigator и вызывать методы getFirst() и getNextCategory(). Это должно быть быстрее, чем проходить все записи.
Идея 2. Вы можете использовать NotesSession.Evaluate() с формулой, которая выполняет @Unique для @DbColumn для первого столбца представления. Это должно вернуть вам массив, и вы можете получить Ubound массива. Формулы, как правило, бывают очень быстрыми, но метод define () должен сначала их скомпилировать, поэтому я не знаю, будет ли это быстрее или нет. Недостатком этого подхода является то, что для очень больших представлений это может превышать пределы размера языка формул. Но если это окажется быстрее, вы можете поймать исключение и вернуться к более медленному методу итерации.
Ответ Ричарда идеален! Для Java-версии это почти то же самое: см. Справку Domino для getNextCategory, приведенный ниже пример ViewNavigator действительно отвечает вашим потребностям: ссылка здесь
Метод оценки также доступен в сеансе Java