我正在使用@nameLookup公式来通过给出搜索键来检索Internet地址,它正常工作。但是现在我不仅要重试互联网地址,还要重新重用,还要重新互联网地址,还要重新重用FirstName和LastName等其他属性。 以下是我正在使用的公式,通过提供搜索字符串来@namelookup互联网地址。

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

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

可以通过评估一次性,帮助如何帮助如何检索多个属性(如firstname和lastName)。如果不能使用@namelookup完成,那么有没有其他方式..?

有帮助吗?

解决方案

这是一个典型的例子,当使用评估()来调用公式不是一个好主意。 您想要做的是获取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");
}
.

我相信这将比使用评估()的多个查找速度更快,并且您还具有完全错误处理的额外福利,并且都是本机代码。

其他提示

@nameLookup只返回每个呼叫的一个项目的值。

假设您的目标是只有一个评估语句,您可以将呼叫链接在一起并以某个顺序返回一系列值:

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\")");
.

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

另一种方法是使用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);
    }
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top