У меня есть средство выбора имен на XPage с dataProvider dominoNABNamePicker с addressBookSel = all-public и people and groups = true. При использовании базы данных на сервере Domino с помощью клиента Notes отображается мой локальный файл Names.nsf. Если я открываю БД в браузере, он выбирает правильные имена .nsf с сервера. Не могу понять, является ли это результатом настроек моего клиента, сервера или XPages. Делает то же самое на двух разных ПК. Я бы подумал, что общедоступность заставит его открывать только общедоступные NAB, но это не так.
Средство выбора имени библиотеки расширений получает локальные имена.nsf, даже если БД находится на сервере
Ответы (3)
Я сам задавал тот же вопрос.
Ответ, в контроле добавить addressBookDb="SERVER!!names.nsf"
Отсюда.
Можно ли запустить средство выбора имен extlib в xPINC для поиска в каталоге на сервере?
После некоторого разочарования у меня это работает для клиента Notes и веб-клиента. Возможно, это очевидно для большинства из вас, но точно не для меня. Сначала в средстве выбора имен я создал namePickerAggregator. Затем я добавил dominoNABNamePicker в addressBookDb и поставил следующие SSJS:
var server:String = @Name("[CN]",session.getCurrentDatabase().getServer());
var allNABs:Array = session.getAddressBooks().iterator();
var pubNABs = new Array;
var privNABs = new Array;
while (allNABs.hasNext()) {
var db:NotesDatabase = allNABs.next();
if (db.isPublicAddressBook()){
pubNABs.push(db.getFileName())
} else {
privNABs.push(db.getFileName())
}
db.recycle()
}
if (pubNABs[0] == ""){
return privNames[0];
break;
} else {
return server + "!!" + pubNABs[0];
break
}
Затем я добавил второй dominoNABNamePicker с тем же блоком кода, за исключением того, что возврат
if (pubNABs[1] != "") {
return server + "!!" + pubNABs[1];
break;
} else {
return "";
}
Этот код работает как для клиента Notes, так и для веб-клиента, так что теперь я счастлив, если только не найду где-нибудь подвоха.
Вот что я в итоге сделал. Я установил ограничение на максимальное количество адресных книг (не большое, но работает) 4, вы можете создать столько, сколько хотите. Поэтому я создал пару переменных sessionScope, которые я создал в событии после загрузки страницы в XPage. Я использовал эту формулу.
var allNABs:Array = session.getAddressBooks().iterator();
var pubNABs = new Array;
var privNABs = new Array;
while (allNABs.hasNext()) {
var db:NotesDatabase = allNABs.next();
if (db.isPublicAddressBook()){
pubNABs.push(db.getFilePath())
} else {
privNABs.push(db.getFilePath())
}
db.recycle()
}
sessionScope.put("ssPublicNABs", pubNABs);
sessionScope.put("ssPrivateNABs", privNABs);
поскольку я использую несколько разных средств выбора имен на одной странице, я не хотел повторять циклический просмотр адресных книг. Затем я создал 4 элемента управления NamePicker и добавил 1, 2, 3 и 4 провайдера dominoNABNamePickers к каждому из последовательных элементов управления. Затем установите отображаемое свойство на основе количества общедоступных адресных книг, чтобы они не взорвались у меня. Свойство db name для каждого из провайдеров:
var server:String = @Name("[CN]",session.getCurrentDatabase().getServer());
var pubNABs:Array = sessionScope.get("ssPublicNABs");
return server + "!!" + pubNABs[0];
где pubNABs[n] возвращает правильный путь к файлу для NAB. Он хорошо работает как в клиенте Notes, так и в Интернете. Затем, чтобы он не взрывался на локальной отключенной реплике, я создал еще 4 элемента управления и сделал то же самое, но использовал privNAB с соответствующими отображаемыми свойствами, чтобы не было конфликта. Кажется, что это долгий путь, и я уверен, что есть более простой способ, но он работает.