Средство выбора имени библиотеки расширений получает локальные имена.nsf, даже если БД находится на сервере

У меня есть средство выбора имен на XPage с dataProvider dominoNABNamePicker с addressBookSel = all-public и people and groups = true. При использовании базы данных на сервере Domino с помощью клиента Notes отображается мой локальный файл Names.nsf. Если я открываю БД в браузере, он выбирает правильные имена .nsf с сервера. Не могу понять, является ли это результатом настроек моего клиента, сервера или XPages. Делает то же самое на двух разных ПК. Я бы подумал, что общедоступность заставит его открывать только общедоступные NAB, но это не так.


person Bill F    schedule 03.09.2013    source источник
comment
comment
Я предполагаю, что это что-то, но жесткое кодирование имени сервера не является хорошим вариантом, плюс на сервере может быть более одного общедоступного NAB. Я попробовал dominoViewNamePicker, и он работает нормально, и он работает для клиента Notes, но по-прежнему не решает проблему нескольких NAB. Попытка написать это как общий случай, чтобы получить имена серверов из сеанса, затем получить все NABS, прокрутить их и получить общедоступные. addressBookDb не принимает массив. Кроме того, не думайте, что serverName!!names.nsf работает в веб-браузере. Общий NamePicker отлично работает в браузере.   -  person Bill F    schedule 04.09.2013


Ответы (3)


Я сам задавал тот же вопрос.

Ответ, в контроле добавить addressBookDb="SERVER!!names.nsf"

Отсюда.

Можно ли запустить средство выбора имен extlib в xPINC для поиска в каталоге на сервере?

person Patrick Sawyer    schedule 04.09.2013

После некоторого разочарования у меня это работает для клиента 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, так и для веб-клиента, так что теперь я счастлив, если только не найду где-нибудь подвоха.

person Bill F    schedule 04.09.2013
comment
говорил немного в ближайшее время. Поскольку я пытаюсь написать обобщенный случай, я создал третий dominoNABNamePicker, который разрешается, потому что на сервере есть только два общедоступных NAB, а затем код возвращает ошибку, когда я пытаюсь открыть документ. Есть ли способ отключить dominoNABNamePicker? - person Bill F; 04.09.2013
comment
Это было сделано путем создания нескольких элементов управления NamePicker с различным количеством провайдеров dominoNABNamePicker на основе количества адресных книг, возвращаемых session.getAddressBooks, а затем их повторения и создания списка общедоступных и частных NAB. Требовался отдельный набор средств выбора имен для общедоступных и частных, а затем соответствующим образом установите отображаемое свойство. Возможно, это лучший способ сделать это, но это работает нормально - person Bill F; 05.09.2013

Вот что я в итоге сделал. Я установил ограничение на максимальное количество адресных книг (не большое, но работает) 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 с соответствующими отображаемыми свойствами, чтобы не было конфликта. Кажется, что это долгий путь, и я уверен, что есть более простой способ, но он работает.

person Bill F    schedule 04.09.2013