0

我想在按钮和代理中使用以下脚本库。

我的脚本库代码:验证

Option Public
Option Declare


Dim Sess As NotesSession
Dim currentDb As NotesDatabase
Dim dataDb As NotesDatabase
Dim doc As NotesDocument
Dim workspace As NotesUIWorkspace 
Dim uidoc As NotesUIDocument
Dim rtitem As NotesRichTextItem

Sub Initialize
Set Sess = New NotesSession     
Set currentDb = Sess.CurrentDataBase
Set workspace = New NotesUIWorkspace
Set uidoc = workspace.CurrentDocument

End Sub

Function ValidateForm ( Source As NotesUIDocument) As Boolean

On Error GoTo e 


Set doc=source.Document
    Dim Txt As String
Dim trimmed As string
txt = doc.Name(0)
trimmed = Trim(Txt) 
If ( trimmed = "") Then
    MsgBox "Please enter some text."

    source.GotoField("Name")
    ValidateForm= false
Else
    ValidateForm= True
End If
Exit Function
e:
MsgBox "error at"& Erl() & " and error is "& Error() 

End Function

在按钮中:

在按钮中,当我调用脚本库时,因为在 validateform 函数中它的源代码为 notesuidocument,并且在按钮单击中它的源代码为按钮,我给了我错误。

Sub Click(Source As Button)

End Sub

我尝试在以下选项中使用代理:

使用“验证”

并尝试使用公式 @Command([ToolsRunMacro]; "Val") 在按钮中调用它但没用,我没有得到所需的输出。我是莲花笔记的新手。请帮助我完成上述任务。

4

2 回答 2

1

你根本不需要带参数。在 Script-Library 的 initialize-Sub 中,您已经将全局变量“uidoc”设置为当前打开的文档:

Set workspace = New NotesUIWorkspace
Set uidoc = workspace.CurrentDocument

在您的函数“validateForm”中,您只需省略参数,然后将“source”替换为“uidoc”

Set doc=source.Document

另一种可能性(如果您想将当前文档作为参数):

Sub Click( Source as Button)
  Dim ws as New NotesUIWorkspace
  Dim uidoc as NotesUIDocument
  set uidoc = ws.CurrentDocument
  Call ValidateForm( uidoc )
End If

或者,如果您将初始化代码保留在库中:

Sub Click( Source as Button)
  Call ValidateForm( uidoc )
End If

这是可行的,因为“uidoc”是一个全局变量,它已经由您的脚本库的子初始化初始化。

高温高压

于 2013-05-15T13:46:53.023 回答
1

使其成为代理,而不是脚本库。如果它被命名为 Validate,请使用您在按钮中拥有的公式,而不要尝试包含脚本库。

@Command([ToolsRunMacro]; "Validate")

脚本库通常用于您将从多个代理或其他脚本调用的子例程和函数,而不是整个代理。您可以从按钮调用代理,或允许用户在“操作”菜单中单击它,或通过多种其他方式调用它。您不必将其放入脚本库中。

您可以将代理中的代码减少如下:

Option Public
Option Declare

Sub Initialize
Dim workspace As New NotesUIWorkspace 
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim Txt As String
Dim trimmed As string

Set uidoc = workspace.CurrentDocument

On Error GoTo e 

Set doc=uidoc.Document

txt = doc.Name(0)
trimmed = Trim(Txt) 
If ( trimmed = "") Then
    MsgBox "Please enter some text."

    uidoc.GotoField("Name")
End If
exit sub

e:
MsgBox "error at"& Erl() & " and error is "& Error() 

End Sub

或者,如果您只想验证某个字段是否为空并将焦点转移到该字段,只需将以下内容添加到任何字段的输入验证公式中:

@If ( @ThisValue = ""; @Failure ( "You must enter a value for " + @ThisName ); @Success )
于 2013-05-15T16:04:51.133 回答