You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过LotusScript实现文档复制锁原文档及归档替换逻辑?

LotusScript解决方案:主文档锁定与视图迁移需求实现

针对你提出的两个技术需求,我会逐步修改现有代码并解释逻辑:


需求1:创建副本时自动锁定主文档

在创建副本的按钮代码中,我们需要添加主文档锁定逻辑,同时处理锁定失败的场景(比如文档已被其他用户锁定)。另外,为了后续保存副本时能关联到原主文档,我们会给副本新增一个MainDocUNID字段存储主文档的唯一ID。

修改后的创建副本按钮代码:

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
    Dim lockSuccess As Boolean
    
    Set db = ns.CurrentDatabase
    Set dc = db.UnprocessedDocuments
    
    ' 确保仅选择单个文档
    If dc.Count <> 1 Then
        Messagebox "No or too many documents selected", MB_OK, "Error"
        Exit Sub
    End If
    
    Set doc = dc.GetFirstDocument
    
    ' 尝试锁定主文档,True参数表示等待其他用户释放锁定(可选)
    On Error Resume Next
    Call doc.Lock(True)
    lockSuccess = (Err = 0)
    On Error GoTo 0
    
    If Not lockSuccess Then
        Messagebox "Failed to lock the main document. It may be locked by another user.", MB_OK, "Lock Error"
        Exit Sub
    End If
    
    ' 创建副本并关联主文档
    Set newdoc = doc.CopyToDatabase(db)
    Call newdoc.ReplaceItemValue("PStatus", "Draft")
    ' 存储主文档的唯一ID,用于后续关联
    Call newdoc.ReplaceItemValue("MainDocUNID", doc.UniversalID)
    Call newdoc.Save(True, False)
    
    Messagebox "Copy created successfully and main document locked.", MB_OK, "Success"
End Sub

需求2:副本保存后迁移视图并设置生效文档

保存按钮需要完成以下操作:

  1. 验证密码后,找到当前副本对应的主文档
  2. 将主文档的状态改为Archived,使其从Computer视图移至Archived视图
  3. 将副本的状态改为Active,使其从Draft视图移至Computer视图(作为生效文档)
  4. 解锁主文档(可选,若归档后无需锁定)

修改后的保存按钮代码:

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim uidoc As NotesUIDocument
    Dim draftDoc As NotesDocument
    Dim mainDoc As NotesDocument
    Dim vpswd As String
    
    Set uidoc = workspace.CurrentDocument
    Set db = session.CurrentDatabase
    Set draftDoc = uidoc.Document
    
    ' 密码验证
    vpswd = Inputbox$("Please input code to save:", "Save Verification")
    If vpswd <> "o" Then
        Messagebox "Incorrect code. Save cancelled.", MB_OK, "Error"
        Exit Sub
    End If
    
    ' 通过副本的MainDocUNID找到主文档
    Set mainDoc = db.GetDocumentByUNID(draftDoc.MainDocUNID(0))
    If mainDoc Is Nothing Then
        Messagebox "Cannot find the corresponding main document.", MB_OK, "Error"
        Exit Sub
    End If
    
    ' 处理主文档:修改状态为Archived,解锁并保存
    uidoc.EditMode = True
    Call mainDoc.ReplaceItemValue("PStatus", "Archived")
    Call mainDoc.Unlock() ' 解锁主文档(若无需永久锁定可保留)
    Call mainDoc.Save(True, False)
    
    ' 处理副本:修改状态为Active,保存并完成操作
    Call draftDoc.ReplaceItemValue("PStatus", "Active")
    Call uidoc.FieldSetText("SaveOptions", "1")
    Call uidoc.Save()
    Call uidoc.Close()
    
    Messagebox "Save completed. Main document moved to Archived view, copy is now active in Computer view.", MB_OK, "Success"
End Sub

视图配置说明

确保你的三个视图的选择公式正确关联PStatus字段:

  • Computer视图:选择公式为SELECT PStatus = "Active"
  • Draft视图:选择公式为SELECT PStatus = "Draft"
  • Archived视图:选择公式为SELECT PStatus = "Archived"

这样修改字段值后,文档会自动在对应视图间迁移。

内容的提问来源于stack exchange,提问作者Reinhaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:36:57