Come recuperare più proprietà usando @NameLookup in Lotus Notes
-
21-12-2019 - |
Domanda
Sto usando @Niglielookup Formula per recuperare l'indirizzo internet dando una chiave di ricerca e funziona bene. Ma ora voglio recuperare non solo l'indirizzo Internet ma anche alcune altre proprietà come il nome e il lastname. Ecco la formula che sto usando a @Namelookup internet Indirizzo dando la stringa di ricerca.
Vector vec=m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");
.
// Nome utente è la variabile stringa (criteri di ricerca)
Qualcuno può aiutare a recuperare più proprietà (come il nome e il lastName insieme a InternetAddress) valutando la formula solo una volta.Se non riesce a fare usando @Namelookup c'è qualche altro modo ..?
Soluzione
Questo è un esempio tipico quando si utilizza valuta () per chiamare una formula non è una buona idea. Quello che vuoi fare è ottenere la classe di NotesDocument e leggere i valori da esso.
Qualcosa come questo (Disclaimer, non sono uno sviluppatore 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");
}
.
Credo che questo sarebbe più veloce di più ricerche che usano valutando () e hai anche il vantaggio aggiuntivo della gestione completa degli errori e tutto il codice nativo.
Altri suggerimenti
@NameLookup restituisce solo il valore di un articolo per chiamata.
Supponendo che il tuo obiettivo sia solo avere una dichiarazione di valutazione, è possibile mettere insieme le chiamate e restituire una serie di valori in un determinato ordine:
Vector vec=m_session.evaluate("FirstName := @NameLookup([NoUpdate];\""+ userName + "\"; \"FirstName\"); LastName:= @NameLookup([NoUpdate];\""+ userName + "\"; \"LastName\"); InternetAddress :=@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\"); FirstName:LastName:InternetAddress");
.
o possibilmente:
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\")");
.
e quindi aggiungere quelle tre stringhe in qualsiasi ordine nel tuo vettore.
Un altro approccio è utilizzare la classe DirectoryNavigator.Credo che sia stato disponibile da Notes / Domino 8.5 (forse anche prima di questo).DirectoryNavigator utilizza parte della stessa logica centrale come @NameLookup, quindi dovrebbe funzionare bene.
Ecco alcuni codice di esempio.Non ho testato questo codice esatto, ma l'ho adattato dal codice di produzione che fa una ricerca simile:
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);
}
.