View.getEntryCount () возвращает 1500, но не может получить документ по ключу?

1

Я пишу простой автономный Java-класс, который использует Lotus Domino NCSO JAR для удаленного подключения к серверу Domino.

Я создаю сеанс, получая доступ к базе данных, а затем к представлению:

Session session = NotesFactory.createSession("host", "user", "password");
Database db = session.getDatabase(null, "MyDB.nsf");
View view = db.getView("MyView");

Теперь я печатаю количество записей в представлении:

int count = view.getEntryCount();

Я получаю ненулевой номер (скажем, 1500).

Однако я не могу загрузить какой-либо документ по ключу. Например, для любой letter в алфавите я получаю пустую коллекцию документов с помощью этого вызова:

System.err.println(view.getAllDocumentsByKey(letter, false));

Когда я пытаюсь загрузить документ по ключу, когда я знаю, что ключ существует в представлении, я получаю null.

Document document = view.getDocumentByKey("DocKey"); // Equals null even though
                                                     // I know that 'DocKey' is
                                                     // the key of an existing
                                                     // document within the view.

Говорят, что тот же самый код работает (хотя я его не проверял) при использовании локальных вызовов Notes (используя Notes.jar).

Что мне не хватает?

РЕДАКТИРОВАТЬ

Я просто заметил, что session.getNotesVersion() возвращает версию 8.5.2. Файл NCSO.jar который я использую в настоящее время, не содержит нескольких методов, которые были добавлены в Notes 8. Поэтому есть возможность NCSO.jar файла NCSO.jar в более ранней версии Notes, чем с которым я пытаюсь общаться. Может быть, это и есть причина?

Теги:
lotus-notes
lotus-domino

2 ответа

2
Лучший ответ

Если один и тот же код работает локально, это должно исключать возможность сортировки первого столбца представления. Предполагая, что наиболее вероятной проблемой является то, что документы защищены полями ReaderNames, а идентификатор, который вы используете для аутентификации вашего сеанса, не имеет доступа к документам.

  • 0
    Хороший указатель. Пытался получить список читателей, вызвав view.getReaders , view.getReaders пустой Vector . Теперь я предполагаю, что, если мой аутентифицированный идентификатор пользователя отсутствует в списке читателей, я получу пустой Vector независимо от того, есть ли у представления читатели?
  • 1
    Я не предполагаю, что у вас проблемы с доступом на уровне просмотра. Если бы для представления был список читателей, я почти уверен, что вы получили бы нулевое значение, возвращенное из getView, и getEntryCount не удалось бы. Я предлагаю, чтобы документы, которые находятся в представлении, были защищены полями ReaderNames. Индексатор знает об этих документах, поэтому getEntryCount возвращается с действительным номером, но вам не разрешено читать эти документы (или не те, с ключами, которые вы пробовали, во всяком случае), поэтому getAllDocumentsByKey возвращается с нулем.
Показать ещё 10 комментариев
0

Предполагая, что я правильно понимаю вас, вы хотите получить все документы, в которых первый столбец поиска (lookup) содержит все, что начинается с определенного письма? Например, вы отправляете "A" в veiw.getAllDocumentsByKey() и ожидаете возвращения коллекции, содержащей "Apple", "Alpha", "Amoeba" и "Apricot"?

Я бы изменил колонку в представлении, чтобы удерживать только первую букву: @Left (MyField; 1). Тогда было бы легко выполнить поиск и посмотреть, получится ли вам правильный результат.

  • 0
    На самом деле, нет, я не это имел в виду. Что меня интересует, так это то, что может привести к тому, что я не смогу извлечь какой-либо документ из представления, но при этом смог получить количество записей.
  • 0
    Поскольку вы можете просматривать документы, когда просматриваете их в клиенте Notes, можете ли вы проверить поля (используя информационный блок свойств документа), чтобы увидеть, есть ли в них поля читателей?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню