第10章 在Web中使用LotusScript
第10章
10.1 10.2 10.3 10.4 10.5
在Web中使用LotusScript ............................................................................................................. 1 使用LotusScript的Web代理 .................................................................................................... 1 激活一个代理的URL ................................................................................................................. 2 编写WebQueryOpen代理 .......................................................................................................... 3 编写WebQuerySave代理 ........................................................................................................... 6 在代理中使用CGI变量 ............................................................................................................. 7 10.5.1 删除文档 .............................................................................................................................. 8 10.6 在Web工作流中使用LotusScript ............................................................................................11
本章主要说明在Domino的Web开发中使用LotusScript的方法,关于LotusScript的程序设计知识请参考第三章和IBM 公司提供的帮助文档。
10.1 使用LotusScript的Web代理
LotusScript在Web上的唯一使用方法就是编写代理,完成比较复杂的程序逻辑,或者是只有通过操作Domino后端对象才能完成的功能。
在Web上运行一个LotusScript代理有两种方法:
? 使用@URLOpen调用它的URL,例如,http://server/db/agentname?OpenAgent ? 使用公式ToolsRunMacro和RunAgent调用代理。
当使用ToolsRunMacro调用代理时,有两种特殊的应用场合,即在文档的WebQueryOpen和WebQuerySave事件中调用代理。
当你在Web上运行一个LotusScript代理时,代理可以访问由浏览器和Domino提供的信息,即CGI变量,如果使用第二种方式运行代理,还可以访问当前文档中的域的值,这些信息都包含在NotesSession中的DocumentContext属性中。
DocumentContext属性是一个特别的N o t e s D o c u m e n t对象,它包含了关于当前环境的信息。这个文档内容类似于N o t e s U I D o c u m e n t对象,你可以使用它在表单保存前从表单中得到值。另外,DocumentContext属性包含在C G I变量表单中的关于环境的信息。现在来看下面的脚本:
Sub Initialize Dim session As New NotesSession Dim doc As NotesDocument Set doc =session.DocumentContext ' CGI 变量 Print \ Print \ Print \' 文档中的域 Print \标题=\ Print \创建时间=\End Sub
这个代理打印从环境变量中收集的信息,包含C G I变量和当前表单的域值。当你使用P O S T方法提交表单的时候,这些信息有效。输出结果可能类似于如下:
User ID from browser= Browser software= Server software=
标题=IBM 网上的Lotus资源 创建时间=2005-9-22 8:24:03
注意代理输出时包含H T M L换行符< b r >。这是由于我们将直接输出到We b浏览器中。在一个Domino代理中, Print语句直接输出到用户的浏览器中,因此你完全可以使用H T M L标签对你的输出进行格式化。
你还可以使用LotusScript的Print语句把浏览器重新指向不同的Web页,比如说你可以输出一个包含在方括号中的URL,例如:
Print \
Print语句使用户能够非常简单地获得正在运行的信息,例如你可以使用Print语句: ? 当用户输入无效值时显示错误信息。 ? 提示用户表单提交成功。 ? 显示相关数据库查询结果。
? 根据用户的输出显示不同的响应。
? 显示到其他文档或其他URL的链接。
10.2 激活一个代理的URL
你可以通过简单地将浏览器指向一个代理URL运行一个代理。例如下面的URL运行test代理 http://Server/Database/test?OpenAgent
图表 1 使用OpenAgent激活代理
当你使用这种方法运行代理的时候,代理可以访问C G I环境变量,但是不能访问当前文档域值,因为现在实际上并没有当前文档。这类似于在N o t e s中打开代理面板,选择代理,然后选择操作-运行,只是在此你将得到C G I变量。例如,假设你在表单中创建一个热点或者操作执行如下公式:
@Command([ToolsRunMacro];\在数据库的属性中设置如下:
图表 2 在Web中使用JavaScript
代理可以访问当前文档中的域值,但是不能访问CGI变量。执行结果如下图:
图表 3 代理访问当前文档中的域
·
如果希望使用ToolsRunMacro运行代理时,能够访问CGI变量,请在表单中创建同CGI变量同名的域。
10.3 编写WebQueryOpen代理
WebQueryOpen代理就是在WebQueryOpen事件中调用的代理,运行于以下时候: ? 用户请求一个文档之后。 ? 在计算域被刷新以后。
? 文档被转换为H T M L以前。
因为WebQueryOpen只在文档在浏览器显示之前执行,它不能在浏览器上进行任何输出,因此将忽略所有Print语句。
创建好代理后,在WebQueryOpen事中,用下述方法调用: @Command([ToolsRunMacro]; \
WebQueryOpen代理存在的的主要目的是在文档被转换成Html之前执行一段程序逻辑,最常见的有在文档转换成html之前修改文档中域的值,或者执行数据库查询等。
下面编写一个WebQueryOpen代理“HitTracker”跟踪文档的打开情况,统计阅读者和次数。 1)在InfoContentForm中创建两个域存放数据:TotalHits,总点击次数;HitLog,记录阅读用户和时间。
2)创建HitTracker代理。 Sub Initialize On Error Goto Errhandle Dim session As New NotesSession
Dim db As notesdatabase Dim doc,note As NotesDocument Dim item As NotesItem Dim i As Integer Dim hits As String Dim result As Variant Dim foldername,dbpath ,msg,user As String Set db = session.currentdatabase dbpath = db.filepath