在代理和按钮中调用脚本库

时间:2013-05-15 12:45:58

标签: lotus-notes lotusscript lotus-formula

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

我的脚本库代码:验证

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”) 但没有用,我没有得到所需的输出。 我是莲花笔记的新手。请帮我完成上述任务。

2 个答案:

答案 0 :(得分: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”是一个全局变量,已经通过脚本库的Sub初始化进行了初始化。

HTH

答案 1 :(得分: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 )