Comment obtenir le nom complet du propriétaire du fichier courrier dans Lotus Notes
-
20-09-2019 - |
Question
Pourvu que j'ai le nom du fichier de messagerie et le serveur, comment puis-je récupérer le nom complet de l'utilisateur correspond à la forme « CN = xxx / O = yyy » en utilisant LotusScript?
Pour commencer, j'ai le nom d'utilisateur de l'utilisateur - la partie avant @ dans l'e-mail: à savoir user1@example.com
Je sais aussi serveur, sur lequel cet utilisateur est enregistré, donc j'utilise Registration.GetUserInfo comme ceci:
Dim reg as New NotesRegistration
reg.RegistrationServer = "CN=myserver/O=mydomain"
Call reg.GetUserInfo("user1", mailserver$, mailfile$)
La question est: comment sortir de ces données que je peux obtenir le nom complet de l'utilisateur
?La solution 4
J'ai fini avec cette solution (comme je sais qui est le serveur AddressBook pour l'utilisateur):
macro$ = { @DbLookup( "" ; "} & regServer & _
{" : "names.nsf" ; "($Users)" ; "} & shortName & {" ; "FullName" ) }
Dim namelist As Variant
namelist = Evaluate ( macro$ )
commonName = namelist(0)
Autres conseils
Voici une mise en œuvre rapide de la suggestion 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
Quelques mots de prudence:
-
CANONICALIZE
prend ses valeurs de l'ID en cours, pas le répertoire domino -. L'mailserver
d'entrée doit être sous forme abrégée ou canonisé pour que cela fonctionne - Le champ
MailFile
ou non inclure l'extension de.nsf
. - Je ne pense pas que le nom de fichier est sensible à la casse sous Windows, mais il pourrait être sur d'autres plates-formes.
Si vous devez faire ces recherches souvent, une table de consultation calculée ou une vue dans l'annuaire Domino est probablement la solution la plus efficace.
Si vous avez le nom de fichier courrier, pourquoi ne pas faire une recherche dans le NAB à l'aide que votre clé et obtenir le nom complet de cette façon?
Si vous avez l'adresse internet que vous pouvez simplement utiliser la 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