使用 lotusscript 锁定当前文档
Lock current document using 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
如何在每次创建文档副本时锁定当前文档?例如复制文档创建时当前文档将被锁定。
还有一个问题,对于复制文档,我保存后,想把当前文档替换为复制文档,复制文档就是活文档。而当前文档不会从数据库中删除,而是从计算机视图中删除并显示在 "Archived" 视图中。
在草稿视图中,副本文档将从视图中删除。任何帮助将不胜感激。谢谢!
锁定文档应该是隐式的。确保在所有文档中使用状态字段。例如。创建副本时,将复制文档的状态设置为 "Copied",将 nw documof nt 设置为 "Draft"。您必须涵盖所有不同的状态变化。最好的方法是添加一个字段,其中包含一个永远无法更改的唯一文档 ID。也许还添加一个版本号。
状态示例:
- 草稿:正在建设中的文件(只有一份,无法复制)
- 当前:有效证件(仅一份,可复印)
- 已复制:当前已复制的文档(只有一个,不可复制)
- 已归档:已替换文档(超过一个,无法复制)
它可能有助于创建一个 STD,一个状态转换图。
我也做过类似的事情。创建新版本时,如我所说,它是 "draft" 文档。上一个文件是 "approved" 文件。在新版本获得批准之前,用户只能看到批准的文件,然后将旧的批准文件从数据库中归档。如果您希望所有版本都保留在数据库中,但只显示较新的文档,您可以使用我所说的 HistoryID 字段。基本上我在每个文档上都有一个字段,其中最多包含三个值:
TheUNID
ParentUNID:TheUNID:Parent
TheUNID:ChildUNID:Child
"theUNID" 字段是在组合时计算的,因此它永远不会改变。如果创建了新版本或草稿,HistoryID 现在将具有两个值:
TheUNID
TheUNID:ChildUNID:Parent
这让您知道您现在有一个新草稿,您正在处理的文档实际上是 parent。 "ChildUNID" 实际上是您刚刚创建的草稿文档的 "theUNID"。
在 child 文档或您输入 HistoryID 的新草稿文档中:
TheUNID
ParentUNID:TheUNID:Parent
这样你的草稿就知道 parent 是谁了。
在您的数据库中的代码中,只要打开任何文档,首先检查 HistoryID 字段。如果有 child,则将用户带到 child。无论打开什么 parent 或几代人走了多远,您的代码都会继续遍历 HistoryID 直到找到当前 child 文档没有 parent.好听吗?
如果您需要说明,请告诉我。
我有一份文件和一份文件的副本。我想使用 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
如何在每次创建文档副本时锁定当前文档?例如复制文档创建时当前文档将被锁定。
还有一个问题,对于复制文档,我保存后,想把当前文档替换为复制文档,复制文档就是活文档。而当前文档不会从数据库中删除,而是从计算机视图中删除并显示在 "Archived" 视图中。
在草稿视图中,副本文档将从视图中删除。任何帮助将不胜感激。谢谢!
锁定文档应该是隐式的。确保在所有文档中使用状态字段。例如。创建副本时,将复制文档的状态设置为 "Copied",将 nw documof nt 设置为 "Draft"。您必须涵盖所有不同的状态变化。最好的方法是添加一个字段,其中包含一个永远无法更改的唯一文档 ID。也许还添加一个版本号。
状态示例:
- 草稿:正在建设中的文件(只有一份,无法复制)
- 当前:有效证件(仅一份,可复印)
- 已复制:当前已复制的文档(只有一个,不可复制)
- 已归档:已替换文档(超过一个,无法复制)
它可能有助于创建一个 STD,一个状态转换图。
我也做过类似的事情。创建新版本时,如我所说,它是 "draft" 文档。上一个文件是 "approved" 文件。在新版本获得批准之前,用户只能看到批准的文件,然后将旧的批准文件从数据库中归档。如果您希望所有版本都保留在数据库中,但只显示较新的文档,您可以使用我所说的 HistoryID 字段。基本上我在每个文档上都有一个字段,其中最多包含三个值:
TheUNID
ParentUNID:TheUNID:Parent
TheUNID:ChildUNID:Child
"theUNID" 字段是在组合时计算的,因此它永远不会改变。如果创建了新版本或草稿,HistoryID 现在将具有两个值:
TheUNID
TheUNID:ChildUNID:Parent
这让您知道您现在有一个新草稿,您正在处理的文档实际上是 parent。 "ChildUNID" 实际上是您刚刚创建的草稿文档的 "theUNID"。
在 child 文档或您输入 HistoryID 的新草稿文档中:
TheUNID ParentUNID:TheUNID:Parent
这样你的草稿就知道 parent 是谁了。
在您的数据库中的代码中,只要打开任何文档,首先检查 HistoryID 字段。如果有 child,则将用户带到 child。无论打开什么 parent 或几代人走了多远,您的代码都会继续遍历 HistoryID 直到找到当前 child 文档没有 parent.好听吗?
如果您需要说明,请告诉我。