Lotus notes LotusScript-如何创建按钮来更改某些字段中的值并刷新表单?

Lotus notes LotusScript-如何创建按钮来更改某些字段中的值并刷新表单?,lotus-notes,lotusscript,Lotus Notes,Lotusscript,当前在LotusNotes中重写旧表单,如果用户编辑表单,某些字段将重置为空白。现在,我需要将该函数放入一个按钮中,这样用户就可以简单地进行编辑,而无需重置这些字段,但如果需要,仍然允许他们使用重置函数 我所做的基本工作是在表单部分复制LotusScript代码,从而启用此函数,并将其粘贴到按钮操作中: ------------------------------------------------ Reset Approval (Action) : (Declaration) --------

当前在LotusNotes中重写旧表单,如果用户编辑表单,某些字段将重置为空白。现在,我需要将该函数放入一个按钮中,这样用户就可以简单地进行编辑,而无需重置这些字段,但如果需要,仍然允许他们使用重置函数

我所做的基本工作是在表单部分复制LotusScript代码,从而启用此函数,并将其粘贴到按钮操作中:

------------------------------------------------
Reset Approval (Action) : (Declaration)
------------------------------------------------

Dim editflag as string

------------------------------------------------
Reset Approval (Action) : Click
------------------------------------------------

Sub Click(Source As button)

Dim w As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument

Set db = session.CurrentDatabase
Set uidoc = w.CurrentDocument

 ' Get value for Approver 1 and 2

Approver_1 = uidoc.FieldGetText( "Approver_1" )
Approver_2 = uidoc.FieldGetText( "Approver_2" )
status1 = uidoc.FieldGetText( "status1" )
status2 = uidoc.FieldGetText( "status2" )
author = uidoc.FieldGetText( "Author" )
submit = uidoc.FieldGetText( "submit" ) 
cname = session.CommonUserName & "/ASY/MAWA"
aname = session.UserName

'Msgbox submit
'Cannot edit if user is not the author or approver 1 and 2
If (aname <> author And cname <> Approver_1  And  cname <> Approver_2) Then
    Msgbox "You Dont Have The Authorization To Edit This Document", 16, "Access Restricted"
    Continue = False
    Exit Sub
End If  

 '''''''''''''If user is the author prompt warning if the form already approved
If (aname = author And (status1 = "Yes" Or status2 = "Yes")) Then
    Message = "Editing This Document Will Reset The Approval Status" & Chr$(13) &_ 
    "Do you wish to continue?"  
    YesNo = Messagebox(Message,36,"Continue?")
    If YesNo = 7 Then 
        continue = False
        Exit Sub
    Else
        editflag = "Y"
    End If
End If  

Dim doc1 As NotesDocument
Dim source1 As NotesUIDocument
'Use backend notes object to assign value to current document
Set doc1 = source1.Document

'Check if document in edit mode
If (source1.EditMode = True) Then
    'If edit flag is "Y" then reset status1 and status2 value
    If (editflag = "Y") Then            
        doc1.ReplaceItemValue "status1", ""
        doc1.ReplaceItemValue "status2" ,""
        doc1.ReplaceItemValue "submit" ,"progress"
    End If
End If
'Refresh document to anable send button
Call source1.Refresh    

End Sub
------------------------------------------------
重置批准(操作):(声明)
------------------------------------------------
Dim editflag作为字符串
------------------------------------------------
重置批准(操作):单击
------------------------------------------------
子单击(源代码为按钮)
Dim w作为新工作区
将会话设置为新便笺会话
Dim db As NotesDatabase
标注文档作为注释文档
Dim uidoc作为NotesUIDocument
Set db=session.CurrentDatabase
设置uidoc=w.CurrentDocument
'获取审批人1和2的值
Approver_1=uidoc.FieldGetText(“Approver_1”)
Approver_2=uidoc.FieldGetText(“Approver_2”)
status1=uidoc.FieldGetText(“status1”)
status2=uidoc.FieldGetText(“status2”)
author=uidoc.FieldGetText(“作者”)
submit=uidoc.FieldGetText(“提交”)
cname=session.CommonUserName&“/ASY/MAWA”
aname=session.UserName
'Msgbox提交
'如果用户不是作者或审批人1和2,则无法编辑
如果(aname作者和cname审批人_1和cname审批人_2),则
Msgbox“您无权编辑此文档”,16,“访问受限”
继续=错误
出口接头
如果结束
如果用户是作者,则在表单已批准时提示警告
如果(aname=author和(status1=“Yes”或status2=“Yes”)),则
Message=“编辑此文档将重置审批状态”&Chr$(13)和
“您想继续吗?”
YesNo=Messagebox(消息,36,“是否继续?”)
如果YesNo=7,则
继续=错误
出口接头
其他的
editflag=“Y”
如果结束
如果结束
Dim doc1 As NOTES文档
Dim source1作为说明文件
'使用后端notes对象为当前文档赋值
设置doc1=source1.Document
'检查文档是否处于编辑模式
如果(source1.EditMode=True),则
'如果编辑标志为“Y”,则重置状态1和状态2值
如果(editflag=“Y”),则
doc1.ReplaceItemValue“状态1”
doc1.ReplaceItemValue“状态2”
doc1.ReplaceItemValue“提交”、“进度”
如果结束
如果结束
'将文档刷新为可发送按钮
调用source1.Refresh
端接头

当我保存更改时,我没有收到任何错误消息,所以我认为这是可以的。但是当我尝试测试它时,我得到一个
对象变量未设置
错误,并且形式没有改变。我遗漏了什么?

首先:不要在没有错误处理程序的情况下编写一行LotusScript。在代码周围写上以下几行:

On error goto ErrorHandler

...your code... 

EndOfRoutine:
  Exit Sub
ErrorHandler:
  Msgbox err+"-"+error+" in line "+erl
  Resume EndOfRoutine
然后您会发现错误发生在该行中

Set doc1 = source1.document
因为您从未设置uidoc1,只设置uidoc

换成

Set doc1 = uidoc.Document

并将source1的所有其他实例替换为uidoc(您可以将Dim source1作为NotesUiDocument行删除),这样它就可以工作。

首先:在没有错误处理程序的情况下,永远不要编写一行LotusScript。在代码周围写上以下几行:

On error goto ErrorHandler

...your code... 

EndOfRoutine:
  Exit Sub
ErrorHandler:
  Msgbox err+"-"+error+" in line "+erl
  Resume EndOfRoutine
然后您会发现错误发生在该行中

Set doc1 = source1.document
因为您从未设置uidoc1,只设置uidoc

换成

Set doc1 = uidoc.Document

然后将source1的所有其他实例替换为uidoc(您可以将Dim source1作为NotesUiDocument行删除),然后它就会工作。

我尝试按照您的建议添加ErrorHandler,但在尝试保存
重置时出错\u批准:单击:66:类型不匹配
。错误出现在“+erl”行中的“
Msgbox err+”-“+Error+”上,然后使用&而不是+:Msgbox err&“-”&Error&“in line”&erlOk ErrorHandler已设置,并且我尝试用source更改source1,但未在
行中得到错误,如果(source.EditMode=True),则
。错误消息是
不是成员:EDITMODE
用uidoc替换源代码,这将有助于OK完成此操作,并且我会收到第60行的相同消息
调用源代码。刷新
。所以我也用uidoc更改了源代码。只有当我尝试对它进行实时测试时,它才会在同一行上显示另一个错误:
4407 Document命令不可用。在第60行
中,我尝试按照您的建议添加ErrorHandler,但在尝试保存
重置时出错。\u批准:单击:66:类型不匹配
。错误出现在“+erl”行中的“
Msgbox err+”-“+Error+”上,然后使用&而不是+:Msgbox err&“-”&Error&“in line”&erlOk ErrorHandler已设置,并且我尝试用source更改source1,但未在
行中得到错误,如果(source.EditMode=True),则
。错误消息是
不是成员:EDITMODE
用uidoc替换源代码,这将有助于OK完成此操作,并且我会收到第60行的相同消息
调用源代码。刷新
。所以我也用uidoc更改了源代码。只有当我尝试对它进行实时测试时,它才会在同一行上显示另一个错误:
4407 Document命令不可用。第60行