Extension Library Name Picker获取本地Names.nsf,即使DB在服务器上也是如此

时间:2013-09-03 15:30:53

标签: xpages xpages-extlib

我在XPage上有一个名称选择器,其中包含dataProvider dominoNABNamePicker,其中addressBookSel = all-public,people和groups = true。使用Notes客户端在Domino服务器上使用数据库,它将显示我的本地Names.nsf。如果我在brouse中打开数据库,它会从服务器中选择正确的names.nsf。 无法弄清楚这是否是我的客户端,服务器或XPage中的设置的结果。在两台不同的PC上做同样的事情。 我认为所有公众都会强迫它只开放公共NAB,但事实并非如此。

3 个答案:

答案 0 :(得分:0)

我自己也问了同样的问题。

答案,在控件添加中 addressBookDb = “SERVER !! NAMES.NSF”

从这里开始。

Can I have the extlib name picker running in xPINC lookup the directory on the server?

答案 1 :(得分:0)

经过一段时间的挫折之后,我将其用于Notes客户端和Web客户端。也许对大多数人来说这是显而易见的,但肯定不是我。 首先在名称选择器上创建了一个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客户端和Web客户端,所以我现在是一个快乐的露营者,除非我在某个地方找到了问题。

答案 2 :(得分:0)

这是我最终做的。我设置了4个地址簿的最大数量限制(不是很好,但它有效)4你可以创建任意数量的地址簿。所以我创建了一些我在XPage上的After Page Loads事件中创建的sessionScope变量。我用这个公式。

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返回正确的filePath。它在Notes客户端和Web中都很好用。 然后,为了使它不会在本地断开连接的副本上爆炸,我创建了另外4个控件并做了同样的事情,但使用了具有适当渲染属性的privNAB,以便没有冲突。好像很长的路要走,我确信有一种更简单的方法,但它确实有效。