我正在使用@NameLookUp公式通过提供搜索关键字来检索互联网地址,并且工作正常。但现在我想要不仅检索互联网地址,还要检索FirstName和LastName等其他一些属性。 这是我通过给出搜索字符串来使用@Namelookup网址的公式。
Vector vec=m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");
// username是String变量(Search Criteria)
任何人都可以通过仅评估公式一次来帮助如何检索多个属性(如firstName和lastName以及InternetAddress)。如果不能使用@Namelookup完成,还有其他任何方式..?
答案 0 :(得分: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\")");
然后以任意顺序将这三个字符串添加到Vector中。
答案 1 :(得分:1)
这是使用evaluate()调用公式不是一个好主意的典型示例。 你想要做的是获取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()的多次查找更快,而且还有完整错误处理的额外好处,而且都是本机代码。
答案 2 :(得分: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);
}