1

我正在使用@NameLookUp 公式通过提供搜索键来检索互联网地址,它工作正常。但现在我不仅要检索互联网地址,还要检索其他一些属性,如名字和姓氏。这是我通过提供搜索字符串来使用@Namelookup 互联网地址的公式。

Vector vec=m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");

//用户名是字符串变量(搜索条件)

任何人都可以通过仅评估一次公式来帮助如何检索多个属性(如名字和姓氏以及 InternetAddress)。如果使用@Namelookup 无法完成,还有其他方法吗?

4

3 回答 3

1

@NameLookup 每次调用仅返回一项的值。

假设您的目标是只有一个 Evaluate 语句,您可以将调用链接在一起并按特定顺序返回一组值:

Vector vec=m_session.evaluate("FirstName := @NameLookup([NoUpdate];\""+ userName + "\"; \"FirstName\"); LastName:= @NameLookup([NoUpdate];\""+ userName + "\"; \"LastName\"); InternetAddress :=@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\"); FirstName:LastName:InternetAddress");

或者可能:

String firstName = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"FirstName\")");
String lastName = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"LastName\")");
String internetAddress = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");

然后以任意顺序将这三个字符串添加到您的向量中。

于 2014-06-03T10:59:08.530 回答
1

这是一个典型的例子,当使用评估()调用公式不是一个好主意时。您要做的是获取 NotesDocument 类并从中读取值。

像这样的东西(免责声明,我不是 Java 开发人员):

// Open Domino Directory on specified server
Database db = session.getDatabase("YourServer/Domain", "names.nsf");
// Get a view with user name is sorted first column
View view = db.getView("($Users)");
// Get the person document for specified user
Document doc = view.getDocumentByKey(userName, true);
if (doc != null) {
   // Get text values from Notes document
   String emailAddress = doc.getItemValueString("InternetAddress");
   String officePhone = doc.getItemValueString("OfficeNumber");
   String officeAddress = doc.getItemValueString("OfficeStreetAddress");
}

我相信这会比使用 evaluate() 进行多次查找要快,而且您还可以获得完整错误处理的额外好处,并且所有这些都是本机代码。

于 2014-06-03T17:12:32.553 回答
0

另一种方法是使用 DirectoryNavigator 类。我相信它自 Notes/Domino 8.5 以来就已经可用(甚至可能在此之前)。DirectoryNavigator 使用一些与@NameLookup 相同的核心逻辑,因此它应该表现良好。

这是一些示例代码。我没有测试过这个确切的代码,但我从执行类似查找的生产代码中改编了它:

    String firstName = null;
    String lastName = null;
    String inetAddress = null;

    Vector<String> lookupItems = new Vector<String>();
    lookupItems.addElement("FirstName");
    lookupItems.addElement("LastName");
    lookupItems.addElement("InternetAddress");

    Vector<String> vName = new Vector<String>();
    vName.addElement(userName);

    Directory dir = session.getDirectory();
    DirectoryNavigator dirNav = dir.lookupNames("($Users)", vName, lookupItems, true);
    if( dirNav != null && dirNav.getCurrentMatches() != 0 ) {

        // Digest the results of the lookup

        Vector<String> value = null;
        value = dirNav.getFirstItemValue();
        firstName = value.elementAt(0);

        value = dirNav.getNextItemValue();
        lastName = value.elementAt(0);

        value = dirNav.getNextItemValue();
        inetAddress = value.elementAt(0);
    }
于 2014-06-04T21:30:11.340 回答