如何在Lotus Notes中使用@nameLookup检索多个属性
-
21-12-2019 - |
题
我正在使用@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);
}
. 不隶属于 StackOverflow