2012-05-04 98 views
1

有人可以解釋爲什麼此代碼不起作用。我在作者字段中沒有任何值,也沒有打印任何內容。訪問ACL條目

Sub Querysave(Source As Notesuidocument, Continue As Variant) 

    ' Add users with role R* to Authors 
    Dim s As New NotesSession 
    Dim e As NotesACLEntry 
    Dim it As NotesItem 

    Set it = Source.Document.GetFirstItem("Authors") 

    Set e = s.CurrentDatabase.ACL.GetFirstEntry 
    While Not e Is Nothing 
     Print e.Name 
     If e.IsRoleEnabled("R1") Then it.AppendToTextList(e.Name) 
     If e.IsRoleEnabled("R2") Then it.AppendToTextList(e.Name) 
     Set e = s.CurrentDatabase.ACL.GetNextEntry(e) 
    Wend 

End Sub 

該數據庫位於服務器上,並在ACL中有條目。

回答

1

我相信在LotusScript中還有其他地方需要創建類似的變量。所有的例子都是這樣寫的。毫無疑問,這是一個錯誤,我懷疑它被記錄在案。

1

我稍微改變代碼和它的工作原理:

Sub Querysave(Source As Notesuidocument, Continue As Variant) 

    ' Add users with role R* to Authors 
    Dim s As New NotesSession 
    Dim acl As NotesACL 
    Dim e As NotesACLEntry 
    Dim it As NotesItem 

    Set it = Source.Document.GetFirstItem("Authors") 

    Set acl = s.CurrentDatabase.ACL 
    Set e = acl.GetFirstEntry 
    Print e Is Nothing 
    While Not e Is Nothing 
     Print e.Name 
     If e.IsRoleEnabled("R1") Then it.AppendToTextList(e.Name) 
     If e.IsRoleEnabled("R2") Then it.AppendToTextList(e.Name) 
     Set e = acl.GetNextEntry(e) 
    Wend 

End Sub 

這是任何地方或簡單的破記錄。

+0

你應該更新你的問題,而不是把它放在一個答案 –

+1

是的,這是一個問題,當你「鏈」方法依賴於狀態信息時發生。我知道我已經看到了所描述的問題 - 可能是Bob Balaban在他編寫Domino with Java的舊書或演示文稿中提到的問題。不知道它是否在正式文件中。第一種編寫它的方式是,用於獲取第一個條目的ACL對象與用於獲取下一個條目的ACL對象不同,因此狀態將丟失。通常對於Notes對象類,您始終需要將父對象保持在範圍內,直到完成子對象。 –

+0

@肯,對,但現在爲時已晚,無法刪除您的評論。 – PeterMmm