Lotus Notes의 @namelookup을 사용하여 여러 속성을 검색하는 방법
-
21-12-2019 - |
문제
@nameleokup formula를 사용하여 검색 키를 제공하여 인터넷 주소를 검색하고 있습니다. 이제는 인터넷 주소뿐만 아니라 FirstName 및 LastName과 같은 다른 속성을 검색하려고합니다. 다음은 검색 문자열을 제공하여 @namelookup 인터넷 주소에 사용하는 수식입니다.
Vector vec=m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");
.
// username 문자열 변수 (검색 기준)
수식을 한 번만 평가하여 여러 속성을 검색하는 방법을 누구나 도움을받을 수 있습니다.@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\")");
.
를 클릭 한 다음 3 개의 문자열을 벡터에 어떤 순서로 추가하십시오.
다른 접근법은 directoryNavigator 클래스를 사용하는 것입니다.나는 그것이 노트 / 도미노 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);
}
.