使用LotusScript锁定当前文档

时间:2019-04-19 09:18:48

标签: lotus-notes lotus-domino lotusscript

我有一个文件和该文件的副本。我想使用LotusScript为文档创建一个文档锁。

我将当前文档分别放在“计算机”视图中,并将文档复制到“草稿”视图中。下面是创建副本的操作。

创建副本

Sub Click(Source As Button)
    Dim ns As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim newdoc As NotesDocument
    Dim dc As NotesDocumentCollection

    Set db= ns.CurrentDatabase
    Set dc= db.UnprocessedDocuments

    If dc.Count<>1 Then
        Messagebox "No or too many documents selected"
        Exit Sub
    End If

    Set doc= dc.GetFirstDocument
    Set newdoc= doc.CopyToDatabase(db)
    Call newdoc.ReplaceItemValue("PStatus", "Draft")
    Call newdoc.Save(True, False)
End Sub

保存按钮

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim view As NotesView

    Set uidoc = workspace.CurrentDocument
    Set db = session.CurrentDatabase
    Set view = db.GetView("Draft")
    Set doc = view.GetDocumentByKey("Draft", True)
    vpswd = Inputbox$("Pls input code to save :")

    If vpswd = "o" Then

        uidoc.EditMode = True
        Set doc = uidoc.Document
        Set doc = view.GetFirstDocument
        If doc.PStatus(0) = "Draft" Then
            Set newdoc= doc.CopyToDatabase(db)
            Call newdoc.ReplaceItemValue("PStatus", "Active")
            Call newdoc.Save(True, False)
        End If
        Call uidoc.FieldSetText("SaveOptions" , "1")

        Call uidoc.Save
        Call uidoc.Close
    End If


End Sub

每次创建文档副本时如何锁定当前文档?例如,当创建复制文档时,当前文档将锁定。

另一个问题是,对于复制文档,保存后,我想将当前文档替换为复制文档,并且复制文档将成为实时文档。虽然当前文档不会从数据库中删除,但会从“计算机”视图中删除并显示在“已存档”视图中。

在“草稿”视图中,复制文档将从视图中删除。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

锁定文档应该是隐式的。确保在所有文档中使用“状态”字段。例如。创建副本时,将复制的文档的状态设置为“已复制”,将文档的状态设置为“草稿”。您必须涵盖所有不同的状态更改。最好也是添加一个字段,其中包含一个永远不会更改的唯一文档ID。也许还要添加一个版本号。

状态示例:

  • 草稿:正在构建的文档(只能复制一份,不能复制)
  • 当前:有效文档(只能复制一个)
  • 已复制:当前已复制的文档(只能复制一个,不能复制)
  • 已存档:已替换的文档(一个以上,无法复制)

创建STD(状态转换图)可能会有所帮助。

答案 1 :(得分:0)

我做了类似的事情。当我创建一个新版本时,它就是“草稿”文档。先前的文档是“批准的”文档。在新版本获得批准之前,用户只能看到批准的文档,然后将较旧的批准文档从数据库中存档。如果您希望所有版本都保留在数据库中,而仅显示较新的文档,则可以使用我称为HistoryID字段的内容。基本上,每个文档中都有一个字段,其中最多包含三个值:

TheUNID
ParentUNID:TheUNID:Parent
TheUNID:ChildUNID:Child

“ theUNID”字段是在组成时计算的,因此它永远不会改变。如果创建了新版本或草稿,则HistoryID现在将具有两个值:

TheUNID
TheUNID:ChildUNID:Parent

这让您知道您现在有了一个新的草稿,并且您所在的文档实际上是父文档。实际上,“ ChildUNID”是您刚刚创建的草稿文档的“ theUNID”。

在您放入HistoryID的子文档或新文档草案中:

UNID ParentUNID:TheUNID:Parent

这样,您的草稿便知道其父母是谁。

在数据库的代码中,只有打开的任何文档,请首先检查HistoryID字段。如果有孩子,则将用户带到孩子那里。无论打开哪个父级或几代人都回去,您的代码都会继续遍历HistoryID,直到找到当前没有父级的子文档。听起来不错?

让我知道是否需要澄清。