2010-01-15 66 views
0

假設我有郵件文件名和服務器,如何以「CN = xxx」格式檢索用戶的完全限定名稱/ O = yyy「使用LotusScript?如何在Lotus Notes中獲取郵件文件所有者的全名

首先,我有用戶的用戶名 - 在電子郵件@之前的部分:即[email protected]

我也知道服務器上,該用戶被註冊,所以我用Registration.GetUserInfo像這樣:

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

現在的問題是:如何從這些數據中獲得用戶的全名?

回答

0

我結束了這個解決方案(因爲我知道這是通訊簿服務器用戶):

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

Dim namelist As Variant 

namelist = Evaluate (macro$) 

commonName = namelist(0) 
1

如果您有郵件文件名,那麼爲什麼不用NAB作爲您的密鑰進行查找並獲取完整的名稱?

3

這裏有一個快速的實現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 

謹慎的幾句話:

  • CANONICALIZE從目前的ID,而不是Domino目錄中挑選自己的價值觀 - 輸入mailserver必須無論是縮寫或規範化的形式爲此工作。
  • MailFile字段可能會或可能不會包括.nsf擴展名。
  • 我不認爲文件名在Windows上區分大小寫,但它可能在其他平臺上。

如果您需要經常進行這些查找,Domino目錄中的計算查找表或視圖可能是最有效的解決方案。

+0

+1的好代碼。我沒有使用它,但是,這仍然是一個很好的例子。謝謝。 – 2010-02-05 16:07:33

0

如果你有互聯網地址,你可以使用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

這對我不起作用。 MessageBox(userName.Canonical)顯示電子郵件。 – 2010-02-05 16:00:52

+0

僅使用互聯網地址實例化NotesName在這裏沒有幫助。 – Ben 2010-06-03 08:30:23

相關問題