Pergunta

Desde que eu tenha o nome do arquivo de e -mail e o servidor, como recuperar o nome totalmente qualificado do usuário que ele corresponde no formulário "CN = xxx/o = aa" usando o Lotusscript?

Para começar, eu tenho o nome de usuário do usuário - a peça antes @ no e -mail: ie user1@example.com

Eu também conheço o servidor, no qual esse usuário está registrado, então eu uso o registro.getUserinfo como este:

Dim reg as New NotesRegistration
reg.RegistrationServer = "CN=myserver/O=mydomain"
Call reg.GetUserInfo("user1", mailserver$, mailfile$)

A pergunta é: quão desses dados posso obter o nome completo do usuário?

Foi útil?

Solução 4

Acabei com esta solução (como sei qual é o servidor do livro de endereços para o usuário):

macro$ = { @DbLookup( "" ; "} & regServer & _
         {" : "names.nsf" ; "($Users)" ; "} & shortName & {" ; "FullName" ) }

Dim namelist As Variant

namelist = Evaluate ( macro$ )

commonName = namelist(0)

Outras dicas

Aqui está uma rápida implementação da sugestão de Jonesys:

Function getMailFileUser(mailserver As String, mailfile As String) As String
    On Error Goto errorthrower  
    Dim session As New notessession

    Dim dd As NotesDatabase
    Forall candidate_dd In session.AddressBooks
        If candidate_dd.Server<>"" And candidate_dd.IsPublicAddressBook Then
            Set dd = candidate_dd
            Exit Forall
        End If
    End Forall 
    If dd Is Nothing Then Error 1978,"Failed to find Domino Directory"
    If Not dd.IsOpen Then Call dd.Open("","")


    Dim userdocs As NotesDocumentCollection
    Set userdocs = dd.Search({form="Person" & }& _
    {@name([CANONICALIZE];MailServer)=@name([CANONICALIZE];"} & mailserver & {") & } &_
    {MailFile="} & mailfile & {"},Nothing,1)

    Dim userdoc As NotesDocument
    Set userdoc = userdocs.GetFirstDocument
    If Not userdoc Is Nothing Then
        getMailFileUser = userdoc.FullName(0)       
    Else
        getMailFileUser=""
    End If

    Exit Function
ErrorThrower:
    Error Err, Error & Chr(13) + "Module: " & Cstr( Getthreadinfo(1) ) & ", Line: " & Cstr( Erl )
End Function

Algumas palavras de cautela:

  • CANONICALIZE escolhe seus valores do ID atual, não o diretório dominó - a entrada mailserver Deve estar em forma abreviada ou canônica para que isso funcione.
  • o MailFile campo posso ou não posso inclua o .nsf extensão.
  • Eu não acho que o nome do arquivo seja sensível ao minúsculo no Windows, mas pode estar em outras plataformas.

Se você precisar fazer essas pesquisas com frequência, uma tabela de pesquisa computada ou uma visualização no diretório dominó é provavelmente a solução mais eficiente.

Se você tem o nome do arquivo de correio, por que não fazer uma pesquisa no NAB usando -a como sua chave e obtenha o nome completo dessa maneira?

Se você tiver o endereço da Internet, basta usar a classe NotesName.

Dim s As New NotesSession
Dim userName As NotesName
Dim canonicalName as String

Set userName = s.CreateName("user@yourdomain.com")
'You can use the previous line or the next line to get the NotesName object
'Set userName = new NotesName("user@yourdomain.com")

canonicalName = userName.Canonical
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top