LotusScript - Как создать кнопку для изменения значений в определенных полях и обновления формы? - PullRequest
0 голосов
/ 01 июня 2019

В настоящее время переделывается старая форма в 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, и форма не меняется.Чего мне не хватает?

1 Ответ

2 голосов
/ 01 июня 2019

Прежде всего: НИКОГДА не пишите ни одной строки 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), тогда он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...