Как получить полное имя владельца почтового файла в Lotus Notes
-
20-09-2019 - |
Вопрос
При условии, что у меня есть имя почтового файла и сервер, как мне получить полное имя пользователя, которому он соответствует, в форме «CN=xxx/O=yyy» с помощью LotusScript?
Для начала у меня есть имя пользователя — часть перед @ в электронном письме:то естьuser1@example.com
Я также знаю сервер, на котором зарегистрирован этот пользователь, поэтому использую Registration.GetUserInfo следующим образом:
Dim reg as New NotesRegistration
reg.RegistrationServer = "CN=myserver/O=mydomain"
Call reg.GetUserInfo("user1", mailserver$, mailfile$)
Вопрос в том:как из этих данных я могу получить полное имя пользователя?
Решение 4
В итоге я пришел к такому решению (поскольку я знаю, какой сервер адресной книги используется пользователем):
macro$ = { @DbLookup( "" ; "} & regServer & _
{" : "names.nsf" ; "($Users)" ; "} & shortName & {" ; "FullName" ) }
Dim namelist As Variant
namelist = Evaluate ( macro$ )
commonName = namelist(0)
Другие советы
Вот быстрая реализация предложения 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
выбирает свои значения из текущего идентификатора, а не из каталога domino - вводmailserver
Чтобы это работало, оно должно быть в сокращенной или канонизированной форме.- А
MailFile
поле может или не может включить.nsf
расширение. - Я не думаю, что имя файла в Windows чувствительно к регистру, но на других платформах оно может быть.
Если вам необходимо часто выполнять такие поиски, наиболее эффективным решением, вероятно, будет вычисленная таблица поиска или представление в каталоге Domino.
Если у вас есть имя почтового файла, почему бы не выполнить поиск в NAB, используя его в качестве ключа, и таким образом получить полное имя?
Если у вас есть интернет-адрес, вы можете просто использовать класс 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