1

2 つのフィールドを記録する監査証跡があります。読み取りモードで監査証跡の変更を保存できるかどうかを知りたいのですが? 私のコードは、読み取りモードでは何も記録しません。みんな助けてくれませんか?これが私のコードです:

クエリ保存:

Sub Querysave(Source As Notesuidocument, Continue As Variant)
    initial = Source.IsNewDoc
    If initial Then m$ = session.CommonUserName & " - " & Cstr(Now()) & " - Document Created"

    Forall F In old
        v$ = Source.FieldGetText(Listtag(F))
        If Not initial And Not v$ = F Then
            If m$ = "" Then
                m$ = session.CommonUserName & " - " & Cstr(Now()) & " - Modified "
            Else
                m$ = m$ & ", "
            End If
            If F = "" Then F = {""}
            m$ = m$ & Listtag(F) & " from " & F & " to " & v$
        End If
        F = v$
    End Forall

    If initial Then
        Source.FieldSetText "History", m$
    Elseif Not m$ = "" Then
        Source.FieldAppendText "History", Chr$(10) & m$
    End If

    X: Exit Sub

    E: Continue = False
    Resume X
End Sub

ポストオープン:

Sub Postopen(Source As Notesuidocument)
    Set session = New NotesSession
    old("DocName") = Source.FieldGetText("DocName")
    old("DocStatus") = Source.FieldGetText("DocStatus")

    'Disable edit in double click
    Set uidoc = source
    Set doc = uidoc.Document
    doc.mc = 1
    End 
End Sub
4

2 に答える 2

3

イベント間で変数/オブジェクトを使用する必要があり、ドキュメントを一時的な値で汚染したくない場合は、すべてにグローバル変数を使用してください。

postOpen では、ドキュメントはおそらく読み取りモードになっています。このイベント中にドキュメントが読み取りモードのときにバックエンド ドキュメント (つまり、uidoc.document) のフィールドに加えた変更は、「固定」されません。は現在読み取りモードです。その「古い」リスト変数はグローバル (?) です。「履歴」フィールドに書き込もうとする代わりに、「履歴」変数をグローバル文字列変数として設定し、ポストオープン中にドキュメントに書き込もうとしないでください。QuerySave イベントがトリガーされると、グローバルな「履歴」文字列変数がドキュメントの履歴フィールドに書き込まれます。

于 2013-05-03T07:58:10.477 に答える
0

ドキュメントが保存されたときに履歴/監査証跡を作成する最良の方法 (私の意見では) は、バックエンド クラスを使用して、そのコードを PostSave イベントに配置することです。そのコードは保存後に実行されます。

私がよくすることの 1 つは、文字列のグローバル リストを宣言することです。PostOpen イベントでは、$ で始まるフィールドを除くすべてのフィールドの値を入力します。PostSave (または Terminate) イベントで、そのリストの値をドキュメントの現在の値と比較します。値が異なる場合は、ドキュメントの履歴/監査フィールドを更新できます。

于 2013-05-03T14:43:12.910 に答える