2010-01-15 13 views
0

Si j'ai le nom du fichier courrier et le serveur, comment puis-je récupérer le nom complet de l'utilisateur auquel il correspond sous la forme "CN = xxx/O = yyy "en utilisant LotusScript?Comment obtenir le nom complet du propriétaire du fichier courrier dans Lotus Notes

Pour commencer, j'ai le nom d'utilisateur de l'utilisateur - la partie avant @ dans l'e-mail: à savoir [email protected]

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 de ces données je peux obtenir le nom complet de l'utilisateur?

Répondre

0

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) 
1

Si vous avez le nom du fichier courrier, pourquoi ne pas faire une recherche dans le NAB en utilisant cela comme clé et obtenir le nom complet de cette façon?

3

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)[email protected]([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 fait son choix des valeurs de l'ID en cours, pas le répertoire domino - l'entrée mailserver doit être sous forme abrégée ou canonique pour que cela fonctionne.
  • Le champ MailFilepeut ou non inclure l'extension .nsf.
  • Je ne pense pas que le nom du fichier soit sensible à la casse sous Windows, mais il se peut que ce soit sur d'autres plateformes.

Si vous devez effectuer ces recherches fréquemment, une table de recherche calculée ou une vue dans l'annuaire Domino est probablement la solution la plus efficace.

+0

+1 pour le bon code. Je ne l'ai pas utilisé, mais encore, c'est un bon exemple. Merci. –

0

Si vous avez l'adresse Internet, vous pouvez simplement utiliser la classe 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 
+0

Cela ne fonctionne pas pour moi. MessageBox (nomUtilisateur.Canonical) affiche l'e-mail. –

+0

Instancier un NotesName avec juste une adresse Internet ne aidera pas ici. – Ben