Как получить полное имя владельца почтового файла в Lotus Notes

Если у меня есть имя почтового файла и сервер, как с помощью LotusScript получить полное имя пользователя, которому он соответствует, в форме «CN = xxx / O = yyy»?

Для начала у меня есть имя пользователя - часть сообщения до @ в электронном письме: т.е. [email protected].

Я также знаю сервер, на котором зарегистрирован этот пользователь, поэтому использую Registration.GetUserInfo вот так:

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

Возникает вопрос: как из этих данных получить полное имя пользователя?


person Sunny Milenov    schedule 15.01.2010    source источник


Ответы (4)


Вот быстрая реализация предложения 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

Несколько слов предостережения:

  • CANONICALIZE выбирает свои значения из текущего идентификатора, а не из каталога домино - ввод mailserver должен быть либо в сокращенной, либо в канонической форме, чтобы это работало.
  • Поле MailFile может включать или не включать расширение .nsf.
  • Я не думаю, что имя файла чувствительно к регистру в Windows, но это может быть на других платформах.

Если вам нужно часто выполнять эти поиски, возможно, наиболее эффективным решением будет вычисленная таблица поиска или представление в Domino Directory.

person Anders Lindahl    schedule 05.02.2010
comment
+1 за хороший код. Не использовал, но все же это хороший пример. Спасибо. - person Sunny Milenov; 05.02.2010

Если у вас есть имя почтового файла, почему бы не выполнить поиск в NAB, используя его в качестве ключа, и получить таким образом полное имя?

person Jonesy    schedule 26.01.2010

Если у вас есть интернет-адрес, вы можете просто использовать класс NotesName.

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

Set userName = s.CreateName("[email protected]")
'You can use the previous line or the next line to get the NotesName object
'Set userName = new NotesName("[email protected]")

canonicalName = userName.Canonical
person Carlos    schedule 05.02.2010
comment
У меня это не работает. MessageBox (userName.Canonical) отображает электронную почту. - person Sunny Milenov; 05.02.2010
comment
Создание экземпляра NotesName только с помощью интернет-адреса здесь не поможет. - person Ben; 03.06.2010

Я остановился на этом решении (поскольку я знаю, что является сервером AddressBook для пользователя):

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

Dim namelist As Variant

namelist = Evaluate ( macro$ )

commonName = namelist(0)
person Sunny Milenov    schedule 05.02.2010