lotus-notes - LotusScript - 如何创建按钮以更改某些字段中的值并刷新表单?
问题描述
目前在 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
当我保存更改时,我没有收到任何错误消息,所以我认为它没问题。但是当我尝试对其进行测试时,我得到一个Object Variable is not set
错误并且表单没有改变。我错过了什么?
解决方案
首先:永远不要在没有错误处理程序的情况下编写任何一行 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
并用 uidoc 替换 source1 的所有其他实例(您可以将 Dim source1 作为 NotesUiDocument 行删除)然后它将起作用。
推荐阅读
- reactjs - 如何等待 redux 状态更改然后在 React 中渲染页面
- javascript - 为什么我在 codeigniter 3 中没有收到来自 ajax 数据的响应?
- nginx - nginx 作为 web 服务器前面的反向代理
- bash - 通过skippng搜索或不跳过文件
- javascript - Discord.js 在一条消息中检查多个单词
- python - 在 PyQT5 中,如何从列表中获取最近按下的按钮
- instagram-api - 使用 Instagram API 上传视频时出错
- python - 具有评分准确性的 RandomizedSearchCV 会导致错误:评分失败。这些参数在此训练测试分区上的分数将设置为 nan
- java - java - 如何在Java运行时获取从抽象类继承的正确实例?
- r - 使用 kernlabs lssvm 生成预测