1

我有一个记录两个字段的审计跟踪。我只想问是否可以在读取模式下保存审计跟踪中的更改?我的代码在读取模式下不记录任何内容。你们能帮帮我吗?这是我的代码:

查询保存:

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 事件中。该代码在保存后执行。

有人认为我经常做的是声明一个全局字符串列表。在 PostOpen 事件中,我用所有字段的值填充它,除了以 $ 开头的字段。在 PostSave(甚至终止)事件中,我将该列表中的值与文档上的当前值进行比较,如果任何值不同,我可以更新文档历史记录/审计字段。

于 2013-05-03T14:43:12.910 回答