2012-05-04 12 views
1

誰かがこのコードがうまくいかない理由を説明することができます。 Authorsフィールドに値がなく、何も印刷されません。アクセス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

にするのではなく、質問を更新する必要があります。はい、これは状態情報に依存するメソッドを「連鎖」するときに発生する問題です。私は、おそらくボブ・バラバンによって、Javaを使ったドミノのプログラミングについての彼の古い本で、あるいはプレゼンテーションで、問題を説明したことを知っていることを知っています。正式な文書に記載されているかどうかはわかりません。あなたが書いた最初の方法では、最初のエントリを取得するために使用したACLオブジェクトは、次のエントリを取得するために使用するACLオブジェクトと異なり、状態が失われます。通常、Notesオブジェクトクラスの場合、子オブジェクトを使用するまで、親オブジェクトは常にスコープ内に保持する必要があります。 –

+0

@Ken、そうですが、今は移動して、あなたのコメントを削除するには遅すぎます。 – PeterMmm

関連する問題