第10章_在Web中使用LotusScript

第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

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4