Вы работаете в 50 раз за все доступные записи просмотра. Из-за этого это занимает слишком много времени. Временная сложность вашего подхода составляет O(N*M)
.
. Существует более эффективный способ получить документ из вида по ключу.
Document doc = view.getDocumentByKey(yourKeyValue);
Он работает намного быстрее (O(LogN)
сложность времени) , но требует, чтобы представление содержало первый отсортированный столбец со значениями yourKeyValue
. В нашем случае у нас должно быть представление, которое имеет InternetAddress
в качестве первого отсортированного столбца.
К сожалению, представление ($Rooms)
не применяется к этому правилу. Первый столбец этого представления содержит данные, отличные от необходимых.
Я бы создал в представлении names.nsf
новое представление для задачи.
Давайте назовем его (RoomsByInternetAddress)
и поместим следующая формула в качестве формулы выбора для созданного представления:
SELECT ((Type = "Database") &(ResourceFlag="1") & (ResourceType="1") & (AutoProcessType != "D")) & (Form="Resource":"Database") & @IsUnavailable($Conflict)
Это фактическая формула для ($Rooms)
представления.
Сделайте первый столбец вида отсортированным и установите значение первого столбца в поле InternetAddress
.
Затем сохраните его и закройте. В закрытом виде в свойствах представления (в списке представлений дизайнера) включите «Запретить проект refre sh или изменить». Он защитит вновь созданный вид от удаления при обновлении с исходного сервера names.nsf
шаблона.
После этого в вашем коде он вам не понадобится просмотреть все записи.
View vw = names.getView("(RoomsByInternetAddress)");
String InternetAddressIWantToFind = "someroom@company.com";
Document foundDoc = vw.getDocumentByKey(InternetAddressIWantToFind, true);
if (foundDoc != null) {
// you've found the document by InternetAddress
}
Обновление
Для случаев, когда вы не авторизованы для изменения names.nsf
сервера, существует другая опция.
IBM Domino Java API Database
класс поддерживает метод search () .
Вот информация о синтаксисе формулы поиска: { ссылка }