您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第10章_在Web中使用LotusScript
第10章在Web中使用LotusScript第10章在Web中使用LotusScript.............................................................................................................110.1使用LotusScript的Web代理....................................................................................................110.2激活一个代理的URL.................................................................................................................210.3编写WebQueryOpen代理..........................................................................................................310.4编写WebQuerySave代理...........................................................................................................610.5在代理中使用CGI变量.............................................................................................................710.5.1删除文档..............................................................................................................................810.6在Web工作流中使用LotusScript............................................................................................11本章主要说明在Domino的Web开发中使用LotusScript的方法,关于LotusScript的程序设计知识请参考第三章和IBM公司提供的帮助文档。10.1使用LotusScript的Web代理LotusScript在Web上的唯一使用方法就是编写代理,完成比较复杂的程序逻辑,或者是只有通过操作Domino后端对象才能完成的功能。在Web上运行一个LotusScript代理有两种方法:使用@URLOpen调用它的URL,例如,使用公式ToolsRunMacro和RunAgent调用代理。当使用ToolsRunMacro调用代理时,有两种特殊的应用场合,即在文档的WebQueryOpen和WebQuerySave事件中调用代理。当你在Web上运行一个LotusScript代理时,代理可以访问由浏览器和Domino提供的信息,即CGI变量,如果使用第二种方式运行代理,还可以访问当前文档中的域的值,这些信息都包含在NotesSession中的DocumentContext属性中。DocumentContext属性是一个特别的NotesDocument对象,它包含了关于当前环境的信息。这个文档内容类似于NotesUIDocument对象,你可以使用它在表单保存前从表单中得到值。另外,DocumentContext属性包含在CGI变量表单中的关于环境的信息。现在来看下面的脚本:SubInitializeDimsessionAsNewNotesSessionDimdocAsNotesDocumentSetdoc=session.DocumentContext'CGI变量PrintUserIDfrombrowser=&doc.REMOTE_USER(0)&brPrintBrowsersoftware=&doc.HTTP_USER_AGENT(0)&brPrintServersoftware=&doc.SERVER_SOFTWARE(0)&br'文档中的域Print标题=&doc.InfoSubject(0)&brPrint创建时间=&doc.InfoCreated(0)EndSub这个代理打印从环境变量中收集的信息,包含CGI变量和当前表单的域值。当你使用POST方法提交表单的时候,这些信息有效。输出结果可能类似于如下:UserIDfrombrowser=Browsersoftware=Serversoftware=标题=IBM网上的Lotus资源创建时间=2005-9-228:24:03注意代理输出时包含HTML换行符br。这是由于我们将直接输出到Web浏览器中。在一个Domino代理中,Print语句直接输出到用户的浏览器中,因此你完全可以使用HTML标签对你的输出进行格式化。你还可以使用LotusScript的Print语句把浏览器重新指向不同的Web页,比如说你可以输出一个包含在方括号中的URL,例如:Print[]Print语句使用户能够非常简单地获得正在运行的信息,例如你可以使用Print语句:当用户输入无效值时显示错误信息。提示用户表单提交成功。显示相关数据库查询结果。根据用户的输出显示不同的响应。显示到其他文档或其他URL的aherf链接。10.2激活一个代理的URL你可以通过简单地将浏览器指向一个代理URL运行一个代理。例如下面的URL运行test代理?OpenAgent图表1使用OpenAgent激活代理当你使用这种方法运行代理的时候,代理可以访问CGI环境变量,但是不能访问当前文档域值,因为现在实际上并没有当前文档。这类似于在Notes中打开代理面板,选择代理,然后选择操作-运行,只是在此你将得到CGI变量。例如,假设你在表单中创建一个热点或者操作执行如下公式:@Command([ToolsRunMacro];test);在数据库的属性中设置如下:图表2在Web中使用JavaScript代理可以访问当前文档中的域值,但是不能访问CGI变量。执行结果如下图:图表3代理访问当前文档中的域·如果希望使用ToolsRunMacro运行代理时,能够访问CGI变量,请在表单中创建同CGI变量同名的域。10.3编写WebQueryOpen代理WebQueryOpen代理就是在WebQueryOpen事件中调用的代理,运行于以下时候:用户请求一个文档之后。在计算域被刷新以后。文档被转换为HTML以前。因为WebQueryOpen只在文档在浏览器显示之前执行,它不能在浏览器上进行任何输出,因此将忽略所有Print语句。创建好代理后,在WebQueryOpen事中,用下述方法调用:@Command([ToolsRunMacro];Youragentgoeshere)WebQueryOpen代理存在的的主要目的是在文档被转换成Html之前执行一段程序逻辑,最常见的有在文档转换成html之前修改文档中域的值,或者执行数据库查询等。下面编写一个WebQueryOpen代理“HitTracker”跟踪文档的打开情况,统计阅读者和次数。1)在InfoContentForm中创建两个域存放数据:TotalHits,总点击次数;HitLog,记录阅读用户和时间。2)创建HitTracker代理。SubInitializeOnErrorGotoErrhandleDimsessionAsNewNotesSessionDimdbAsnotesdatabaseDimdoc,noteAsNotesDocumentDimitemAsNotesItemDimiAsIntegerDimhitsAsStringDimresultAsVariantDimfoldername,dbpath,msg,userAsStringSetdb=session.currentdatabasedbpath=db.filepathSetdoc=Session.DocumentContextIfNot(doc.isnewnoteOrdoc.editmode(0)=1)Then‘在非新文档和非编辑模式时统计阅读次数'设置点击次数Setitem=doc.getfirstitem(TotalHits)If(itemIsNothing)ThenCalldoc.appenditemvalue(TotalHits,0)‘如果条目不存在,则创建EndIfIf(doc.TotalHits(0)=)Thendoc.TotalHits=0EndIfi=Cint(doc.totalhits(0))i=i+1doc.totalhits=Cstr(i)'设置点击历史Setitem=doc.getfirstitem(HitLog)If(itemIsNothing)ThenCalldoc.appenditemvalue(HitLog,)‘如果条目不存在,则创建EndIfSetitem=doc.getfirstitem(HitLog)result=Evaluate(@Name([Abbreviate];@UserName))‘获取当前用户的姓名user=result(0)item.AppendToTextList(user+阅读文档于+Now+br)Calldoc.save(True,False)EndIfExitSubErrhandle:msg=行号:+Cstr(Erl())+错误号:+Cstr(Err())+错误内容:+Error()MsgboxmsgExitSubEndSub3)设置HitTracker代理的属性。图表4设置代理的属性这一步很重要,只要代理作为“web”用户执行时,我们才可以使用下面的语句准确的获得当前用户的姓名:result=Evaluate(@Name([Abbreviate];@UserName))user=result(0)有的书籍可能提供了其它方法,但是在实际运行中都有一些问题。设置运行时安全等级为“允许具有完全管理权限的受限制操作”,这样允许“匿名”用户也可以执行代理,修改TotalHits和HitLog两个域的值。提示:WebQueryOpen代理不能用Print打印数据到浏览器,在错误处理代码中可以用msgbox输出到Domino控制台。或者输出到当前文档。图表5HitTrack代理的执行效果10.4编写WebQuerySave代理WebQuerySave代理在以下情况下运行:当用户提交一个表单之后。当计算域和有效的公式被刷新之后。在文档保存在硬盘之前。WebQuerySave代理对于复杂的不能通过公式完成的有效性逻辑验证非常有用。当保存的时候工作流把文档自动指向不同的用户时,WebQuerySave代理也非常方便。使用WebQuerySave代理的常用方法是捕捉用户在表单中的兴趣或爱好的信息,然后当提交表单的时候据此进行反应。与WebQueryOpen代理相同,WebQuerySave代理也通过NotesSession对象的DocumentContext属性访问当前文档。与WebQueryOpen代理不同的是,WebQuerySave代理可以输出到浏览器或把浏览器重新指向URL。我们要举的例子是用WebQuerySave完成一个比较复杂的校验。在“IBM认证系统”数据库中,为了防止一个学生多次注册,需
本文标题:第10章_在Web中使用LotusScript
链接地址:https://www.777doc.com/doc-2241535 .html