Как извлекать несколько свойств с помощью @namelookup в Notus Notes

StackOverflow https://stackoverflow.com//questions/24010759

Вопрос

Я использую формулу @namelookup, чтобы получить адрес интернет, предоставив ключ поиска, и он работает нормально. Но сейчас я хочу переимено не только интернет-адрес, но и некоторые другие свойства, такие как имя и фамилия. Вот формула, которую я использую для адреса @namelookup, предоставив строку поиска.

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

// username - это строковая переменная (критерии поиска)

Может ли кто-нибудь помочь, как получить несколько свойств (например, имя и фамилия вместе с InternetAddress), оценивая формулу только один раз.Если это не может быть сделано с помощью @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 использует некоторые из той же основной логики, что и @nameelookup, поэтому он должен хорошо работать.

Вот какой-то пример код.Я не проверил этот точный код, но я адаптировал его из производственного кода, который делает аналогичный поиск:

    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