Pergunta

Estou usando a fórmula @NameLookUp para recuperar o endereço da Internet, fornecendo uma chave de pesquisa e está funcionando bem. Mas agora quero recuperar não apenas o endereço da Internet, mas também algumas outras propriedades, como Nome e Sobrenome.Aqui está a fórmula que estou usando para o endereço de Internet @Namelookup, fornecendo a string de pesquisa.

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

//nome de usuário é a variável String (critérios de pesquisa)

Alguém pode ajudar como recuperar várias propriedades (como firstName e lastName junto com InternetAddress) avaliando a fórmula apenas uma vez.Se isso não puder ser feito usando @Namelookup, existe alguma outra maneira ..?

Foi útil?

Solução

Este é um exemplo típico de quando usar avaliar() para chamar uma Fórmula não é uma boa ideia.O que você deseja fazer é obter a classe NotesDocument e ler os valores dela.

Algo assim (isenção de responsabilidade, não sou um desenvolvedor 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");
}

Acredito que isso seria mais rápido do que várias pesquisas usandoavaliar(), e você também tem o benefício adicional de tratamento completo de erros, e tudo sendo código nativo.

Outras dicas

@NameLookup retorna apenas o valor de um item por chamada.

Supondo que seu objetivo seja ter apenas uma instrução Evaluate, você poderia encadear as chamadas e retornar uma matriz de valores em uma determinada ordem:

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

Ou possivelmente:

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 então adicione essas três strings em qualquer ordem ao seu Vector.

Outra abordagem é usar a classe DirectoryNavigator.Acredito que esteja disponível desde o Notes/Domino 8.5 (talvez antes disso).DirectoryNavigator usa parte da mesma lógica central de @NameLookup, portanto, deve funcionar bem.

Aqui está um exemplo de código.Não testei esse código exato, mas adaptei-o do código de produção que faz uma pesquisa semelhante:

    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);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top