2013-05-03 59 views
1

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

QuerySave的:

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 

PostOpen的:

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 
+0

在阅读模式下,您无法保存文档。它是一个笔记安全。使用后端类。 – Ramkumar 2013-05-03 07:13:57

回答

3

每当你需要使用事件之间的变量/对象,不想污染与临时值的文档,使用全局变量的一切。

On post打开文档大概处于读取模式,当文档处于读取模式时,您在此事件期间对后端文档(即uidoc.document)字段进行的任何更改都不会“粘住”,因为您正在写入到当前处于读取模式的对象。该“旧”列表变量是全局(?),而不是试图写入“历史”字段,设置您的“历史”变量作为全局字符串变量,不要试图在后打开时写入文档。当QuerySave事件触发器将全局“历史”字符串变量写入文档的历史记录字段时。

0

保存文档时创建历史记录/审计记录的最佳方式(在我看来)是使用后端类将该代码放入PostSave事件中。 该代码在保存后执行。

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