综合使用javascript、lotusscript agent和formula的技巧

上传人:第*** 文档编号:32762556 上传时间:2018-02-12 格式:DOCX 页数:27 大小:60.94KB
返回 下载 相关 举报
综合使用javascript、lotusscript agent和formula的技巧_第1页
第1页 / 共27页
综合使用javascript、lotusscript agent和formula的技巧_第2页
第2页 / 共27页
综合使用javascript、lotusscript agent和formula的技巧_第3页
第3页 / 共27页
综合使用javascript、lotusscript agent和formula的技巧_第4页
第4页 / 共27页
综合使用javascript、lotusscript agent和formula的技巧_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《综合使用javascript、lotusscript agent和formula的技巧》由会员分享,可在线阅读,更多相关《综合使用javascript、lotusscript agent和formula的技巧(27页珍藏版)》请在金锄头文库上搜索。

1、综合使用 JavaScript、LotusScript Agent 和 Formula 的技巧一 概述在使用 Designer 开发 B/S 模式的应用时,JavaScript 、LotusScript 和 Formula 是我们主要用到的三种开发语言。它们在各自的位置都有着很强劲的优势。1 JavaScript 因为只能取得浏览器端的数据,不能访问 Notes DOM;所以,主要用在浏览器端的数据验证、信息提示等对当前 Brows 窗口操作易的用性功能。2 LotusScript 能访问 Notes DOM。在 Notes 客户端可以取得当前文档的数据,但是,因为其无法直接在浏览器端工作;所

2、以在 B/S 模式的应用中 LotusScript 只能在服务器端工作,我们通过编写 LotusScript代理来实现其强大的文档处理能力。3 Formula 能访问后台数据,语言简洁,数据处理能力较弱,不能在浏览器端工作。Formula 主要使用在元素的显示控制以及域值的计算公式及简单的数据处理方面。这三者使用的范围和处理能力各不相同。在应用中将其三者综合起来使用,会使应用的各方面功能大大增强。二 由 JavaScript 向代理(LSFL)通信一般情况下 JavaScript 向代理的通信,使用 url command。即如下格式:http:/Host/Database/AgentName

3、?OpenAgent&参数。这类操作可以用来解决数据查询、文档删除等任务。这类操作的特点是可以带参数,但是取不到浏览器端的当前文档,无法对浏览器端的文档进行处理。那么,为什么要使用 JavaScript 向代理通信,并让代理取得浏览器端的当前文档呢?先看一个例子:在某申请系统中,用户创建新申请可以这样做:打开新的申请单,填写各项目后,点击操作按钮“提交申请”,就完成了操作。对设计者而言触发“ 提交”操作必定运行一个代理或一段公式(此处我们先假定提交操作运行的是代理,后面将介绍提交操作运行公式的情况)。在真正运行代理的“提交” 之前,系统一定要进行数据合法性的验证。最简单的做法是在每个域里面写入

4、验证公式,或者在代理里写入验证数据合法性的代码。但是,这类做法的共同的缺点是:即使数据不合法,服务器端和浏览器端也发生了交互,占用带宽、影响网络速度。并且,出错提示信息只能以网页形式输出在原窗口上。这样,就会使原窗口中的信息丢失,不方便用户修改原来的数据。针对这种情况,我们想让域的验证工作在浏览器端执行。并且,出错提示使用弹出窗口。JavaScript 正能符合要求,但是难点就在:一旦验证通过怎样调用代理?解决的办法是:1. 保持“ 提交申请”操作按钮和提交代理不变。在浏览器端预览表单,点击右键查看源文件,找出“提交申请”操作按钮的 onclick 事件中的代码。2. 新建一个同样名为“提交申

5、请”操作按钮,将原来的“提交申请” 操作按钮隐藏。在新建的操作按钮中写入域验证信息 JavaScript 代码,如果验证通过则执行第一步的代码。如果不通过则使用 alert 弹出窗口,提示出错信息。3. 注意:每增减一次操作按钮,都会影响原“ 提交申请”操作按钮的 onclick 事件代码。所以,比较好的办法是将原来的“提交申请”操作按钮作成共享操作。以上做法是我们在工作流模版里使用的方法。现在,我们有一种改进方法:1。不用原来的操作按钮,把触发提交代理的写在一个按钮(button)里,给该按钮命名(假设为“b1”,在其属性框中找到 html 选项卡“name”栏中填为“b1”),用 css

6、将该按钮隐藏。(同样在 tml 选项卡中,在“style”栏填入“visibility: hidden”)2。新建一个名为“提交申请”的操作按钮,在按钮中写入域验证信息 JavaScript 代码,如果验证通过则执行“ document.forms0.b1.onclick()”(此处的 b1 是上一步我们假设的按钮 name)。如果不通过则使用 alert弹出窗口,提示出错信息。3。注意如果有多个这种操作在同一个表单里,那么按钮的 name 必须不同。对按钮的调用显然也应该根据其 name。纵观两种用 JavaScript 调用代理的方法,各有特点。使用 urlcommand 比较方便易用,但

7、缺点是取不到浏览器端的当前文档,代理很多强大的功能无法展开。使用第二种方法,实际上是 JavaScript 通过调用操作按钮,间接调用了代理。这种方法功能强大,但是,创建和维护都稍显复杂。最后指出:所谓使用JavaScript 调用 Formula,也就是指用 JavaScript 调用操作按钮,而操作按钮则中执行的是各类对文档进行操作的 Formula。即用 JavaScript 间接调用了 Formula。三 由代理向 JavaScript 通信使用代理向 JavaScript 通信,可以分为用代理写出 JavaScript 程序和用代理设置 JavaScript 参数。一用代理写出 Ja

8、vaScript 程序。我们可以使用代理中的 print 系统函数,在窗口打印信息。这些信息为浏览器认做 HTML 语句来解释。这样我们就可以用 print 函数在代理中写 JavaScript 程序。例如以下代码片段:If dc.count=0 thendc 为在前面程序里使用 database.search 得到的 DocumentCollectionPrint Print alert(没有找到相关文档,请和管理员联系。)Print location.href = /Web+test.nsf/Main+View?OpenViewPrint End if该段代码执行如下功能,判断如果当前搜索

9、得到的文档集为空,就在浏览器端显示出错信息,然后将窗口路径指向某视图。再看一个代码片段:flag =curdoc.save(True,False)If flag ThenPrint Print Print Print window.setTimeout(closes.Click(),1000)Print Print 个人选项保存成功。End If该段代码执行如下功能,判断如果当前文档保存成功,就在浏览器端显示确认信息,随即关闭窗口。使用代理写 JavaScript 程序我们可以做出许多有效、方便的功能来。比如动态的信息展播等。二用代理设置 JavaScript 参数。这里 JavaScript

10、 是表单中写好的,但是 JavaScript 的某些参数可能使用表单中某些域的值。这样用代理设置了该域的值也就设置了 JavaScript 参数。例如:某系统用户要求在申请单中的“编号” 字段用户能手动填写,但是又要能保证:如有重复的号码,系统要给与提醒。解决办法就是:1. 使用 webquaryopen 事件运行代理,使其将所有已经编号文挡的编号值都以逗号隔开,放入文档的某域中。2. 而在表单内则写入 JavaScript 代码。将该域的值取出作参数,再将该参数以逗号隔开取得字符串数组。3. 最后在域有效性验证时,比较当前的编号是否存在于数组中,若是则返回出错,否则成功。比较以上介绍的两种方

11、法。第一种方法:因为 JS 代码都由代理写出来,所以形式更灵活、功能更强大。但是,由于代码是 Print 出来的,无法和文档在窗口共存;所以,这种方法一般使用在信息展示方面。第二种方法:由于大部分代码是在浏览器端写好的,所以功能相对单一。因为代理通过修改域值影响JavaScript 代码;所以,一般用在文档处理方面。四 由 Formula 向 JavaScript 通信Formula 调用 JavaScript。与代理调用 JavaScript 的第 2 条十分相似。但是,因为 Formula 能控制表单元素的显示属性。而 Agent 能访问更多的数据,所以 Formula 与 Agent 各

12、有千秋。这里介绍一个比较有趣的例子,就是怎样使文挡按条件自动编辑。即某些情况下文挡打开时为阅读状态。另一些情况,文档打开时则为编辑状态。显然,设置表单的自动编辑功能是无法完成功能的。做法:1. 在表单建立 JavaScript 函数 autoedit。2. 函数中写入代码取得当前窗口路径,将路径最后几个字符 opendocument 替换成 editdocument,然后存在变量 mypath 中。3. 假设文档是否自动编辑的判断条件是当前用户在公共通讯录里的个人文档的“myauto”字段是否为“yes”。那么在 JavaScript 函数“autoedit”中写 JavaScript 代码:

13、t=,计算文本的公式为“dblookup(; : names.nsf ; people; name( cn ; username) ; myauto)”。4. 在 JavaScript 函数“autoedit”中加入代码,判断 t 是否为“yes”,若是则为将 window.location 置为mypath。然后将本段代码设置为在编辑状态下隐藏。5. form 的 onload 事件中加入 JavaScript 代码,调用 autoload 函数。注:以上文档是我在学校里时写的,现在看来有些观点难免有点牵强,实例也不够生动;贴上来权作抛砖引玉。程序开发总结之二我如何在页面上建立一个热点,让它

14、打开一个文档?答: 在页面上写一段文字,然后选上这段文字,然后点菜单”创建” 热点- 操作热 点.然后选 LotusScript ,举个例子,比如打开 ID 为 NT00000C62 的文档:Sub Click(Source As Button)Dim uiworkspace As New notesuiworkspaceDim curdatabase As notesuidatabaseDim database As notesdatabaseDim doc As notesdocumentSet curdatabase = uiworkspace.currentdatabaseSet da

15、tabase = curdatabase.databaseSet doc = database.getdocumentbyid(00000C62)Call uiworkspace.EditDocument(True,doc,False )End Sub我如何实现归档,比如我如何把当前视图中所有被选中的文档归入文件夹 fold 中?答: 用 Script 象如下这样实现 :Sub AddDocToFold(fold As String)Dim uiworkspace As New notesuiworkspaceDim uiview As notesuiviewDim doc As NotesD

16、ocumentDim docList As StringSet uiview = uiworkspace.currentviewFor j = 1 To uiview.Documents.CountSet doc = uiview.Documents.GetNthDocument(j)Call doc.PutInFolder( fold )NextEnd Sub我如何实现把某文件夹视图中的被选择的文档从该文件夹中清除,但却不能删除他们?答: 用 Script 实现如下 :Sub RemoveDocFromFold( fold As String,all As Integer)功能: 把文档从某个文件夹中移走,但并不删除此文档参数: fold: 文件夹 all : 0 表示仅移走当前选择的文档,1 表示移走该文件夹中所有文档Dim uiworkspace As New notesuiworkspaceDim uivie

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号