IBM 官 方 推 荐 用 书 -CHINALOTUS 之
DOMINO7 开发大百科

目前本書有简、繁双體版本,管理篇人民币 166 元 20 万余字,开发篇人民币 199 元 20 万余
字,量多优惠。详情请参考如下网址!
http://bbs.chinalotus.com/viewthread.php?tid=23913&extra=page%3D1&page=1
    本书是笔者在 DOMINO 开发管理领域多年经验结合 CHINALOTUS 十年资源汇集而成的一本
LOTUS 开发管理入门提高之书,编写原因一是工作日久,想总结的心愿也愈见浓厚,再加看到
市面上复制帮助之途类书籍的为祸不浅。因此笔者根据日常工作心得,结合实际的产品及项
目开发经验基于 DOMINO7 编写了这套丛书,希望能给入门的朋友带来一盏指路的明灯;为资
深的同行带来一点新的启发,思想的共鸣!
    本套丛书的特点是,全套 DOMINO 知识是由浅而深;提供大量图文并茂的实例;并随书附
送不断更新价值人民币 150 元 CHINALOTUSVIPFTP,具有大量优秀例程、正版开发工具以及开
发管理资料;还通过 QQ 读书群 5217694 为读者提供永久免费修正升级以及讲解支持。
    因为是专业的 LOTUS 技术书籍,销量有限导致成本较高,DOMINO 确实是个被市场证明的
优秀的群件平台,只是大家都知道的一些原因,只能努其不争,因此欢迎大家团购节省费用。
目前通过各大 LOTUS 技术门户与联盟书店热销中,
购买或咨询方式:QQ:59637733;QQ:441097519 EMAIL:cndragonws@hotmail.com 电话:
86-0731-5817822;5159795 联系人:林小姐



L OTU S 中 文 网
ChinaLotus Software Co., Ltd.

ComBestsoft Confidential
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


                                                            目 录
1.写在前面....................................................................................................................................... 7

2.LOTUS/DOMINO 起源、家族组成 ................................................................................................... 9

   2.1 LOTUS/DOMION 的起源 ........................................................................................................... 9
   2.2 LOTUS/DOMION 所支持平台及家族组成............................................................................. 11

3.LOTUS/DOMINO 与现有流行平台的对比分析 ............................................................................ 14

   3.1 LOTUS/DOMINO 与 MICROSOFT/EXCHANGE 的比较 ......................................................................... 18
   3.2 LOTUS/DOMINO 与 JAVA 系统的比较 ...................................................................................... 19

4.LOTUS DESIGNER 7 的主要新功能(整理至 IBM 官方正式红皮书)............. 错误!未定义书签。

   4.1 更直观的所见既所得的编辑...................................................................错误!未定义书签。
   4.2 对 DB2 的集中支持 ..................................................................................错误!未定义书签。
   4.3 对 WEB SERVICES 的集中支持 .....................................................................错误!未定义书签。
   4.4 新增的可编程性......................................................................................错误!未定义书签。
   4.5 其他应用程序开发改进 ..........................................................................错误!未定义书签。
   4.6 用户界面 .................................................................................................错误!未定义书签。
   4.6.1 新的设计元素导航器.........................................................................错误!未定义书签。
   4.6.2 书签 ...................................................................................................错误!未定义书签。
   4.6.3 自定义设计元素文件夹.....................................................................错误!未定义书签。
   4.6.4 快速滚动 ..........................................................................................错误!未定义书签。
   4.6.5 加/减指示器 ....................................................................................错误!未定义书签。
   4.6.6 设计元素视图的新特性 ...................................................................错误!未定义书签。
   4.6.7 为多个元素修改属性 .......................................................................错误!未定义书签。
   4.6.8 设计元素的锁定...............................................................................错误!未定义书签。
   4.6.9 打印增强 ..........................................................................................错误!未定义书签。
   4.6.10 底纹 .................................................................................................错误!未定义书签。
   4.7 设计大纲的新特性 ..................................................................................错误!未定义书签。
   4.8 新的设计元素..........................................................................................错误!未定义书签。
   4.8.1 共享资源 ..........................................................................................错误!未定义书签。
   4.8.2 样式单 ...............................................................................................错误!未定义书签。
   4.8.3 数据连接 ...........................................................................................错误!未定义书签。
   4.8.4 共享代码 ...........................................................................................错误!未定义书签。
   4.9 改良的事件模式......................................................................................错误!未定义书签。
   4.9.1 以代码为目标 ....................................................................................错误!未定义书签。
   4.9.2 被删除的事件 ..................................................................................错误!未定义书签。
   4.9.3 推荐事件 ..........................................................................................错误!未定义书签。
   4.9.4 新的事件 ..........................................................................................错误!未定义书签。
   4.9.5 增强的公式........................................................................................错误!未定义书签。
   4.9.6 新的 @函数 ........................................................................................错误!未定义书签。
   4.9.7 新的命令 ...........................................................................................错误!未定义书签。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                                           1
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  4.9.8 增强的循环........................................................................................错误!未定义书签。
  4.9.9 LOTUSSCRIP 的变化 ...........................................................................错误!未定义书签。
       4.9.9.1 新类的用法 .........................................................................................错误!未定义书签。
       4.9.9.2 远程调试器 .........................................................................................错误!未定义书签。
       4.9.9.3 重新编译所有脚本..............................................................................错误!未定义书签。
       4.9.9.4 针对 Java 的 LotusScript(LS2J).....................................................错误!未定义书签。
       4.9.9.5 LotusScript 增强的函数..................................................................错误!未定义书签。
  4.9.10 自动完成..........................................................................................错误!未定义书签。
  4.9.11 代理增强..........................................................................................错误!未定义书签。
       4.9.11.1 新的用户界面....................................................................................错误!未定义书签。
       4.9.11.2 代理限制列表....................................................................................错误!未定义书签。
       4.9.11.3 访问远程服务器................................................................................错误!未定义书签。
       4.9.11.4 代表运行...........................................................................................错误!未定义书签。
       4.9.11.5 脚本库...............................................................................................错误!未定义书签。
       4.9.11.6 用户激活...........................................................................................错误!未定义书签。
       4.9.11.7 代理安全...........................................................................................错误!未定义书签。
       4.9.11.8 转换共享和私有的代理.....................................................................错误!未定义书签。
       4.9.11.9 新的控制台命令................................................................................错误!未定义书签。
  4.9.12 HTML 增强.........................................................................................错误!未定义书签。
  4.9.13 新的界面设计元素-层.....................................................................错误!未定义书签。
  4.9.14 新的概要增强 ..................................................................................错误!未定义书签。
  4.9.15 新的操作增强 ..................................................................................错误!未定义书签。
  4.9.16 视图增强..........................................................................................错误!未定义书签。
  4.9.17 上下文相关的操作 ..........................................................................错误!未定义书签。
  4.9.18 字段增强..........................................................................................错误!未定义书签。
  4.9.19 窗体增强..........................................................................................错误!未定义书签。
  4.9.20 段落增强..........................................................................................错误!未定义书签。
       4.9.20.1 语言标识符 .......................................................................................错误!未定义书签。
       4.9.20.2 段落边框...........................................................................................错误!未定义书签。
       4.9.20.3 新的区域样式....................................................................................错误!未定义书签。
  4.9.21 嵌入元素的增强 ..............................................................................错误!未定义书签。
       4.9.21.1 改进的操作条支持和增强样式 .........................................................错误!未定义书签。
       4.9.21.2 横跨数据库引用................................................................................错误!未定义书签。
       4.9.21.3 页面或者窗体上的多个嵌入视图......................................................错误!未定义书签。
       4.9.21.4 在嵌入视图中删除文档.....................................................................错误!未定义书签。
  4.9.22 表的增强..........................................................................................错误!未定义书签。
       4.9.22.1 自动调整宽度适应内容.....................................................................错误!未定义书签。
       4.9.22.2 新的选项...........................................................................................错误!未定义书签。
       4.9.22.3 标题样式...........................................................................................错误!未定义书签。
  4.9.23 框架增强..........................................................................................错误!未定义书签。
  4.9.24 工具菜单..........................................................................................错误!未定义书签。
       4.9.24.1 添加一个工具....................................................................................错误!未定义书签。
       4.9.24.2 定制你的工具....................................................................................错误!未定义书签。
       4.9.24.3 DXL 实用程序 ....................................................................................错误!未定义书签。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                           2
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  4.9.25 URL 增强 ..........................................................................................错误!未定义书签。
  4.9.26 增强的 WEBDAV .................................................................................错误!未定义书签。

5.DOMINO 与面向对象技术................................................................................. 错误!未定义书签。

  5.1 面向对象技术的基本特征.......................................................................错误!未定义书签。
  5.2 面向对象方法的重要特征.......................................................................错误!未定义书签。
  5.3 DOMINO 如何体现面向对象的设计.......................................................错误!未定义书签。
  5.3.1 简单操作 ...........................................................................................错误!未定义书签。
  5.3.2 公式语言 ...........................................................................................错误!未定义书签。
  5.3.3 LOTUS          SCRIPT ........................................................................................错误!未定义书签。

6.DOMINO 主要开发技术分析及编码优化指南 ............................................................................ 22

  6.1 DOMINO 支持的主要开放标准 ........................................................................................ 22
  6.2 DOMINO 支持的主要开发语言及方式 ............................................................................. 24
  6.2.1 DOMINO OBJECT MODEL(DOM)类........................................................................................ 24
  6.2.2 LOTUSSCRIPT .............................................................................................................. 28
  6.2.3 公式语言 ..................................................................................................................... 37
         6.2.3.1 什么是公式语言............................................................................................................ 37
         6.2.3.2 不同的应用范围............................................................................................................ 47
         6.2.3.3 应用公式语言中的相关分析......................................................................................... 58
  6.2.4 JAVASCRIPT.................................................................................................................. 76
  6.2.5 HTML&CSS ..................................................................................................................... 87
  6.2.6 JAVA .............................................................................................................................. 89
         6.2.6.1 什么是 JAVA .................................................................................................................. 89
         6.2.6.2 是否应该立即在 Domino 中应用 Java 呢? ................................................................ 90
         6.2.6.3 DOMINO 对象模型对 JAVA 的支持 .................................................................................. 90
  6.2.7 JAVASERVERLET ................................................................................................................ 93
  6.2.8 LOTUS/DOMINO-API ...................................................................................................102
  6.2.9 DOMINO-WEBSERVICES................................................................................................103
  6.2.10 XML ..........................................................................................................................104
  6.3 如何优化我们的编码 .....................................................................................................110
  6.3.1 公式语言的优化 .......................................................................................................110
  6.3.2 脚本语言优化 ...........................................................................................................111
  6.3.3 JAVA & JAVASCRIPTINO 应用程序优化 ..........................................................................116
  6.3.4 DOMINO 对象模型优化...............................................................................................117
  6.3.5 最大限度重用对象 ...................................................................................................118
  6.4 如何在不同应用中选择合适的编码语言 .......................................................................119
  6.4.1 使用公式和 LOTUSSCRIPT 的前提.............................................................................121
  6.4.2 执行 LOTUSSCRIPT 和公式顺序分析 .......................................................................123
  6.5 DOMION 和其他数据库的开发区别..............................................................................126

7.LOTUS/DESIGNER 综合分析 ............................................................................. 错误!未定义书签。

  7.1 帧结构集 .................................................................................................错误!未定义书签。
  7.2 页面.........................................................................................................错误!未定义书签。
  7.3 主表单 .....................................................................................................错误!未定义书签。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                                          3
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  7.4 视图.........................................................................................................错误!未定义书签。
  7.5 文件夹 .....................................................................................................错误!未定义书签。
  7.6 共享代码 .................................................................................................错误!未定义书签。
  7.6.1 代理 ...................................................................................................错误!未定义书签。
  7.6.2 WEB 服务 ............................................................................................错误!未定义书签。
  7.6.3 大纲 ...................................................................................................错误!未定义书签。
  7.6.4 子表单 ...............................................................................................错误!未定义书签。
  7.6.5 共享域 ...............................................................................................错误!未定义书签。
  7.6.6 自动化组件........................................................................................错误!未定义书签。
  7.6.7 共享操作 ...........................................................................................错误!未定义书签。
  7.6.8 SCRIPT 库 ..........................................................................................错误!未定义书签。
  7.6.9 导航器 ...............................................................................................错误!未定义书签。
  7.6.10 层 .....................................................................................................错误!未定义书签。
  7.6.11 DXL..................................................................................................错误!未定义书签。

8.已知开发限制................................................................................................. 错误!未定义书签。

  8.1 已知开发限制..........................................................................................错误!未定义书签。
  8.2 WEB 开发不支持特性 ...........................................................................错误!未定义书签。
  8.2.1 不支持范围........................................................................................错误!未定义书签。
  8.2.2 视图小程序不支持的特性 .................................................................错误!未定义书签。
  8.2.3 WEB 不支持的 DOMINO 操作和代理属性 ..............................................错误!未定义书签。
  8.2.4 WEB 不支持的 DOMINO 日历特性........................................................错误!未定义书签。
  8.2.5 WEB 不支持的 DOMINO 域属性............................................................错误!未定义书签。
  8.2.6 WEB 不支持的 DOMINO 表单属性........................................................错误!未定义书签。
  8.2.7 WEB 不支持的 DOMINO 格式特性........................................................错误!未定义书签。
  8.2.8 WEB 不支持的 DOMINO 帧结构属性 ....................................................错误!未定义书签。
  8.2.9 WEB 不支持的水平基准线属性 .........................................................错误!未定义书签。
  8.2.10 WEB 不支持的 DOMINO 热点属性 .......................................................错误!未定义书签。
  8.2.11 WEB 不支持的 DOMINO 导航器属性....................................................错误!未定义书签。
  8.2.12 WEB 不支持的 DOMINO 表格属性 .......................................................错误!未定义书签。
  8.2.13 WEB 不支持的 DOMINO 文本样式 ......................................................错误!未定义书签。
  8.2.14 WEB 不支持的 DOMINO 视图属性.......................................................错误!未定义书签。

9.DOMINO 独有的内置对象支持分析.................................................................. 错误!未定义书签。

  9.1 内置变量 .................................................................................................错误!未定义书签。
  9.2 内置表单 .................................................................................................错误!未定义书签。
  9.3 内置域 .....................................................................................................错误!未定义书签。

10.DOMINO 特有的 URL 开发详细分析................................................................ 错误!未定义书签。

  10.1 概述.......................................................................................................错误!未定义书签。
  10.2 服务器、数据库和视图.........................................................................错误!未定义书签。
  10.3 帧结构 ...................................................................................................错误!未定义书签。
  10.4 代理、表单和导航器 ............................................................................错误!未定义书签。
  10.5 打开资源 ...............................................................................................错误!未定义书签。
  10.6 增加、删除、编辑、打开和保存文档..................................................错误!未定义书签。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                          4
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  10.7 在 URL 命令中通过 KEY 打开指定文档..............................................错误!未定义书签。
  10.8 页面.......................................................................................................错误!未定义书签。
  10.9 附件、图形和 OLE 对象.......................................................................错误!未定义书签。
  10.10 搜索文本 .............................................................................................错误!未定义书签。
  10.11 通过 START 和 COUNT 参数使用前后页按钮或热点........................错误!未定义书签。
  10.12 验证必须的 URL 命令.........................................................................错误!未定义书签。
  10.13 处理 SSL 验证 .....................................................................................错误!未定义书签。
  10.14 在 WEB 应用程序中设置用户首选项 .................................................错误!未定义书签。
  10.15 单一数据库中管理多语言输入 ...........................................................错误!未定义书签。

11.DOMINO-CGI 开发支持分析 ........................................................................... 错误!未定义书签。

12.一个复杂的 B/S 公告管理系统详细开发实例分析 ...................................... 错误!未定义书签。

  12.1 需求调查 ...............................................................................................错误!未定义书签。
  12.2 详细设计建议及要点实例分析 .............................................................错误!未定义书签。
  12.3 开发流程建议........................................................................................错误!未定义书签。
  12.4 应用开发 ...............................................................................................错误!未定义书签。
  12.4.1 录入表单设计及要点详细分析 .......................................................错误!未定义书签。
          12.4.1.1 录入表单的隐藏域及关联对象作用..................................................错误!未定义书签。
          12.4.1.2 公告的类型获取..............................................................................错误!未定义书签。
          12.4.1.3              公告的有效保留时间及结合 JS 实现日历选择 .............................错误!未定义书签。
          12.4.1.4 多附件的实现..................................................................................错误!未定义书签。
          12.4.1.5 JS 图文混排编辑器的集成..............................................................错误!未定义书签。
          12.4.1.6              面向其他系统的数据同步 .............................................................错误!未定义书签。
  12.4.2 通过 HTML 更好的美化和解析视图数据 ..........................................错误!未定义书签。
          12.4.2.1 利用 HTML 使视图显示数据更美观....................................................错误!未定义书签。
          12.4.2.2 数据的选择以及删除控制.................................................................错误!未定义书签。
  12.4.3 实现可自定义条件的数据查询表单 ................................................错误!未定义书签。

13.DOMINO-B/S 模式下常见应用功能开发指南及分析(例程参见随书附赠的 CHINALOTUSVIPFTP)
................................................................................................................................................... 129

  13.1 多用户登陆邮件系统 ............................................................................错误!未定义书签。
  13.2 结合 AJAX 实现在线感知及消息交互..................................................错误!未定义书签。
  13.2.1 我们通过 AJAX 实现在线感知的目标 ..............................................错误!未定义书签。
  13.2.2 实现的具体步骤实例分析 ...............................................................错误!未定义书签。
  13.3 DOMINO 与 EXECL 交互的多种方式 .........................................................................129
  13.4 在 DOMION 中开发多语种的应用程序 ...............................................错误!未定义书签。

14.DOMINO-B/S 模式下应用系统高级开发指南及分析 ..................................... 错误!未定义书签。

  14.1 利用 ERWIN 和 NOTESSQL 设计 DOMINO ...........................................错误!未定义书签。
  14.2 在 DOMINO 中提供 RSS 服务 ............................................................错误!未定义书签。
  14.3 有效利用 DOMINO/NOTES 缓存机制.....................................................错误!未定义书签。
  14.4 用 DREAMWEVER 开发 DOMINO 应用 .............................................错误!未定义书签。
  14.5 利用 APACHE COCOON 动态的转换 DOMINO 文档到 PDF 及 JPG .......错误!未定义书签。

15.系统集成开发实例分析................................................................................ 错误!未定义书签。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                                                5
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  15.1 DOMINO 利用 ODBC 和关系型数据库的交互.....................................错误!未定义书签。
  15.2 DOMINO-DB2 .......................................................................................错误!未定义书签。
  15.3 DOMINO 与 SAP 的集成开发 ...............................................................错误!未定义书签。
  15.4 基于 DOMINO 以 WEBSERVICES 的形式提供跨平台的数据交互 ....错误!未定义书签。
  15.4.1 创建 WEB 服务 ..................................................................................错误!未定义书签。
  15.4.2 调用和测试 WEB 服务.......................................................................错误!未定义书签。

16.DOMINO 应用程序开发安全性分析................................................................ 错误!未定义书签。

  16.1 基于 ACL 的安全控制 ..........................................................................错误!未定义书签。
  16.2 基于文档存取的安全控制.....................................................................错误!未定义书签。
  16.3 基于域的安全控制 ................................................................................错误!未定义书签。
  16.4 基于代理的安全控制 ............................................................................错误!未定义书签。

17. DOMINO 开发中的设计规范建议.................................................................. 错误!未定义书签。

  17.1 注释规则及功能注释 ............................................................................错误!未定义书签。
  17.2 设计元素命名规则 ................................................................................错误!未定义书签。
  17.3 变量定义规则........................................................................................错误!未定义书签。
  17.4 类定义规则 ...........................................................................................错误!未定义书签。
  17.5 错误处理规则........................................................................................错误!未定义书签。

17.6 JAVASCRIPT 部份编码规范 ....................................................................... 错误!未定义书签。

  17.6.1 异常处理..........................................................................................错误!未定义书签。
  17.6.2 变量命名..........................................................................................错误!未定义书签。
  17.6.3 代码风格..........................................................................................错误!未定义书签。

18.DOMINO 常见开发管理问题汇总.................................................................... 错误!未定义书签。

19.优秀 LOTUS 技术门户和公司推荐................................................................. 错误!未定义书签。

  19.1 LOTUS 优秀技术开发公司推荐 ................................................................错误!未定义书签。
  19.2 LOTUS 优秀技术门户推荐........................................................................错误!未定义书签。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                                    6
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


1.写在前面
     窗外天光微明,忙碌的一天又将开始。。。
                      。。。
     拖着疲惫的身躯,写下这篇序,终于将本书告一段落了!一个许久的心愿也
将圆满。还记得当初决定写这本书的起因,实在是个压抑已久的心愿。
     开始的时候心怀万般喜悦,满以为会在充满回忆的欣慰下写下这篇序,而没
料到是在连续奋斗了月余,基本没完整享受过睡眠美味的今晨,努力的眯着双眼、
敲着自己心爱的小黑完成这个宏愿。但此时该有很多同行也在享受同样的待遇,
IT,挨踢,笑。。
        。。ASP、DOMINO、.NET、JAVA 及即将而来的更多的后来者,将协
作这个世界吵得好不热闹,但对笔者来说,一切似乎都是昨天。而协作-回归本然
之美的时刻才是自己期待的欣慰。经过 ASP 的启蒙、经过.NET 的新鲜、还有对 JAVA
的仔细思考之后,还是感觉让自己爱恨交加的 DOMINO 最好,虽几经差点放弃。。。
                                      。。
     技术要想之能成,巧匠要想成大家,抛却名利的静心真少不了,执著于代码
的小技,终不知成就完善产品的大乐!在这里,在笔者的心中,这个大家这个大
乐就是 LOTUS,太多让人敬畏的神奇在其中,太多大师的手笔让人回味无穷。MY
LOTUS!I LOVE YOU!历经二十余年的风雨,仍能不断进取,给大家带来一个又一
个新的未来!
     工作日久,想总结的心愿也愈见浓厚,再加看到市面上复制帮助之途类书籍
的为祸不浅,因此是笔者站在一个开发者的角度,根据日常工作心得,结合实际
的产品及项目开发经验基于 DOMINO7 编写了开发管理丛书。在具体理论基础方面,
为确保正统性以官方帮助为准,但根据笔者实际工作经验勘误。最终希望能给入
门的朋友带来一盏指路的明灯;为资深的同行带来一点新的启发,思想的共鸣!
     在 本 书 的 编 写 过 程 中 , 笔 者 依 仗 了 中 国 最 大 的 LOTUS 技 术 门 户
WWW.CHINALOTUS.COM 上众多同行朋友近十年积累的 LOTUS 知识以及无私贡献的资
料支持,点点滴滴,才始聚成海。并且在编写的过程中,如 carrot、庄生梦蝶、
长颈叔叔、败类、南瓜大叔、暴雨、光合作用等资深同行在编写过程无私提供的
宝贵意见,父母和亲爱的妻子则在无数的长夜给我了默默的支持,没有他们的支持,
我根本不能想象这套书能顺利完成,只有他们的支持,才能最终成就了笔者这个由
来已久的心愿

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                         7
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     因此笔者在这里对所有支持这套书编写的亲人和朋友除了用心说声感谢还是
只有感谢,对笔者而言只有将书写完美,无他可替,阅书的朋友在阅书的过程中也
请记住这些名字,没他们也就没这套能给你工作带来支持的书。
     青春无忌,所以有最珍贵的书生意气,激扬文字,理想豪言。
     还记否,离开校园时的清涩和迷茫,但最终我们还是起程,各自用并不宽厚
的肩膀负荷着理想和行囊,背井离乡闯荡在异乡。
     岁月如梦,我们到底得到什么又失去什么?蹄过尘扬,是否我们还能相视而
笑?保持心中的爱与理想吧,别管经受了多久的寒冷!别管激情已经遗失蒙尘了
多久!只要坚持,我们定将一起穿越到水穷之处,笑看云起!
     在本书完成之前不久 IBM 宣布了 LOTUS7 下一个版本,代号为 “Hannover”
的详细蓝图,让笔者更加坚信 LOTUS/DOMINO 因为其数十年的丰富积累,开放的精
神,将仍然是那朵最美丽的智慧莲花!“Hannover”主要特性参详如下:
     1)以“工作为中心”是“Hannover”的核心理念,即它在将在 Notes 中采用
一种新的模式和特性集来支持当前的协作应用与流程;
     2)组合应用”则是“Hannover”所要实现的目标,即它通过添加在 J2EE 平
台上开发的功能(定制或打包),来扩展在 Domino 上部署的应用,从而 Notes 客
户机提供更丰富的应用。
     3)基于角色的计算――通过充分利用驻留于服务器版之上的用户配置文件,
企业将可以实现基于 角色的用户供应。
     4)通过使用 WorkplaceClient Technology,将 Workplace 功能集成至 Lotus
Notes 客户机之中。为用户带来更简单、创新、易于使用的客户机,以支持消息传
送、定制应用、办公工具、以及基于 J2EE 的功能等(包括工作管理、文档管理、
以及团队工作空间)。

本书的建议读者范围
     有一定基本的开发基础但并非是 DOMINO 的,具有对函数,变量,过程的基本
知识的能力,熟悉 HTML、CSS、JS 开发的朋友阅读并了解本书,如果不具备以上
基础不建议购买阅读。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                         8
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


2.LOTUS/DOMINO 起源、家族组成
2.1 LOTUS/DOMION的起源
       凡事究其本源,才能熟知其器,因此笔者决定在本书之始以稍长点的篇幅向
本书读者娓娓道来 LOTUS/DOMINO 的起源,其间也是怀着一份敬畏的心感谢 LOTUS
开发者们用自己的青春与才智培育出来这么一朵最美丽的智慧莲花。
       导致 Notes 客户机和 Domino 服务器诞生的最初概念,实际上比个人计算机
的商业开发早了将近十年。
       最开始是 1973 年伊利诺斯州立大学 Computer-based Education Research
Laboratory(CERL)发布了一个名为 PLATO Notes 的产品。在当时,PLATO Notes
的唯一功能就是为缺陷报告加上用户 ID 和日期的标签,以及保护文件避免被其
他用户删除。然后系统开发人员可以对屏幕下方报告的问题作出反应。这种用户
间的安全通信是 PLATO Notes 的基础。
       1976 年, PLATO Group Notes 在吸收了 PLATO Notes 的最初想法之后加以
扩展发布,可以让用户完成以下实现:

   ·    创建按主题组织的私有 notes 文件

   ·    创建访问列表

   ·    阅读特定日期以后编写的所有 notes 文件并作出响应

   ·    创建匿名的 notes 文件

   ·    创建主控消息标志(director message flag)

   ·    标记文档中的注释

   ·    把 notes 文件连接到其他 PLATO 系统

   ·    使用多角色游戏

   其后一直到 1982 年 IBM PC 和 Microsoft MS-DOS 推出后,基于主机架构的
PLATO 性价比变得越来越低。Group Notes 开始变成很多 “notes 类型” 的其
他软件产品。
       早期曾参与 PLATO Notes 开发的 Ray Ozzie 因为对 PLATO Notes 初始的感情,
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                         9
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
决定在其后到来的个人 PC 时代继续完善基于 PC 的 Notes 产品的开发。
     最初他并无法为自己的设想筹到资金。不过 Lotus Development Corporation
的缔造者 Mitch Kapor 发现了 Ozzie 所做研究的发展潜力,决定将 Lotus 的资
金投入该项目的开发。Kapor 的商业敏感性、创造力和远见对于把 Ozzie 的设想
变为现实至关重要。

     在 1984 年年底,在 Mitch Kapor 的资助下,按照 Lotus 的协议,Ozzie 成
立了 Iris Associates Inc。 开发 Lotus Notes 的第一个版本。1985 年 1 月,
Tim Halvorsen 和 Len Kawell 加入了 Ozzie,随后 Steven Beckhardt 也来了。
这些人为公司带来了广博的知识和远见,但在那时协作和消息软件这些观念往好
处说是奇思异想,往坏处说就是不切实际。按照 PLATO Notes 他们 塑造了 Lotus
Notes,但也加以扩展,包括了更多强大的特性,比如在线讨论、电子邮件、电话
簿和文档数据库等等。在其后 DEC 的 Alan Eldridge 加入后,Notes 体系结构的
数据库和安全特性开始进一步完善。

     但是在当时,网络互联手段非常原始缓慢,因此,开发人员最初决定将 Notes
定位为具有一些共享能力的个人信息管理程序(PIM),类似于 Organizer。其次,
PC 操作系统还不成熟,Iris 必须编写大量系统级代码来完成 Nae Server 和数
据库这样的任务。最后,随着网络能力的提高,Iris 开始将 Notes 称作群件
(groupware)。群件这个词(最终基本上变成了 Notes 的同义词)指的是促进
一群人之间进行通信、协作和协调的应用程序。

      为了实现这些目标,Notes 为用户提供了客户机/服务器体系结构,主要特
点是 PC 连接到局域网(LAN)。一个组可以设置一台专门的服务器(PC)和其他
组的服务器通信(可以在同一个 LAN 中,也可通过交换网络)。服务器通过 “复
制数据” 交换信息(就是说位于不同服务器上的同一数据库可能有多个副本,
Notes 服务器软件不断地同步它们)。这就使得用户很容易与分支机构的同事交
换信息,就像在同一间办公室中一样。

      其实在 1984 年,考虑团体通信软件是很古怪的,因为当时多数人还没有接
触过电子邮件系统……产品远远走在了时代的前面。

     Notes 初始另一大特色是定制,Notes 体系结构使用了构造块的方法,通过
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        10
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
将各种不同的服务拼凑到一起就可以构造团体文本性应用程序。因此 Notes 能够
在行业的变迁中生存下来,因为其灵活,用户可以定制它来适应变化的需求。在
差不多的时刻,Apple Computer 推出了带有易用的图形化用户界面的 Macintosh
机器。它影响了 Lotus Notes 的开发人员,让他们开始为新产品提供了面向字符
的图形化用户界面。
     1986 年 8 月,NOTES 第一版基本完成,能展示了它那独到的功能并具备了初
步的文档。因此 Lotus 评估并接受了该产品。Lotus 于 1987 年买断了 Notes 的
版权。 但甚至在第一个版本推出之前 Lotus Notes 就已经成功了。在正式发布
前 Price Waterhouse 的总裁观看了 Notes 的演示,留下了深刻的印象,因此购
买了 10,000 份拷贝。
     这在当时是有史以来一种软件产品最大的 PC 销售量。作为 Notes 的第一个
大客户,Price Waterhouse 预言 Lotus Notes 将改变我们做生意的方式。现在
我们知道,他们的预言应验了。
      至目前的 LOTUS7 为止,LOTUS 的官方销售拷贝已经过亿,并继往开来的继续
发展中。


2.2 LOTUS/DOMION所支持平台及家族组成
     从第一个版本到目前的 LOTUS7,
                      LOTUS
家族已经发展成了一个覆盖众多
领域的庞大家族,在平台支持方
面目前支持:iSeries; Windows;
AIX; Solaris;
其产品家族的组成和用途如下:
1)Lotus Domino Server(LOTUS 服务器)
                               ;
2)Lotus Domino Administrator(LOTUS 管理台);
3)Lotus Domino Designer(LOTUS 开发工具)
                                  ;
4)Lotus Notes(LOTUS 客户端)
                       ;
5)Domino Web Access (以前的 iNotesLOTUSB/S 电子邮件产品);
6)Domino Access for Outlook
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        11
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
(一个为 Microsoft Outlook 用户提供 Lotus/Domino 邮件、地址簿、Calendar and
Scheduling 功能的产品);
7)Lotus Domino Document Manager
(以前的 Domino。Doc-主要用于以下几个方面:组织文档以便工作团队能够有效地
进行共享访问;管理版本以便每一位团队成员都能够获得最新的版本;自动处理
文档驱动的过程,例如评审和批准、汇编和发布、存档,以及记录管理)
8)Lotus/Domino Everyplace
(一套完整的无线解决方案,允许移动 IBM Lotus Notes 和 Domino 用户随时随地
访问其 e-mail、日历、任务列表、目录和其他应用程序。从单一平台支持多种移
动设备,包括个人数字助理 (PDAs)、智能电话和寻呼机)
9)Lotus/Domino Unified Communications
 (以前称为 Domino Unified Communication Services,将语音邮件、电子邮件
和传真进行了整合,从而所有的消息都存储在同一个位置,可以从不同的设备上
访问,包括电话和 PC 机,并能将消息访问扩展到其他设备和技术,比如移动电
话、寻呼机、PDA 和浏览器。此外,还提供了通知功能,在收到消息或者符合特
定条件时以不同的方式通知订阅者)
10)Lotus Connector for SAP Solutions
(它提供 Lotus Domino 和 SAP 企业资源计划软件之间的整合。如果需要从 Lotus
Domino 服务器对 SAP 解决方案数据进行计划或事件驱动的访问,或需要整合
Lotus Notes 收件箱中的 SAP 应用程序工作流项目)
11)Lotus Instant Messaging&Web Conferencing
(SametimeLOTUS 的多媒体视频交流平台);
12)Lotus Learning Management System
(管理基于教室和数字化学习的资源、课件和事件的培训产品)
13)Lotus Virtual Classroom
(通过健壮的协作工具,创建和交付富有吸引力的、基于 Web 的真实培训课程)
14)Lotus Workflow
(LOTUS 的工作流管理设计平台,帮助组织将耗时长、基于人员的活动标准化和流
线化,并且跟踪进展情况,一般须配合 Lotus Domino Document Manager 使用);

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        12
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
15)Lotus Team Workplace (以前的 QuickPlace,LOTUS 的项目协作系统,支持
LDAP);
16)Lotus Enterprise Integrator
(LOTUS 一个声明式的、基于服务器的产品,主要用于数据的移动、同步和提取。
如支持 Domino 和很多关系型数据系统及 Enterprise Resource Planning (ERP)
系统之间交换数据);
17)Lotus NotesSQL
(LOTUS/DOMINO 用来进行数据交互的 ODBC 驱动)
18)Lotus SmartSuite
(LOTUS 的桌面编辑系列工具:1-2-3, 提供了全方位功能;Word Pro 领先的文
字处理器; Organizer Release 5 。04 领先的个人信息管理工具;Freelance
Graphics 为日常交流提供了演示图形包;Approach 则提供了支持整个团队使用的
关系数据库)




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        13
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


3.LOTUS/DOMINO 与现有流行平台的
对比分析
    目前随着技术的日新月异,不断有一些新的技术平台诞生或有一些老瓶装新
酒的再生,基于各种商业目的,为了赶超历史最为悠久的协作平台-LOTUS,经常
会有些有意思的混淆视听的说法诞生。
    为了以正视听,笔者在此以自己的亲身感受拟做以下 LOTUS 与现有主流相似
平台的相关性技术分析,希望能给大家一些正确的认识,以正视听。
    开始之前简短的交代下笔者从业经历。1997-1999 于 ASP 及 Exchange 平台基
础上从事 OA 系统开发;2000-2000 至今一直主要基于 LOTUS 工作,同时对 J2EE
体系开始研究。以上的从业经历确保笔者不是个只知 LOTUS 不知其他者,确保了
以下分析的客观性:)首先我们一起来看看几个对 DOMINO 常见的指责。
1.DOMINO 速度太慢
反对者:
    DOMINO 是基于文档的数据库、不具备数据快速检索功能。当数据库中文档数
超过二到三万条时,几乎显得无能为力。Domino 使用解释性的客户响应机制,在
采用 Browser-Domino 结构响应 Web 请求时, Server 端实时地将 Domino 视图
转换或解释为 HTML 文档传送回客户端,对于复杂视图转换时间长。
    在客户端 Browser 上利用 JavaApplet 实现数据的互操作性,客户端启动
Java VM 就需要耗费很长时间,Java VM 启动后,
                             还要解释运行缓慢的 Java Applet,
用户等时太严重。如在一般的 100M 共享网络上,10 个用户同时查询具有 1 万个
文档的数据库,将费时数分钟,而一般办公系统均有数百个用户。
点评:
     以上这段技术分析是最常见的对 DOMINO 的指责,看似合理,稍微认真的去思
考下,其实有着太多的常识性技术错误。
    首先 DOMINO 是会慢,但这里有个前提,数据很多之后是 DOMINO 会慢还是所
有的数据库都会慢?准确的说法应该是当数据量海量的时候,没有任何数据库不
会慢,而且查询及浏览的时候实现方式和代码质量也很重要,再快的平台如果代

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        14
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
码或实现方式有问题,随便几行代码都可以让一个优秀的平台崩溃。
     接着还是回到速度这个话题,具体而言,速度的定义应该是两个方面,一是
显示速度二是检索速度。
     首先在显示方面,DOMINO 并不是如上文反对者所说的仅支持 Java Applet,
还支持 HTML 和 XML 多种解析方式。
     而且其中如果采用 JAVA 方式显示的话,DOMINO 方面跟普通的 JAVA 系统的实
现方式并没什么区别。如果 DOMINO 速度慢那么 JAVA 开发的系统也是一样的显示
速度。
    并且在笔者从事 DOMINO 开发的过程中,一直不喜欢采用的就是 JAVA APPLET,
因为一是需要客户端配置,二是速度确实慢,三是那界面的显示方式个人感觉不
是很好,因此笔者一般是采用 HTML 或 XML 解析视图的方式。
    如果解析表单上没多少计算的部分或单纯用视图显示那么可以说十万以上文
档的时候,浏览速度不超过 5 秒,注意这里说的是文档而不是字符型的字段数据;
但如果有大量的计算那么显示速度在大数据量下一般会减缓 5-10 秒。
    最接近极限的一次是一个项目上曾遭遇过一个 30 多 GB 的 NSF 数据库,不管
啥方式显示都比较慢,后来干脆心一横,用了单纯视图显示,结果打开速度也不
超过 10 秒,要换了个同指标的关系型数据库估计已经趴下了。
    至于检索,处理好你的代码,建好索引,数十万文档的数据库想得到检索结
果绝对还是可以承受在 10 秒之内的,如果还要提高速度,建议把文档标题和 URL
地址都放到 DB2 里去检索,但如果文档表单里具有读者域或作者域,此法无效。
DOMINO 只负责打开文档:)
2.综合统计能力太差
反对者:
    在办公信息系统中,实时地对公文运行状况进行分类汇总、监控是必不可少
的功能。而 Domino 是基于文档的小型数据库,如要求进行多维数据汇总,其实现
过程十分复杂,效率极其低下,反应缓慢,远不如关系型数据库。
点评:
   “Domino 是基于文档的小型数据库”“基于文档”
                      ,      可以说不错,“小型数据库”
的印象却不知从何得来?不知该文作者的标准是什么?十万篇文档和十万条关系

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        15
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
型记录,无论从存储容量、检索难度、复杂度等方面都不可同日而语。
     所以,在我的印象当中,Domino 数据库的指标一般只提容量,很少提文档数
目,没有什么原因,只是因为在达到文档数目的限制前存储介质早就“爆”掉了。
    并且将 Domino 简单地称为“数据库”,对于它所能完成的工作而言,实在是
一种误解,Lotus/Domino 在市场上一直是作为领先的服务器电子邮件和群件产品
而得到广泛承认的。
    至于“对公文运行进行分类汇总、监控”
                     ,以笔者的经验横向比较的话,只可
能是强项不可能是弱项,这有非常丰富的 DOMINO-OA 产品可证明。
    至于“多维数据汇总”“远不如关系型数据库”
             ,          ,这的确是事实,但每个平台
都有自己所擅长的领域和不擅长的领域。
    DOMINO 作为提供综合服务的群件平台,工作流、协同、通信、文档管理才是
他侧重的方面,否则还要 MIS 系统对大量的原始数据进行多维汇总、处理加工、
产生统计报表做什么。
    而且非要用 DOMINO 做复杂的数据统计分析,也不是没有变通的法子,比如通
过 ODBC、JDBC、LEI, DOMINO 当成一个普通的关系型数据库,
                把                     结合 DELPHI、JAVA
等高级语言,那么 DOMION 一样可以支持复杂的数据统计分析。通往罗马的道路不
仅仅只有一条滴~。
3.实现复杂的应用和界面困难
反对者:
     管理信息系统的界面上一般具有众多的界面元素。如会签界面上至少有文件
标题、正文、附件、起草人、起草时间、处室审核人、审核时间、司局审核人、
签发人、签发时间、会签司局………等等数十项,在 Domino 的视图上实现如此众
多的界面元素十分困难,对于复杂视图在 Notes 中有时竟无法正常显示导致死机。
点评:
    这些更不知道从何说起了,至少在笔者的开发过程中没遇见过,而且科学的
开发方式显示数据也不是依靠视图,而是通过传递给代理一些参数动态构成数据
展现,最终方式有很多种 HTML、XML 等等都可以。至于死机问题,确实存在,但
主要是 R6 以下版本的 C/S 开发中。
4.界面实现手段缺乏呆板

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        16
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
反对者:
    Domino 的界面主要由帧、视图、大纲等一些固定格式组成,缺乏灵活性,样
式粗糙呆板,与 HTML 或应用程序界面相比过于原始化、简单化,缺乏个性。
点评:
    的确,直接使用这些元素是缺乏灵活性,但原因恰恰来在于这些设计元素易
用性。一个粗通 Notes 编程的人可以在极短的时间内搭接出一个基本可用的系统,
这是其它系统所难实现的。随着对于 Domino 编程的进一步了解,还可以进行界面
的定制,应用诸如内嵌 HTML 代码、结合 JavaScript、DHTML 等技术开发出开发出
充满个性和艺术性的界面的应用程序,这方面,DOMINO 产品有太多成功的例子。
当然,灵活性的提高通常也伴随着复杂度的提高,这些工作都是需要一定的编程
量的,如何取舍,是见仁见智的问题。
5.数据共享、导入、导出限难
反对者:
     Domino 文档数据库不支持 ACCESS, EXCELL,FoxPro 等通用前台数据库的共
享访问,也不支持各种 SQL 检索工具通过 ODBC 访问,不支持 SQL 语句查询,数
据共享性能极差、数据批量格式化导入导出困难,在流行的 Internet/Intranet
环境下,难以满足用户端数据访问多样化的需求。
点评:
    首先笔者建议大家针对这几条去看看下 LOTUS 的开发帮助和样例数据库,这
些说法就不攻自破了,至于支持各种 SQL 检索工具通过 ODBC 访问,这是笔者在
项目开发中常通过 NOTESSQL 这个产品做的实现。
    如果要做复杂的交互,JDBCSQL、LEI、ESB 都是非常成熟的解决方案。而且目
前 SOAP 架构下的 WEB 服务也是 R7 默认就提供支持了,且实现非常简单。
    以上是笔者根据自己的亲身经历针对目前几种对 LOTUS/DOMINO 常见不实攻击
的技术分析,希望还大家一个真实的 LOTUS/DOMINO 认识。
    接着笔者将 LOTUS/DOMINO 和目前同样主流的 MSExchange 及 J2EE 下的 JAVA
平台作个具体的对比分析,让大家了解更清晰。这里要补充的是 DOMINO 也是 J2EE
的一个组成和 J2EE 规范没有任何矛盾的地方, R8 本身都有纯 JAVA 的版本了:。
                       且                   )



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        17
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

3.1 Lotus/Domino与Microsoft/Exchange
的比较
     首先在销售过程中 IBM 和 Microsoft 都将两个产品互相描述为竞争的产品,
主要原因是在电子邮件的层次上,这两个产品确有可比性。但是在更大的意义上,
LOTUS 和 Exchange 是完全不同的两类产品。Exchange 基本上专注于电子邮件,而
Notes 则是协作平台,电子邮件只是其中一个基本功能而已。它们两个的不同之处
更胜于其共同之处。
     从 LOTUS 第一版开始设计时,就定位在提供网络连接起来的用户之间针对工
作或问题,互相通讯和协同的综合集成环境。到今天为止,这一产品定位没有改
变过。我看也没有什么理由在未来改变。
     而在 Microsoft 的产品家族中,Exchange 是作为 Ms Mail 的换代产品出现的。
Ms Mail 是文件共享型的邮件系统,从 90 年代初起,Microsoft 希望用将其换代
升级为 Client/Server 结构的邮件系统,并着手开始了产品开发工作。Microsoft
用了许多代码名来称呼这个开发项目:"Spitfire"、"Touchdown"、"EMS"等等。
后来,Microsoft 决定他们必须有一个"Notes Killer",Notes 做什么,这个产品
也要做什么,并最终定名为"Exchange"。
     可是,尽管产品名称和市场目标不断改变,但本质并没有改变。因此 Exchange
从根本上说是一个电子邮件产品。
     最开始 Exchange 有个著名的限制就是每一个服务器数据库只能到 16GB,原因
就是来自于其关系数据库存储内核。试想,如果平均每一个用户都占了 50MB 的邮
箱与公共文件夹大小,那么每一个 Exchange 服务器只能支持 320 个用户。难道这
就是"企业级支持"?要知道,实际使用中,由于邮件中包含了大量的附件文件,
50MB 的限制是很容易达到的。
     从 5。5 版开始,Microsoft 在 Exchange Enterprise Server 中解决了这个问
题,办法就是修改内核,引入新的磁盘存储结构。而在 Exchange Standard Server
中依然如故。
     因此于是新的问题出现了:两个版本不兼容。而且 Exchange 的 Enterprise
版必须运行在 NT 企业版上,价位就不一样了,分别是 Standard 版的3倍和4倍。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        18
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     产品设计思想的不稳定只能给用户造成灾难,Exchange 的升级对用户来说,
每一次升级都意味着"抛弃与取代"。
     另外象办公管理平台目前常需要的 LDAP 服务、HTTP 服务、CA 认证服务、开
发服务如果选择 Exchange 的话,哪怕是最高级版本也是不具有的,需要另外购买
Microsoft 的其他产品组合再加上开发商的代码开发才可以实现。


3.2 Lotus/Domino与JAVA系统的比较
      目前 J2EE 是炒的非常火的一个东西,到处都是宣称自己的系统用 JAVA 开发,
到处都是 JAVA 培训的广告,大有一夜之间 JAVA 来,全国全民都非要学 JAVA 不可
的味道。
     而且很多人都把 JAVA 和 J2EE 混为一谈,但实际上 J2EE 是个很优秀的很大的
体系,JAVA 和 DOMINO 都是其中的组成,因此 J2EE 并不就等同于 JAVA!这是笔者
的第一个观点,因此也只是把 Lotus/Domino 与 JAVA 做对比。
     虽然 JAVA 有跨平台、支撑大用户、较好的开发手段这些不错的优点,尤其跨
平台支持方面,但 DOMINO 就不支持跨平台么,而且历史还早于 JAVA。
     而且就真实的本质而言, JAVA 开发办公管理系统的过程和以前的开发语言
                用
如 VB,ASP 都没太大的区别。开发过程都是先设计数据库、然后编码。只是在开
发过程中 JAVA 有一些不错的技术支持手段。过程仍是老酒装新瓶。
     如果需要一些常用的服务,比如邮件服务、HTTP 服务、LDAP 服务,基于 JAVA
的系统不是要集成第三方的那么就是要自己开发。而不象 DOMINO 天然就提供上述
成熟稳定的服务。因此在系统集成这方面, JAVA 开发的系统的风险性、
                   用               困难性、
稳定性并不比十年前的 ASP 好多少,因为还是一样的设计方式和过程。
     再就是具体开发实现上,DOMINO 本身就提供了很多封装好的支持,而且这些
支持是 20 多年的积累不是一朝一夕的事情,这样就避免了很多重复的开发工作,
而用 JAVA,就要享受很多东西都完全自己来实现了,一些重复的工作无可避免。
     在管理系统最核心的权限方面,DOMINO 本身天然提供七级的完善权限控制,
还有读者域、作者域这些不错的辅助支持。
     而 JAVA,全都靠自己设计开发吧,而且效果基本上也只能到东施的效果,这
不是代码的问题这完全是定位和结构的问题,任何事物都需要时间去完善和积累。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        19
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     以前笔者也曾带领一个团队做过一个 JAVA+SQLSERVER 的 OA 项目。结果,在
项目前期看起来一切都很好,公文也能流转,也能对数据域进行控制。但是,到
后期的时候,问题出现了。
     我们知道 OA 特别是政府部门的 OA,内部机制是非常复杂的。首先,你用什么
来保证修改的东西在文档资料中是可见的,而且后来的人不能修改,第二,如果
我使用数字签名,你如何保证这些文档是我签字的?而不是别人修改数据库之后的
结果,而且完整的数字签名和需要价格不菲的 CA 支持。
     再往下如果我的控制需要做到文档级的,就是说同一类型的文档,这一份你
能看,那一份你不能看?又该如何实现?
     总体来说:控制流转在 DB 环境下没有什么问题,就算是很复杂的控制,也可
以做。但是文档资料的保存,数字签名。实际上,用 DB 来做解决方案,就意味着
你企图使用结构化的数据格式来表示非格式化的东西。 而且,结构化的表示方法
如果出现了问题,比如在文档结构上要改动,那么你怎么应对?一切程序都有变动
的可能。如此下去,修改只会变得越来越复杂以至到处皆补丁。
     当然,非结构化的数据(比如 Word 文档资料)用 XML 来表示。这当然是可以的,
但工作量是多少? 而且 XML 仅仅是一种通过格式的表述工具,所谓 WPS 的使用 XML
技术就可以和 Office 完全兼容,这是一种废话,也就是说说而已,因为你不知道
格式。所以同样的,将来 XML 也许可以支持其他格式的东西,比如矢量图形,但
这里是有前提的,一是所有文件都免费开发格式结构,其次是这个标准大家都认
可,否则转换和兼容性都是镜中花水中月,所以 XML 也不是解决问题的根本办法。
     最后还有个现象,不管是 IBM 还是 MS, OA 中重要的知识管理方面都有自己
                           在
不基于普通数据库解决的独立数字认证、LDAP 用户管理、存储管理解决。
     为什么 MS 不使用关系型数据库,IBM 不使用关系型数据库来做类似的系统。
按理他们有自己的 DB,有自己的开发工具,但是还是重新开始做了类似的系统,
还不值得我们去考虑一些问题吗?
     因此综上所述,协作市场以后的发展趋势肯定是居于 J2EE+DOMINO 的架构,
末了我再将主要观点重复如下:选择 LOTUS/DOMINO 的优点
1)LOTUS/DOMINO 如果不做开发本身也能用,邮件,日程安排,讨论等
2)LOTUS/DOMINO 可大可小,小用户可以在上面做简单的流程及业务处理,开发时

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        20
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
间快,对开发人员要求不高。
3)LOTUS/DOMINO 可与 J2EE 进行很好的接合。从 R7 的发展可以看出。Lotus 将越
  来越好的与 J2EE 进行整合。
4)LOTUS/DOMINO 有 IBM 的技术支持,可以有效的保护投资及技术升级改造,如果
  选择其它开发的平台,将无法保证 OA 系统的延继性(做 OA 的公司倒闭系统无法
  升级,做 OA 的技术人员离开都将对系统造成很大影响,系统本身做好后开发商
  很少对平台进行升级),拿区区几年的时间就说可以跟 LOTUS20 多年的漫长完善
  成熟过程相比,无疑是不现实的。
5)可与其它系统无缝接成,Sametime、workflow、domino.doc 无线应用等,为系
  统的再次升级提供了很好的解决方案,而如果是自已开发的平台,开发商将无
  法帮你提供这些解决方案。
6)Lotus/Domino 相对于 JAVA 具有绝对的价格优越
     真正意义上的 JAVA 部署要购买数据库、应用服务器、邮件等众多 SRV、高端
应用还要购买 EJB 服务器,部署复杂维护成本高,而且几个方面的累计是远远超
过 DOMINO。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        21
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


6.DOMINO 主要开发技术分析及编码
优化指南
6.1 DOMINO支持的主要开放标准
     首先与 Domino 7 有关的开放标准可以分成两大类:Internet 协议、应用程
序和数据协议。
1)Internet 协议
     我们首先分析与 Internet 有关的协议。下面是我们将讨论的一些重要协议
和相应的 RFC:
名称                                                             RFC
Hypertext Transfer Protocol(超文本传输协议,HTTP/1.0)                  1945
Hypertext Transfer Protocol(超文本传输协议,HTTP/1.1)                  2616
Session Initiation Protocol(会话发起协议,SIP)                        3261

Session Initiation Protocol(SIP)--Specific Event Notification 3265

Internet X.509 Public Key Infrastructure Certificate and
Certificate Revocation List (CRL) Profile(Internet X.509 公共 3280
密约基础设施证书和证书撤销列表子协议)

Definition of the inetOrgPerson LDAP Object Class(inetOrgPerson
                                                                2798
LDAP 对象类定义)
Lightweight Directory Access Protocol version 3(轻型目录访问
                                                       3673
协议,LDAP v3)
LDAP Data Interchange Format(LDAP 数据交换格式,LDIF)                 2849
POP3 Extension Mechanism(POP3 扩展机制)                            2449
Internet Message Action Protocol(Internet 消息动作协议,IMAP4)3348
Simple Mail Transfer Protocol(简单邮件传输协议,SMTP)                   2821
Internet Inter-Orb Protocol (IIOP)                             CORBA/IIOP

     Domino 在 R5 中支持上述多数协议。Domino 7 在其核心服务器上实现了这
些标准,并通过这些标准协议公开本机功能。这使得 Domino 成为一种健壮的 Web



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                           22
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
服务器,在向传统的 Domino NSF(Notes 存储设备)数据格式提供一幅 Web “面
孔”的同时实现了 HTTP RFC。
       对于应用程序访问,Domino 在其 DIIOP(作为插入的服务器任务)中支持
IIOP,使 Java 能够远程访问传统的 Domino 数据格式。
       同时,Domino 服务器仍然可以访问 Domino 数据。此外,Domino 服务器上
也有 LDAP 服务器的实现(作为插入的服务器任务),通过 LDAP 公开传统的
Domino Directory 数据。
       Domino 还提供了所有与邮件相关的 RFC 的实现,支持使用 POP3 和 IMAP 客
户机访问邮件文件、使用 SMTP 发送和接收邮件,也支持 MIME。Domino 可以作
为 X.509 Certificate Authority(证书权威,CA)。在 Domino7 中原有的 Notes
证书和标准的 X.509 证书结合在一起。除了作为 CA 外,Domino 在服务器和客
户端完全支持 Secure Socket Layer(安全套接字层,SSL)
       Lotus Instant Messaging 即时消息,
                             (      原来的 Sametime)现在也支持 Session
Initiation Protocol(会话发起协议,SIP),在已有的通信方法上增加了一种
传输机制。 Lotus Instant Messaging 3.x 中,
     在                              作为连接两个不同 Lotus Instant
Messaging 体、或者连接一个 Lotus Instant Messaging 体和一个支持 SIP 的
非 Lotus 体的一种方式引入了 SIP。
       随着语音 IP(VoIP)和多媒体/实时协议的融合,SIP 逐渐被业界接受,现
在已成为在 Internet 上建立基于信号的、类似电话的会话的事实标准。Lotus
Instant Messaging 以后的版本将对 SIP 和相关标准提供更多的核心支持。
2)应用程序和数据协议
       接着我们再看一看与 OSI 模型的数据/应用程序层有关的标准,我们会看到
在这个舞台上控制着各种技术标准的一些角色。其中包括:
Extensible Markup Language(可扩展标记语言,XML)和 Document Object Model
(文档对象模型,DOM)

   ·    XML Schema(XML 模式)

   ·    XML Schema Language Transformation(XML 模式语言转换,XSLT)

   ·    Simple Object Access Protocol(简单对象访问协议,SOAP)

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        23
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   ·    Web Services Definition Layer(Web 服务定义层)

   ·    Universal Description, Discovery, and Integration of Web Services
        (Web 服务统一描述、发现和集成,UDDI)

   ·    Scalable Vector Graphics(可缩放向量图形,SVG)

   ·    Security Assertion Markup Language(安全断言标记语言,SAML)

   ·    Unified Modeling Language(统一建模语言,UML)

   ·    RDF Site Summary, Rich Site Summary, Really Simple Syndication(RDF
        站点提要,丰富站点提要,真正简单的连锁,RSS) 1.0和 2.0



6.2 DOMINO支持的主要开发语言及方式

6.2.1 Domino Object Model(DOM)类

   Domino Object Model(DOM)是 DOMINO 用于构建应用程序的面向对象的类的总
集合,并且通过其支持其他的开发语言来访问 DOMINO 数据库和应用程序。
       在 DOMINO 中这些类是作为标准的 CORBA 对象加入,用来进行分布式应用程序
的创建。对于更高级的定制应用程序,则是通过 C++API 直接访问 DOMINO 服务。
       如果计划编写自己的应用程序,可以使用在模型中定义的对象、成员函数和
属性来操作 Domino 对象.例如,数据库、视图和表单。通常使用对象的属性来获
得对象的信息(例如,利用数据库对象的 RephcaID 属性来查询数据库的复制
ID ) ; 使 用 成 员 函 数 来 执 行 有 关 对 象 的 活 动 ( 例 如 , 使 用 数 据 库 对 象 的
CreateDocument 成员函数在给定数据库中创建一个文档)。从概念上讲, DOM 模
型中存在两种类型的对象。它们是: Front- endUI (前端用户界面)对象和
Back-end (后端服务器)对象。
1 .理解 Front - end 和 Back - end Classes
       为了考虑数据是如何存储在 Domino 中的,可以考虑将 Domino 数据库中的文
档作为一个关系型数据库的纪录。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        24
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     但 Domino 文档比一个典型的数据库记录更复杂。因为它可能包含 richtext、
图片、对象和其他类型的信息。因此,如果使用 Back - end 类进行访问 Domino
文档,操作域中的内容,在文档中增加新域,或者从文档中删除域等操作,则表
单中包含的输入转换和输出有效性公式可能都不能执行。
     另一方面,如果操作 Domino 中的 Front - end 对象,则所作的修改对表
单公式都是可见的。例如,如果激活 NotesuIDocument 类中的 Refresh 成员函
数,则输入转换和输出有效性公式可以执行。

                     $updateBy

                     susan

                     域一

                     域二

                     文档中的表单名


     上图就表示了一个 Back - end 文档,并显示了数据是如何存储在 Domino
数据库中的。 用于创建文档的表单中,
                 “域 1 ”和“域 2 ”已经定义了。这个
表单的名字存储在“表单”域中,如果使用代理或 LotusScript 修改了表单域的
值,则当下一次打开文档时它会利用其他表单呈现给用户。
     如果在文档中没有“表单”域,则 Domino 会使用数据库默认表单显示文档。
如果没有默认表单,则不能显示文档。 $ updateBy 域是由 Domino 创建的内部
域,它包含了已经操作过此文档的用户列表。在大多数情况下,这类使用以$开
头的域名是 DOMINO 自己维护的内置对象。从 Domino R5 开始还允许指定用户输入
的最大值,并将此修改保存在数据库中的 InfoBox 中。
2 . Domino Front - end Ul 对象
     Front - endul 对象用于操作当前用户界面。它们的典型用法是用于事件编
程,以及访问用户当前操作的 Domino 对象。以下是可用的对象。
 l ) NotesUlworkspace 表示当前 Notesl 作台窗口。
 2 ) NotesuIDatabase 表示当前使用的数据库。
 3 ) NotesuIView 表示当前使用的视图。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        25
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
 4 ) NotesuIDocument 表示当前打开的文档。
只有事件联系的对象
  5 ) Button 表示按钮
  6 ) Field 表示域
  7 ) Navigator 表示导航器
3 . Domino Back - end 对象
     Domino Back - end 对象用于操作 Domino 数据。它们不支持任何事件或通
过用户界面的操纵。然而,可以在 Ul 脚本中将 Back - end 对象与 Front - end
对象结合起来。例如, NotesuIDocument 对象具有 Document 的属性,它提供了
访问下划线文档的功能。表 1 - 1 描述了 Back - end 对象存在的相关类功能。

               类                                           功   能

NotesSession                  代表当前脚本的 Domino 环境,提供了访问环境变量、Domino 目录、
                              当前用户信息、以及当前 Domino 平台和版本信息
NotesDbDirectory              代表指定服务器或本地上的 Domino 数据库
NotesDatabase                 代表 Domino 数据库
NotesACL                      代表数据库的访问控制表 ACL
NotesACLEntry                 代表访问控制列表中的一项。该项可代表个人、群组或服务器
NotesAgent                    代表一个代理
NotesView                     代表数据库的视图或文件夹、并提供访问文档的权限
NotesViewColumn               代表视图或文件夹的列
NotesDocumentCollection       代表数据库中满足一定标准的文档集合
NotesDocument                 代表数据库中的文档
NotesItem                     代表文档中的一项数据。不管在用户界面上文档是以何种形式显示的,
                              文档中的数据项都可以通过 LotusScript 看到
NotesRichTextItem             代表 RichText 类型数据
NotesRichTextStyle            代表 RichText 域的属性

NotesEmbeddedObject           代表嵌入对象、链接对象和附件

NotesDateTime                 代表日期和时间。提供了在 LotusScript 日期-时间格式与 Notes 格式之
                              间的转换功能
NotesDateRange                包含 NotesDateTime 范围。NotesDateTime 类型的对象表示一个给定的
                              日期和时间




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                            26
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

               类                                           功   能
NotesLog
                              记录在脚本运行期间,发生的活动和错误。可以在 Notes 数据库、邮件
                              或文件(本地运行的脚本)中记录活动和错误
NotesNewsLetter
                              代表一个包含所有来自其他文档或文档链接信息的文档。所有
                              NotesItem 属性和方法也可以用于 NotesRichTextItem
NotesForm
                              代表 Notes 数据库中的表单
NotesInternational
                              该对象包含了提供关于国际设置信息的属性,例如,在 Domino 环境中
                              运行的日期格式
NotesName
                              这个对象的属性包含了有关 Domino 用户姓名的信息


NotesTimer                    代表 Domino 中的定时器
NotesRegistration             代表 ID 文件的创建和管理
NotesOutline                  代表 Notes Outline 属性
NotesReplication              代表数据库复制设置
NotesRichTextParagraphStyle   代表 RichText 段落属性
NotesRichTextTab              代表 Rich Text 标签属性
NotesViewEntry                代表视图输入项。一个视图输入项表示视图中的一行
NotesViewEntryCollection      代表根据一定标准选择的视图输入项的集合
NotesViewNavigator            代表视图导航器。视图导航器提供了访问所有或者一部分视图输入项的
                              功能
     可以从 Java 访问 Domino Back - end 对象。从而可以用 Java 编写部分应
用程序。 Java 程序在安装了 Domino 的机器上运行。例如, Java 代理可以操
作 Domino 对象。但要注意的是 Java 类程序不是 LotusScript 与 Java 的端口。
事实上,除了界面的语法是不同的之外,;可以执行相同的 C +十代码。
4 .对象层级
     Domino 对象之间存在层级关系。高层级对象包含低层级对象。图 1 一 2 描
述了几个 Domino 对象之间的层级关系。




     上图中每个对象都定义了成员、属性和成员函数。利用这些成员函数,你可
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                            27
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
以访问其他对象。这种包含关系意味着高层级的对象具有访问低层级对象的属性
或成员函数的特性。
     例如,当打开数据库时,可以看到所有的视图。这表示在工作台中打开的数
据库(对象)包含了视图(对象)。而且,当选择一个视图时,可以看到文档。这
表示选中的视图(对象)包含文档(对象)。在使用 Domino 对象时这种层级关系
非常重要。在 Domino Object Model 中 Notessession 是最高层级的对象。如果
从 Notessession 启动,可以对任何对象操作


6.2.2 LOTUSSCRIPT

     当在 Domino 中编程时,可以通过编写 LotusScript 代码来影响 Domino 对
象。代码由对象事件的发生来执行。例如,单击按钮,打开文档,关闭文档,或
者在域中输入数据。使用 objects 视图,可以很容易看见对象可用的事件。
     例如,你可以编写诸如按钮的一段非常简单的对象脚本。
     Sub Click (Source As Button)
     MessageBox (“I’m learning LotusScript!”)
     End gub
     当单击按钮时,这个脚本会显示信息框。

1 .事件描述
     DOMINO 对象有:数据库、代理、操作、视图、文件夹、表单、子表单、页面、
域、热点对象。为响应对象中发生的事件, Domino 通过执行公式、LotusScript 、
JavaScript 和 Java 代码来响应在对象中发生的事件。此外可以将 LotusScript
子例程或函数添加到对象中。并在属于对象的 Script 列表中添加或选取相应的
ScriPt ,同时,代码可保存在 Script 库中。
   Domino 的每一个可编程对象都有一个对应的相关事件列表。每一个对象都有
一个 declarations 区域和 option 区域,可以在其中编写应用于该对象中所有
LotusScript 事件的非执行 LotusScript 语句:
在 Options 区域里可以编写 Option 、 Use 、 UseLSX 和 Const 语句;
在每一个文档和视图都有一个 GlobalS 区域,可以在其中编写应用于文档中所有
LotusScript 事件的非执行 LotusScript 语句;
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        28
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
在 Postopen 事件中对当前文档所做的修改被当作缺省值看待。该文档不被标记
为已产生变化。如果用户在此时关闭文档, Postopen 的修改内容将会丢失,必
须显式的保存此变化。
      Domino 也允许在 web 应用程序中运行 LotusScript 代码,但是有几个限制。
通 常 你 使 用 LotusScript 来 开 发 代 理 , 这 些 代 理 来 自 WebQueryopen 和
WebQueryClose 事件。 LotusScript 代理只能在 Domino 服务器上运行,而不能
在 WEB 浏览器上运行。
l )下面一些表列出了能够使用公式语言、 LotusScript、JavaScript 和 Java
     自动执行的事件。
                                 下表是数据库对象的事件描述

                  事 件 名                                    执 行 时 间

Postopen (LS,F)                         打开数据库后
Postdocumentdelete (LS,F)               文档被删除后
Queryclose (LS,F)                       数据库正在被关闭时
Querydocumentdelete (LS,F)              将文档标记为删除之前
Querydocumentundelete (LS,F)            将文档标记为取消删除之前
                                        将文档标记为拖放操作之前
Querydragdrop (LS,F)
                                        在视图中执行拖放操作之前
Postdragdrop (LS,F)
                                        在视图中执行拖放操作之后
Initialize (LS)                         数据库正在被装入时
Terminate (LS)                          数据库正在被关闭时


                                 下表是文件夹对象的事件描述

                  事 件 名                                    执 行 时 间

Postpen (LS,F)                          打开视图或文件夹之后
Regiondoubleclick (LS,F)                双击日历视图中的区域时
Queryopendocument (LS,F)                装入文档之前
Queryrccale (LS,F)                      刷新视图或文件夹之前
Queryaddtofolder (LS,F)                 将文档添加至文件夹之前
Querypaaste (LS,F)                      文档被粘贴之前
Postpaste (LS,F)                        进行粘贴操作之后
Querydragdrop (LS,F)                    在日历视图中进行一个拖放操作之前




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                           29
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

                  事 件 名                                    执 行 时 间
Postdragdrop (LS,F)                     在日历视图中进行一个拖放操作之后
Queryclose (LS,F)                       正在关闭视图或文件夹时
Initialize (LS)                         装入视图或文件夹时
Terminate (LS)                          正在关闭视图或文件夹时


                                  下表是页面对象的事件描述

                  事 件 名                                    执 行 时 间
onHelpRequest (F)                       选择帮助时
JS Header (JS)                          正在装入文档时
onBlur (JS)                             取消选中对象时
onClick (JS)                            选中对象时
onDblClick (JS)                         双击选中对象时
onFocus (JS)                            选中可编辑域时
onHelp (JS)                             选择帮助时
onKeyDown (JS)                          按下键时
onKeyPress (JS)                         按下键时
onKeyUp (JS)                            放开键时
onLoad (JS)                             打开文档之后
onMouseDown (JS)                        按下鼠标按钮时
onMouseMove (JS)                        移动鼠标时
onMouseOut (JS)                         鼠标移出对象时
onMouseOver (JS)                        鼠标移动经过对象时
onMouseOut (JS)                         放开鼠标按钮时
onMouseOver (JS)                        重置文档
onMouseUp (JS)                          提交文档之前
onReset(JS) ---form only                关闭文档之前
onSubmit(JS) ---form only               打开文档之前
onUnload (JS)                           打开文档之后
Queryopen (LS,F)                        将文档更改为读或编辑模式之前
Postopen (LS,F)                         将文档更改为读或编辑模式之后运行
Querymodechange (LS,F)                  刷新文档之后(重新计算数值)
Postmodechange (LS,F)                   保存文档之前




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                           30
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

                  事 件 名                                     执 行 时 间
Postrecalc (LS,F)                       保存文档之后
Querysave (LS,F)                        正在装入文档时
Postsave (LS,F)
Queryclose (LS,F)                       关闭文档之后
Initialize (LS)                         选中对象时


                                      表单对象的事件描述

              事 件 名                                        执 行 时 间

表单 WebQueryOpen (F)               显示 Web 文档之前
—— 公用于表单                          为使用以下语法的公式:@command([ToolsRunMacro] agentname”
                                                                    “           )
子表单 WebQuerySave (F)              保存 Web 文档之前

——仅用于表单                           为使用以下语法的公式:@command([ToolsRunMacro] agentname”
                                                                    “           )



                                       域对象的事件描述

              事 件 名                                        执 行 时 间

onClick (JS)                      选中对象时
onChange (JS)                     更改对象时
onBlur (JS)                       取消选定可编辑域时
onFocus (JS)                      选中可编辑域时,光标移到处于编辑状态下的域中
Entering (LS)                     选中可编辑域时
Exiting (LS)                      取消选定可编辑域时
Initialize (LS)                   正在装入文档时——在表单 Initialize 事件之后发生
Terminate (LS)                    正在关闭文档时

                                      其他对象的事件描述

              事 件 名                                        执 行 时 间

onBlur (JS)         操作            取消选定对象时
onClick (JS)        按钮            选择对象时
onDblChick (JS) 热点                双击选择对象时
onFocus (JS)                      选择可编辑域时
onHelp (JS)                       选择帮助时
onKeyDown (JS)                    按下键时




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                             31
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科



             事 件 名                                         执 行 时 间
  onKeyUp (JS)                     放开键时
onMouseDown (JS)
                                  按下鼠标按钮时
onMouseMove (JS)
                                  移动鼠标时
onMouseOut (JS)
                                  鼠标移出对象时
onMouseOver (JS)
                                  鼠标移动经过对象时
onMouseUp (JS)
                                  放开鼠标按钮时
Click (LS,F)
                                  选中对象时
Objectexecut (LS)
                                  对象被启用了 FX/NotesFlow 的 OLE2 服务器激活时
Initialize (LS)
                                  正在装入对象时
Terminate (LS)
                                  正在关闭对象时
Action (F)        代理
                                  运行代理时
JavaAgent (J)
                                  运行代理时
Initialize (LS)                   正在装入代理时
Terminate (LS)
                                  正在关闭代理时


2)在对象视图中 Domino 表单和域事件的任务和采用的开发工具。
                    在对象视图中 Domino 表单事件功能与使用开发工具描述

    事 件             开发语言                             描 述                    Notes   Web
Window Title           公式     给表单命名                                          是      是
HTML Head              公式     包含了所有在 HTML 主题区段中的信息,例如:                       否      是
                              JavaScript
Content                公式     颜色和字体
HTML Body                     包含了所有的 HTML 主体区段中的信息                           否      是
Attributes
WebQueryOpen           公式     当表单从 Web 页面提交之后运行。默认在 Web 文档                   否      是
                              显示之前运行一个代理,这个公式必须运用以下语
                              法:@command([tollsrunmacro];”agentname”),你也可
                              以在不呼叫代理的情况下输入不同类型的公式,你可
                              以输入一个 LS 代理,然后呼叫这个代理
WebQuerySave           公式     必须运用下列语法:
                              @Command([ToolsRunMacro]:”agentname”)
                              可以在不呼叫代理的情况下输入不同类型的公式或
                              输入一个 LotusScript 代理,然后呼叫这个代理



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                             32
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科



      事 件         开发语言                               描 述              Notes   Web
HelpRequest         公式         当用户按下 F1 键时,允许显示自己的表单帮助                 是      是
Target Frame        公式         如果在热点活动属性中设置中没有指定默认值,则将                 是      是
                               打开框架页面、视图和表单
JS Header        JavaScript    将 JavaScript 函数放在这里                     是      是
OnClick          JavaScript    当选中一个对象时运行                              是      是
onDblClick       JavaScript    当双击选中一个对象时运行                            是      否
OnHelp           JavaScript    当选中帮助时运行                                否      只可
OnKeyDown        JavaScript    当按下键时运行                                 否      是
OnKeyPress       JavaScript    当按键时运行                                  否      是
OnKeyUp          JavaScript    当释放键时运行                                 否      是
onLoad           JavaScript    装载文档时运行                                 是      是
OnMouseDown      JavaScript    当按下鼠标时运行                                否      是
OnMouseMove      JavaScript    当鼠标移动时运行                                否      是
OnMouseOut       JavaScript    当鼠标移开对象时运行                              否      是
OnMouseOver      JavaScript    当鼠标越过对象时运行                              否      是
OnMouseUp        JavaScript    当释放鼠标时运行                                否      是
onReset          JavaScript    当用按钮重置文档时运行。触发启动表单,重置活动                 否      是
OnSubmit         JavaScript    当提交文档时运行                                是      是
OnUnload         JavaScript    当退出文档时运行                                是      是
(Option)         LotusScript   适用于所有的脚本对象,并提供一定的说明(例如,                 是      否
                               用途、选项、常数、定义等)
(Declaration)    LotusScript   适用于所有的脚本对象,并确定了所有的全局变量                  是      否
Queryopen        LotusScript   打开文档之前运行                                是      否
Postopen         LotusScript   打开文档之后运行                                是      否
Querymodecha     LotusScript   将文档改为只读或编辑状态之前运行                        是      否
nge              LotusScript   用户将文档改为只读或编辑状态之后运行                      是      否
Postmodechang    LotusScript   刷新文档之后运行(重新计算各值)                        是      否
e                LotusScript   保存文档之前运行                                是      否
Posttrcalc       LotusScript   保存文档之后运行                                是      否
QuerySave        LotusScript   关闭文档之前运行                                是      否
PostSave         LotusScript   装载文档时运行                                 是      否
Queryclose       LotusScript   关闭文档之后运行                                是      否
Initialize
Terminate



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        33
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                           在域中 Domino 事件功能与使用开发工具描述

     事 件            开发语言                             描 述              Notes   Web
Default value       公式            当装载文档时,会显示 Default Value 事件的内容       是      是
Input translation   公式            可用于修改用户输入的数据,调整空格,将用户名               是      是
                                  改成大写或正确的大小写
Input validation    公式            要求从列表中选择一项,可以通过使用@if 公式来完            是      是
                                  成                                    否      是
HTML Attributes     公式            允许你在 Domino 生成的域标签中增加其他属性            是      是
OnBlur              JavaScript    当用户退出域时运行                            否      是
OnChange            JavaScript    当修改域值时运行                             否      是
OnClick             JavaScript    当单击域时运行                              否      是
OnDblClick          JavaScript    当双击域时运行                              是      是
OnFocus             JavaScript    当输入光标进入该域                            是      是
OnKeyDown           JavaScript    当按下键时运行                              否      是
OnKeyPress          JavaScript    当按键时运行                               否      是
OnKeyUp             JavaScript    当释放键时运行                              否      是
OnmouseDown         JavaScript    当按下鼠标按钮时运行                           否      是
OnmouseMove         JavaScript    当移动鼠标时运行                             否      是
OnmouseOut          JavaScript    当鼠标移开对象时运行                           否      是
OnmouseOver         JavaScript    当鼠标移过对象时运行                           否      是
OnmouseUp           JavaScript    当释放鼠标按钮时运行                           否      是
OnSelect            JavaScript    当用户在文本域中选中文本时运行                      是      否
(Options)           JavaScript    适用于所有的脚本对象,并提供一定的说明(用途、
                                  选项、常数、定义等)                           是      否
                    LotusScript                                               否
(Declaration)                     适用于所有的脚本对象,并确定了所有的全局变量               是
                    LotusScript   将光标出现在域中时                                   否
Entering                                                               是
                    LotusScript   当光标离开域时                                     否
Exiting                                                                是
Initialize          LotusScript   当装载域时(例如,用户单击按钮)                     是      否

Terminate           LotusScrip    当关闭域时




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        34
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
3)执行一般 Domino 任务过程中各事件的顺序
                        执行一般 Domino 任务过程中各事件的顺序描述

            任 务                                             事 件 顺 序

打开数据库的一个视图                        [可选]Script Library Initialize (视图)
                                  Globals Initialize (视图)
                                  Initialize (视图)
                                  Queryopen (视图)
                                  Querypostopen (视图)
                                  [可选] Script Library Initianlize (数据库)
                                  Initialize (数据库)
                                  Postopen
从一个视图中关闭数据库                       Queryclose (视图)
                                  [可选]Script Library Terminate (视图)
                                  Queryclose (数据库)
                                  Terminate (数据库)
打开数据库                             [可选]Script Library Terminate (数据库)
                                  [可选]Script Library Initialize
                                  Initialize

关闭数据库                             Queryclose
                                  Terminate
                                  [可选]Script Library Terminate
打开视图
                                  [可选] Script Library Initialize
                                  Globals Initialize
                                  Initialize
                                  Queryopen
                                  Querypostopen
刷新视图
                                  Queryrecale
离开视图
                                  Queryclose
                                  Terminate
                                  Globals Terminate
编写新文档                             [可选] Script Library Terminate
                                  [可选] Script Library Initialize
                                  Globals Initialize
                                  Initianlize
                                  JS Header
                                  Queryopen



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                    35
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科



            任 务                                            事 件 顺 序

                                  Initianlize (域)
                                  Postopen
                                  onLoad
编辑己有文档                            QueryOpenDocument (视图)
                                  [可选]Script Library Initialize(表单)
                                  Globals Initianlize
                                  Initianlize (表单)
                                  JS Header
                                  Queryopen
                                  Initianlize (域)
                                  Postopen
                                  onLoad
更改文档模式(编辑/读)                      QueryModeChange (表单)
                                  PostModeChange
保存文档                              Querysave (表单)
                                  Onsubmit
                                  Postsave
刷新文档                              Postrecac (表单)
关闭文档                              Queryclose (表单)
                                  onLoad
                                  Terminate (域)
                                  Terminate (表单)
                                  Globals Terminate
                                  [可选]Script Library Terminate
删除视图中的文档                          Querydocumentdelete
                                  Postdocumentdelete
取消删除视图中的文档                        Querydocumentundelete
运行代理                              [可选]Script Library Initialize
                                  Initialize
                                  Terminate
                                  [可选]Script Library Terminate
输入域                               Entering
                                  onChange
                                  Exiting
                                  onBlur

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                               36
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

6.2.3 公式语言


6.2.3.1 什么是公式语言
     公式语言提供了语法和函数(包括命令),可以对常量和变量进行赋值计算,
并执行简单的逻辑运算。变量可以是 Notes 文档中的域或是只用于即时公式的临
时变量(也叫做临时域)。公式由一个或多个语句构成,每个语句都由一些成份所
构成。下面列出在公式语言规则中的一些概括性主题。

一.词法元素
1 .常量
     在公式中,一般使用三种类型的常量。列表也可以指定为常量格式。
( l )文本常量
     文本常量是包含在引号中的字符,其中也包括空格、数字和特殊字符。下面
是使用文本常量的基本规则。
     1 )不要在引号中输入变量名,否则变量名将作为文本处理。
     2 )如果希望将数字作为文本处理,则应在引号中输入数字。
     3 )如果要包含连续多个字符,例如空格,可以使用@ RePeat 。
     4 )反斜杠在文本常量中作为转义字符使用。要在文本常量中嵌入引号,须
          在每个嵌入的引号前加上一个反斜杠。要在文本常量中嵌人反斜杠,
          则必须键人两个反斜杠。
( 2 )数字常量

  数字常量由数字和特殊字符构成,中间不加空格,输入数据的合法格式参见表
2-l 。下面是使用数字常量的基本规则。

  l )整数:由字符 0-9 组成的不加空格的正整数。

  2 )小数点:小数点可以放在数字字符的前面、后面或中间。

  3 )正负号:数字的第一个字符可以是正号或负号。

  4 )科学记数:数字带后缀 E ,正号(缺省)或负号,再加一个整数。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        37
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                                   输入数据的合法格式

数字类型                   常量                                  结果

整数                     123                                 123

小数                     .123                                0.123

负数                     -123.4                              -123.4

科学记数                   123E2,   123E-2                     12300,   1.23

( 3 ) 日期常量

  时间-日期常量由时间和(或)日期构成,放在方括号中。下面是使用时间数字
常量的基本规则。

1 )   12 小时制:时间格式为【 hh: mm :ss 】 ,后面跟着字符 AM 或 PM ,小
时的范围是 00 到 12, 秒的部分是可选的,缺省为 00 。

2 )   24 小时制:时间格式为 【 hh: mm :ss 】 ,小时的范围是 00 到 23 ,
秒的部分是可选的,缺省为 00 。

3 ) 日期:日期的格式为【 mm/dd/yy 】。其中年份是可选的,缺省情况下为当
年年份。使用 yy 来指定 20 世纪( yy 大于或等于 50 )或者 21 世纪( yy 小
于 50 )中的一个年份;使用 yyyy 指定任意一个年份。日期格式的有效性取决
于用户在操作系统控制面板选择的日期分隔符, Windows 、 UNIX 和 Macintosh
的缺省分隔符是斜杠( / )。 OS / 2 缺省分隔符是连字符 ( - )。

4 ) 时间和日期:时间和日期的格式为【 time date 】 或【 date time 】 如
果时间和日期值相减,所得的整数结果表示两者之间秒的差值。

                 表示时间一日期的输入格式(假设年份为 2001 年)

时间-日期格式               常量                                    12 小时制结果

24-小时制                【 1:20 】                              01:20:00 AM

12-小时制                【 1:12 PM 】                           01:20:00 PM

24-小时制                【 13:20 】                             01:20:00 PM



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                 38
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
日期                    【 1/15 】                             01/15/00

日期                    【 1/15/00 】                          01/15/00

时间-日期                 【 1/15 2:30 PM 】                     01/15/00 02:30:00 PM

时间-日期                 【 1:20 PM 2/15 】                     02/15/00 01:20:00 PM

差值                    【 1:30 PM-【 1:30 】】                  43200

2 .变量

  在公式中,一般使用两种类型的变量。

  (l)域

  公式可以访问正在处理的文档中的域。每个域的名称和类型都在数据库设计中
指定。域的数据类型必须符合正在执行的操作或函数的要求。否则,在使用之前
必须进行转换。与域相关的概念如下。

   l )域值

  域值是公式启动时在文档中指定的。如果没有存取控制的限制,公式可以对域
值进行修改。必须使用 FIELD 关键字来修改域,否则变量将被当作临时变量处理。
FIELD 关键字还可以用来在当前文档中创建新域。

  2 )空域

  空域等价于文本常量”” (空双引号)。因为””是一个文本常量,所以要避
免在非文本域中使用它。具体地说,可编辑的非文本域应该使用缺省公式以保证
该域包含正确类型的域值。

  3)删除域

  使用@ DeleteField 从文档中删除域。

  4 ) 表单域

     如果用来创建文档的表单没有保存在文档中,可以使用一个名为 Form 的域,
这里包含了表单的名称。如果表单保存在文档中,则可以使用名为$TITLE 、$

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                39
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
Info 、$windowTitle (如果设计指定了一个窗口标题)和$Body 的域。其中
$TITLE 包含了表单的名称。可通过选择“文件” |“文档属性”,并选择“域”
来查看文档中包含哪些域,也可以通过删除$TITLE 、$Info 、 $ windowTitle
和$Body 来删除存储在文档中的表单。之后必须创建一个 Form 域来存放数据库
中的表单名称。

   5 ) RTF 文本域

  对 RTF 文本域的内容不能进行计算。但是可以访问该域的属性。

   6 ) 列表

  列表是包含多值的域。某些函数和运算符就是专门用来处理列表的。

   ( 2 ) 临时变量

  临时变量只存在于公式中。其作用范围就是所在公式,除了公式中赋予的属性
之外不再具有其他属性。

  创建临时变量的语法是: variableName := Value 。

  变量取等号右边值的类型。该值可以是域的任何类型或布尔型。布尔型数据类
型由特定的函数返回其值,该值或为真(计算文本值为 l ) ,或为假(计算文本
值为 0 )。

     如果变量之前没有关键字 FIELD ,则在等号左边使用变量名将得到一个临时
变量。

      关键字一般是语句中的第一个词。通常约定关键字用大写字母输入。可以输
入小写,但是在保存公式时将其转换为大写。公式语言包括一套执行特殊功能的
关键字。

      下表描述了这些关键词的用法。

关键字语法                        描述

DEFAULT    fieldName : =     将一个值与域关联。如果域在正被处理的文档中已经存在,则

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        40
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
ValUe                        其当前值被使用。如果域不存在,则当作域已经存在来处理该
                             文档,并且使用 DEFAuLT 值

                             指定一个值为环境变量,       环境变量放置在用户的 NOTEs . INI 文
ENVIRONMENT variable : =
                             件中( windows 、 0512 、 UNIX )或 Notes Preforences 文
textValue                    件中 ( Macintosh )

                             将一个值指定给当前文档中的一个域。如果域不存在,则创建
FIELD fieldName := value
                             该域,如果已经存在,替换它的内容

                             在公式中加入注释而不影响它的功能
REM【”remarks”】

                             指定当前文档在视图选项、复制和代理公式中是否有效
SELECT logicalValue


  4 .运算符

  运算符用来赋值、修改值,还可以将现有的值合并到新值。

  ( l )运算符和它们的优先级描述

  下表列出了各种运算符和它们的优先级,数字 1 - 6 表示优先级依次降低。下
表中各种运算符和它们的优先级描述

运算符               操作                优先级               运算符             操作

  括号         明确计算顺序                   最高


  :=              赋值                   NA                  =          等于


   :           列表并置                    1                   *=         恒等于


   +              正数                   2                   <>         不等于


   -              负数                                       !=         不等于


   *              乘法                   3                   =!         不等于


   **             连乘                                       ><         不等于


   /              除法                                       *<>        恒不等于


   */             连除                                       <          小于



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                              41
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

   +          加法,并置                    4                   *<          恒小于


   *+             累加                                       >           大于


   -              减法                                       *>          恒大于


   *-             累减                                       <=         小于或等于


   !             逻辑非                   6                   *<=    恒小于或等于


   &             逻辑与                                       >=         大于或等于


   |             逻辑或                                       *>=    恒大于或等于


 ( 2 ) 计算顺序

  操作中涉及到的值必须属于同一数据类型。括号外的操作从优先级 1 开始按优
先级的顺序进行。相同优先级的操作按照从左到右的顺序计算。

( 3 ) 运算符分类

  1) 赋值运算符

  赋值运算符(:= )将等号右边的值赋给左边的变量,右边值的类型即为变量
  类型。变量之前可以加上关键字 DEFAULT 、 ENVIRONMENT 或 FIELD 。没有前
  缀关键字的变量是临时变量。

  2) 列表运算符

  列表运算符(: )将值并置在一个列表中。这些值必须具有相同的类型。值可
  以是常量、变量和表达式,也可包括其他列表。

  因为列表并置具有最高优先级,所以列表元素中的表达式必须用括号表示。

  3) 单目运算符

  单目运算符(+和一)指出数字值的符号。一个无符号的数字值是正数。

  4) 算术运算符

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                              42
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
    算术运算符( * / +-)通过加、减、乘、除四种运算将两个数值合二为一。

    5) 文本运算符

    文本并置运算符( + )将两个文本值合并。

    例如: CompanyName + , "           Inc."     ,的操作结果是变量 companvName 的值
    的后面加上一个逗号、一个空格和“ Inc . ”。

    6)比较运算符

     比较运算符(=、<>、!=、><、<、>、<=和> = )用来比较相同
类型的数值,并产生一个逻辑结果(真或假)。
     例如: “ London ” = “Lon” + “don”的运算结果的逻辑值是真。
     7)逻辑运算符
     逻辑运算符(!、&、和 l )计算逻辑值。逻辑运算的优先级本身就低于周
围的比较运算。
     例如: 4 = 2 十 2 & 5 = 3 + 2 操作的结果值是真。
     (4) 列表操作
     列表操作有以下两种类型:
     1)并列运算符:并列运算符对两个列表进行并列运算。如果一个列表的元素
数量少于另一个,则短一些的列表的最后一个元素将重复若干次以匹配长的列表。
如果列表 1 包含 A : B : C , 而列表 2 包含 1 : 2 ,则列表 2 将作为 1 : 2 :
2 参加运算。对于并列的比较运算,只要对应的列表元素中有一个匹配的情况即
返回真值或 1 。
     2)交叉运算符:交叉运算符对两个列表进行排列组合。计算结果列表的每一
个元素对应于每一种排列组合的情况。
     3)如果在一个列表和一个非列表值之间进行运算,非列表值和列表中的每一
个元素进行匹配计算。
                               下表显示了并列和交叉运算符
并列运算符           交叉运算符           含义            并列运算符        交叉运算符     含义

*               **              乘法            <            *<        小于

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                             43
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                 */             除法            >=           *=         大于或等于
/

                 *+             加法            <=           *=         小于或等于
+

                 *-             减法            =            *=         等于
-

                 *>             大于            !=           *!=        不等于
>

3.函数及函数类型
      Notes 函数用于公式中。公式执行特定的计算并计算出一个返回值,并用该
值替换自身。使用函数时必须满足正确的数据类型。
      函数由函数名后面紧随参数(如果有的话)构成,函数名的第一个字符总是
@。其通常的格式为: @ function - name ( argumentl; argument2; …
argumentn )
      函数的参数要放在括号中。没有参数的函数可以省略括号。在多个参数情况
下,可使用分号分隔各个参数。函数的参数需要使用指定正确的数据类型。
      有 些 函 数 的 参 数 为 关 键 字 参 数 , 例 如 @ Abstract 、 @ Command 、 @
PostedCommand 、@ DocMark 、@GetPortsList 、@PickList 、@Mailsend 、
@Name 和@Prompt 等函数,需要将关键字参数放在方括号中.
     附加效果是在公式的直接影响范围之外产生的操作。例如,@PromPt 除了返
回一个值外还显示一个对话框。下表给出特殊函数产生的附加功能描述
函数                        附加效果

@ Command                 函数附加效果 执行 Notes 命令(例如打开一个数据库)

@PostedCommand

                          访问另一个视图或数据库,并提取数据
@ DbColumn


@ DbCommand


@ DbLookup

                          初始化(或终止)一个 DDE 对话,或执行一条 DDE 语句
@ DDEInitiate


@ DDEExecute

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                              44
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

@ DDEPoke


@ DETenninate

                          创建一个 Notes 邮件便笺,并转发给另一个用户或数据库
@ Mailsend

                          显示一个对话框,并可能返回数据
@ Prompt


@ PickList


@ DialogBox

     @Command 和@PostedCommand 函数执行一个 Notes 命令。由于这些函数数量
众多,地位待殊,因此构成了一个独立的分类称作@Command 。每个命令均以@
Command 或 @PostedCommand 的第一个参数命名,该参数是关键字参数。根据不
同的 Notes 命令,可能还需要其他参数。
     @command 可以在便捷图标、按钮、热点和操作的公式中使用,也可以在运行
于当前文档上的代理公式中使用。多数@command 均模拟菜单命令,并且涉及计
算顺序和产生附加效果。
     把 NoExernalApps 的环境变量设为 1 将使所有包含@Command 函数的公式无效,
但用户不会得到错误信息,只是公式不再执行。
     Notes 的@Command 按从上到下、从左到右的顺序计算公式,完成一个语句之
后再进行下一个,而@PostedCommand 函数必须在其他所有函数执行完毕后才能
按顺序执行。公式语言中不包含分支或循环结构,只有几个函数具有控制逻辑功
能。对于在 Notes R3 和 R4 中运行的应用程序,必须使用@PostedCommand。
     除了@command 以外,公式语言都是对后端 Notes 对象进行操作。例如:在
公式中命名的域指的就是存储器中的该域,要用 FIELD 关键字来修改保存的域。
@Command 在用户界面中运行,在此所做的改动只有在保存文档时才能在后端反
映出来。不能同时通过后端和用户界面访问同一个文档并取得正确的值。
2 .函数中通用的语法规则
     在函数公式的应用中必须遵守以下通用语法规则。
     (1) 语句分隔符
      使用分号分隔多条语句。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        45
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     (2)空格
   在运算符、标点和值之间可以放置任意多个空格(也可以没有)。然而,描述
关键字至少需要一个空格,而且文本常量之间的空格也是很重要的。
      (3) 大小写
     除了在文本常量中,其他地方并不区分大小写。按约定,关键字(如 FIELD )
要大写,函数和@command 名(如 ProperCase )可以大小写混合使用。键入时
可以不遵照本约定, Domino 会在保存公式时按照约定转换大小写。
   (4)运算符和值
     两个值之间应至少有一个运算符相隔。
   (5)在公式中指定表单和视图的名称时。
     l)不要包含名称中的快捷键字符,即下划线(如果有的话)。公式语言把下
划线作为下划线文字处理。
     2)要包括级联字符(即反斜杠),需要转义字符,因此要输入两个反斜杠。
     3 .编写公式
     为了构建一个独立的公式,可以单击设计面板中的 Formula ,并输入公式。
     为了将公式与简单活动结合起来,单击 simple action (s) ,然后单击 Add
Action 。从 Action 列表中选择函数公式,并在编辑窗口中输入公式。
     单击 Fields & Functions 以选择一个函数或域,然后将其粘贴到公式中。
单击@Commands , 以选择一个命令,并将其粘贴到公式中。
     基于公式的代理按顺序对每个文档操作,并在处理下一个文档时,运行完整
的文档公式。
     在代理接口指定要处理数据库中的哪些文档时,可以运用搜索标准。公式中
的 SELECT 说明限制了搜索。如果在公式中没有包含 SELECT 说明, Domino 将会
附加一个 SELECT@ALL 说明。除了 SELECT@ALL ,一个 SELECT 说明必须是公式中
的第一个有效说明。
     4 .调试公式
     公式语言不提供正规的调试机制。可以使用@PromPt 设置断点并检查变量。
在某些情况下(例如不在当前文档和选择公式上运行的代理) , @PromPt 不能工
作。在编写和运行公式时也不会接到警告,语句只是不执行。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        46
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
        为了解决这个问题,可以在便捷图标对象、操作或其他可以运行@PromPt 的
   对象中编写公式。测试完指定的公式以后,删除调试语句,并将公式拷贝粘贴到
   希望放置的对象中去。
        另一种方法是在公式处理文档的表单中设计一个用于调试的域。该公式在测
   试时加载调试域,打开处理的文档即可检测该域。测试完以后,从表单中删除调
   试域并删除公式中的调试语句。


   6.2.3.2 不同的应用范围
        下面列出了在每个函数的适用范围。 X 表示该函数可以用于此环境中。空白
   则表示该函数不能用于此环境中。
        星号表示在某个特别的环境中使用该函数时需要特别注意。值得注意的是,
   当公式运行于服务器上时,有些函数的返回值是不同的。
        下表指出每个函数在环境 1 中的适用范围。其中,环境 1 包括下面内容:便
   捷图标公式、按钮公式、选择公式、列公式、代理 1 (从菜单中手动执行)、代
   理 2(当文档被邮寄、粘贴或者修改时执行)、代理 3(定时执行)、条件隐藏公
   式和区段编辑公式等。
   不同函数在环境 1 中适用范围

函数名称             便捷图标        按钮      选择      列     代理 1       代理 2   代理 3     条件隐藏   区段编辑

@ AbS            X           X       X       X     X          X      X        X      X

@ Abstract       X           X                     X          X      X

@ Accessed       X           X               X     X          X      X        X      X
@ Acos           X           X       X       X     X          X      X        X      X
@ Adjust         X           X       X       X     X          X      X        X      X
@ All            X           X       X       X     X          X      X        X      X




   WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
   TEL:86-0731-5817822 FAX:5159795-608                                   47
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

函数名称                  便捷图标        按钮     选择      列     代理 1     代理 2   代理 3     条件隐藏   区段编辑

@ AllChildren                            X
@ AllDescendants                         X
@ Ascii               X           X      X       X     X        X      X        X      X
@ Asin                X           X      X       X     X        X      X        X      X
@ Atan                X           X      X       X     X        X      X        X      X
@ Atan2               X           X      X       X     X        X      X        X      X
@ AttachmentLengths   X           X      X       X     X        X      X        X      X
@ AttachmentNames                                X     X        X      X        X      X
@ Attachments         X           X                    X        X      X        X      X
@ Author              X           X      X       X     X        X      X        X      X
@ Begins              X           X                    X        X      X        X      X
@ Certificate
@ CheckAlarms        X            X      X       X     X        X      X        X
@ Char               X            X      X       X     X        X      X        X      X
@ ClientType         X            X      X       X     X        X      X        X
@ Command            X            X      X       X     X        X
@ Contains           X            X      X       X     X        X      X        X      X
@ CoS                X            X      X       X     X        X      X        X      X
@ Created            X            X                    X        X      X        X      X
@ Date               X            X                    X        X      X        X      X
@ Day                X            X                    X        X      X        X      X
@Dbcolumn(Notes 数据库) X            X                    X        X      X        X      X
@ DbColumn ( ODBC ) X             X                    X        X      X
@ DbCommand ( ODBC ) X            X                    X        X      X        X      X
@ DbExists           X            X                    X        X               X      X
@DbLookup(Notes 数据库) X            X                    X        X      X        X      X
@ DbLookup ( ODBC ) X             X                    X        X      X
@ DbManager          X            X                    X        X      X        X      X
@ DbName             X            X      X       X     X        X      X        X      X
@ DbTitle            X            X      X       X     X        X      X        X      X
@ DDEExecute etal. X              X                    X        X      X        X      X
@ DDEInitiate        X            X                    X        X      X
@ DDEPoke            X            X                    X        X      X
@ DDETenllinate      X            X                    X        X      X



函数名称                  便捷图标       按钮      选择      列     代理 1     代理 2   代理 3     条件隐藏   区段编辑

DEFAULT               X          X       X       X     X        X      X        X      X

@ DeleteDocument                                       X        X      X

@ DeleteField         X          X                     X        X      X        X      X
@ DialogBox           X          X                     X        X               X      X
@ Do                  X          X                     X        X      X        X      X
@ DocChildren
@ DocDescendants
     WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
     TEL:86-0731-5817822 FAX:5159795-608                                   48
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@ DocFields          X           X                X     X       X       X      X
@ DocLength          X           X       X      X X     X       X       X      X
@ DocLevel                                      X
@ DocMark                                         X     X       X
@ DocNumber                                     X
@ DocParentNumber                               X
@ Docsiblings                                   X
@ DocumentUniqueID   X           X       X      X X     X       X       X      X
@ Domain             X           X       X      X X     X       X       X      X
@ EditECL            X           X                X     X       X
@ EditUserECL        X           X                X     X       X
@ Elements           X           X       X      X X     X       X       X      X
@ EnableAlarms       X           X                X     X       X
@ Ends               X           X       X      X X     X       X       X      X
@ Environment        X           X                X     X       X       X      X
ENVIRONMENT          X           X                X     X       X              X
@ Error              X           X       X      X X     X       X       X      X
@ Exp                X           X       X      X X     X       X       X      X
@ Explode            X           X       X      X X     X       X       X      X
@ Failure            X           X                X
@ False              X           X       X      X X     X       X       X      X
FIELD                X           X                X     X       X              X
@ GetDocField        X           X                X     X       X       X      X
@ GetPortsList       X           X       X      X X     X       X       X      X
@ GetProfileField    X           X                X     X       X
@ Hour               X           X       X      X X     X       X       X      X
@ If                 X           X       X      X X     X       X       X      X
@ Implode            X           X       X      X X     X       X       X      X
@InheritedDocument   X           X       X      X X     X       X       X      X
UniqueID
@ Integer            X           X       X       X     X        X          X            X   X
@ lsAgentEnabled     X           X                     X        X          X            X   X
@ IsAvailable        X           X       X       X     X        X          X            X   X
@ IsCategory                                     X     X        X          X
@ IsDocBeingEdited   X           X                                                      X   X
@ IsDocBeingLoaded                                                                      X
@ IsDocBeingMailed   X           X                                                      X   X
@lsDocBeingRecalcu   X           X                                                      X   X
lated
函数名称                 便捷图标        按钮      选择      列     代理 1     代理 2   代理 3         条件隐藏    区段编辑

@IsDocBeingSaved     X           X                                                  X       X

@IsDocTruncated      X           X       X       X     X        X      X            X       X

@IsError             X           X       X       X     X        X      X            X       X
@IsExpandable                                    X
@IsMember            X           X       X       X     X        X      X            X       X
@IsModalHelp         X           X       X       X     X        X      X            X       X
     WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
     TEL:86-0731-5817822 FAX:5159795-608                                       49
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@IsNewDoc              X          X                                    X        X
@IsNotMember           X          X       X      X X    X       X      X        X
@IsNumber              X          X       X      X X    X       X      X        X
@IsResponseDoc         X          X       X      X X    X       X      X        X
@IsText                X          X       X      X X    X       X      X        X
@IsTime                X          X       X      X X    X       X      X        X
@IsUnavailable         X          X       X      X X    X       X      X        X
@IsValid               X          X                X    X                       X
@Keywords              X          X       X      X X    X       X      X        X
@Left                  X          X       X      X X    X       X      X        X
@LeftBack              X          X       X      X X    X       X      X        X
@Length                X          X       X      X X    X       X      X        X
@Like                  X          X       X      X X    X       X      X        X
@Ln                    X          X       X      X X    X       X      X        X
@Log                   X          X       X      X X    X       X      X        X
@LowerCase             X          X       X      X X    X       X      X        X
@MailDbName            X          X       X      X X    X       X      X        X
@MailEncryptSavedP     X          X                X    X       X      X        X
erence
@MailEncryptSentPe     X          X                     X        X      X        X      X
rence
@MailSavedPerence      X          X                     X        X      X        X      X
@MailSend              X          X                     X        X      X        X      X
@MailSignPerference    X          X                     X        X      X        X      X
@Matches               X          X       X       X     X        X      X        X      X
@Max                   X          X       X       X     X        X      X        X      X
@Member                X          X       X       X     X        X      X        X      X
@Middle                X          X       X       X     X        X      X        X      X
@MiddleBack            X          X       X       X     X        X      X        X      X
@Min                   X          X       X       X     X        X      X        X      X
@Minute                X          X       X       X     X        X      X        X      X
@Modified              X          X       X       X     X        X      X               X
@Modulo                X          X       X       X     X        X      X        X      X
@Month                 X          X       X       X     X        X      X        X      X
@Name                  X          X       X       X     X        X      X        X      X
@NewLine               X          X                     X        X      X               X
@No                    X          X       X       X     X        X      X        X      X
@NoteID                X          X       X       X     X        X      X        X      X
@Now                   X          X       X       X     X        X      X        X      X
@OptimizeMailAddress   X          X                     X        X      X        X      X
函数名称                   便捷图标       按钮      选择      列     代理 1     代理 2   代理 3     条件隐藏   区段编辑

@Password              X          X       X       X     X        X      X        X      X

@Pi                    X          X       X       X     X        X      X        X      X

@PickList              X          X       X       X     X        X      X        X      X
@Platform              X          X       X       X     X        X      X        X      X
@PostedCommand         X          X                     X        X                      X
@Power                 X          X       X       X     X        X      X        X      X
      WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
      TEL:86-0731-5817822 FAX:5159795-608                                   50
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@Prompt              X           X                X    X                       X
@ProperCase          X           X       X      X X    X       X      X        X
@Random              X           X       X      X X    X       X      X        X
REM                  X           X       X      X X    X       X      X        X
@RefreshECL          X           X                X    X       X
@Repeat              X           X       X      X X    X       X      X        X
@Replace             X           X       X      X X    X       X      X        X
@ReplaceSubsting     X           X       X      X X    X       X      X        X
@Return              X           X       X      X X    X       X      X        X
@Right               X           X       X      X X    X       X      X        X
@RightBack           X           X       X      X X    X       X      X        X
@Round               X           X       X      X X    X       X      X        X
@Second              X           X       X      X X    X       X      X        X
@Select              X           X       X      X X    X       X      X        X
SELECT                                   X        X    X       X
@Set                 X           X       X      X X    X       X      X        X
@SetDocField         X           X                X    X       X      X        X
@SetEnvironment      X           X                X    X       X      X        X
@SetField            X           X                X    X       X               X
@Sign                X           X       X      X X    X       X      X        X
@Sin                 X           X       X      X X    X       X      X        X
@Soundex                                        X
@Sqrt                X           X       X      X X    X       X      X        X
@Subset              X           X       X      X X    X       X      X        X
@Success             X           X                X                            X
@Sum                 X           X       X      X X    X       X      X        X
@Tan                 X           X       X      X X    X       X      X        X
@Text                X           X       X      X X    X       X      X        X
@TextToNumber        X           X       X      X X    X       X      X        X
@TextToTime          X           X       X      X X    X       X      X        X
@Time                X           X       X      X X    X       X      X        X
@Today               X           X       X      X X    X       X      X        X
@Tomorrow            X           X       X      X X    X       X      X        X
@Trim                X           X       X      X X    X       X      X        X
@True                X           X       X      X X    X       X      X        X
@Unavailable         X           X                X    X       X               X
@Unique              X           X       X      X X    X       X      X        X
@UpperCase           X           X       X      X X    X       X      X        X
函数名称                 便捷图标        按钮      选择      列     代理 1     代理 2   代理 3     条件隐藏   区段编辑

@URLGetHeader        X           X                     X        X      X

@URLHistory          X           X                     X        X      X

@URLOpen             X           X                     X        X               X      X
@UserAccess          X           X       X       X     X        X      X        X      X
@UserName            X           X       X       X     X        X      X        X      X
@UserPrivieges       X           X       X       X     X        X      X        X      X
@UserRoles           X           X                     X        X      X        X      X
@V2If                X           X       X       X     X        X      X        X      X
     WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
     TEL:86-0731-5817822 FAX:5159795-608                                   51
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@V3UserName           X           X       X      X X    X       X      X        X
@Version              X           X       X      X X    X       X      X        X
@ViewTitle            X           X                X                   X
@Weekday              X           X       X      X X    X       X      X        X
@Word                 X           X       X      X X    X       X      X        X
@Year                 X           X       X      X X    X       X      X        X
@Yes                  X           X       X      X X    X       X      X        X
@Yesterday            X           X       X      X X    X       X      X        X
@Zone                 X           X       X      X X    X       X      X        X

      下表指出了每个函数在环境 2 中适用范围。其中,环境 2 包括下面内容:窗口标
      题公式、热点公式 1(操作)、热点公式 2(弹出式文本)、域公式、表单操作公
      式、视图操作公式、导航器和布局区域等环境中适用范围。

                                      函数在环境 2 中适用范围
     函数名称             窗口标题      热点 1     热点 2      域    表单       表单操作   视图操作   导航器   布局区域
@Abs                    ×        ×        ×        ×     ×        ×      ×      ×     ×
@Abstract               ×        ×        ×        ×              ×      ×            ×
@Accessed               ×        ×        ×        ×     ×        ×      ×            ×
@Acos                   ×        ×        ×        ×     ×        ×      ×      ×     ×
@Adjust                 ×        ×        ×        ×     ×        ×      ×      ×     ×
@All                    ×        ×        ×        ×     ×        ×      ×      ×     ×
@Ascii                  ×        ×        ×        ×     ×        ×      ×      ×     ×
@Asin                   ×        ×        ×        ×     ×        ×      ×      ×     ×
@Atan                   ×        ×        ×        ×     ×        ×      ×      ×     ×
@Atan2                  ×        ×        ×        ×     ×        ×      ×      ×     ×
@AttachmentLengths      ×        ×        ×        ×     ×        ×      ×            ×
@AttachmentNames        ×        ×        ×        ×     ×        ×      ×            ×
@Attachments            ×        ×        ×        ×     ×        ×      ×            ×
@Author                 ×        ×        ×        ×     ×        ×      ×            ×
                                                                                ×
@Begins                 ×        ×        ×        ×     ×        ×      ×            ×
@Certificate                                       ×                            ×
@Char                     ×      ×        ×        ×     ×        ×      ×            ×
                                                                                ×
@CheckAlarms                     ×        ×                       ×      ×      ×
@ClienType                       ×        ×        ×     ×        ×      ×            ×
     函数名称             窗口标题      热点 1     热点 2      域    表单       表单操作   视图操作   导航器   布局区域
@Comrmand                        ×        ×        ×              ×      ×      ×     ×
@Contains                 ×      ×        ×        ×     ×        ×      ×      ×     ×
@Cos                      ×      ×        ×        ×     ×        ×      ×      ×     ×
@Created                  ×      ×        ×        ×     ×        ×      ×            ×
@Date                     ×      ×        ×        ×     ×        ×      ×      ×     ×
@Day                      ×      ×        ×        ×     ×        ×      ×      ×     ×
@DbColumn Notes数据库)
        (                 ×      ×        ×        ×     ×        ×      ×      ×     ×
@DbColumn(ODBC)                  ×        ×        ×     ×        ×      ×      ×     ×
@DbCommand(ODBC)          ×      ×                 ×     ×        ×      ×      ×     ×
@DbExists                 ×      ×                 ×     ×        ×      ×      ×     ×
@DbLookup Notes数据库)
        (                 ×      ×         ×       ×     ×        ×      ×      ×     ×
@DbLookup(ODBC)           ×      ×         ×       ×     ×        ×      ×      ×     ×
@DbManager                       ×         ×       ×     ×        ×      ×      ×     ×
@DbName
      WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
      TEL:86-0731-5817822 FAX:5159795-608                               52
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   @DbTitle                ×         ×        ×    ×  ×      ×         ×        ×        ×
   @DDEExecute etal                  ×        ×    ×  ×      ×         ×        ×        ×
   @DDEInitiate            ×         ×        ×    ×  ×      ×         ×                 ×
   @DEFAULT                ×         ×        ×    ×         ×         ×        ×
   @DeleteField            ×         ×        ×    ×  ×      ×         ×        ×        ×
   @DialohBox              ×         ×        ×    ×         ×         ×                 ×
   @Do                     ×         ×        ×    ×  ×      ×         ×        ×        ×
   @DocChildren            ×         ×        ×    ×  ×      ×         ×        ×        ×
   @DocDescendants         ×
   @DocFields              ×
   @DocLength              ×         ×        ×       ×     ×        ×      ×      ×     ×
   @DocLevel               ×         ×        ×       ×     ×        ×      ×      ×     ×
   @DocNumber              ×
   @DocParentNumber        ×
   @DocSiblings
   @DocumentUniqueID
   @Domiain                          ×        ×       ×     ×        ×      ×            ×
   @EditECL                ×         ×        ×       ×              ×      ×            ×
   @EditUserECL            ×         ×        ×       ×              ×      ×
   @Elements               ×         ×        ×       ×     ×        ×      ×      ×
   @Ends                   ×         ×        ×       ×     ×        ×      ×      ×     ×
   @Environment            ×         ×        ×       ×     ×        ×      ×      ×     ×
   @ENVIRONMENT            ×         ×        ×       ×     ×        ×      ×            ×
   @Error                  ×         ×        ×       ×     ×        ×      ×            ×
   @Exp                              ×        ×       ×     ×        ×      ×      ×     ×
   @Explode                ×         ×        ×       ×     ×        ×      ×      ×     ×
   @Failure                          ×        ×       ×     ×        ×      ×      ×     ×
   @Failure                ×
   @False                            ×        ×       ×     ×        ×      ×      ×     ×
   @FIELD                            ×        ×       ×     ×        ×      ×      ×     ×
   @GetDocField                      ×        ×       ×              ×      ×            ×
                                     ×                ×     ×        ×      ×            ×


       函数名称             窗口标题       热点 1     热点 2      域    表单       表单操作   视图操作   导航器   布局区域
@GetPortsList            ×          ×        ×        ×     ×        ×      ×      ×     ×
@GetProfileField                    ×        ×                                     ×
@Hour                      ×        ×        ×        ×     ×        ×      ×      ×     ×
@If                        ×        ×        ×        ×     ×        ×      ×      ×     ×
@Implode                   ×        ×        ×        ×     ×        ×      ×      ×     ×
@InheritedDocumentUn       ×        ×        ×        ×     ×        ×      ×            ×
iqueID                     ×        ×        ×        ×     ×        ×      ×      ×     ×
@Integer                   ×        ×        ×        ×     ×        ×      ×      ×     ×
@IsAgentEnabled            ×        ×                 ×     ×        ×      ×            ×
@IsAvailabled              ×        ×         ×       ×              ×                   ×
@IsDocBeingEdited          ×                          ×     ×        ×                   ×
@IsDocBeingLoaded                    ×        ×       ×              ×                   ×
@IsDocBeingSaved                     ×        ×       ×              ×                   ×
@IsDocTruncated                      ×        ×       ×              ×                   ×
@IsError                   ×         ×        ×       ×     ×        ×      ×            ×

         WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
         TEL:86-0731-5817822 FAX:5159795-608                               53
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@IsMember                    ×         ×        ×    ×  ×      ×         ×        ×        ×
@IsModalHelp                 ×         ×        ×    ×  ×      ×         ×        ×        ×
@IsNewDoc                    ×         ×        ×    ×  ×      ×         ×                 ×
@IsNotMember                 ×         ×        ×    ×  ×      ×                  ×        ×
@IsNumber                    ×         ×        ×    ×  ×      ×         ×        ×        ×
@IsResponseDoc               ×         ×        ×    ×  ×      ×         ×                 ×
@IsText                      ×         ×        ×    ×  ×      ×         ×        ×        ×
@IsTime                      ×         ×        ×    ×  ×      ×         ×        ×        ×
@IsUnavailable                         ×        ×    ×  ×      ×         ×                 ×
@IsValid                     ×         ×        ×    ×  ×      ×                  ×        ×
@Keywords                    ×         ×        ×    ×  ×      ×                  ×        ×
@Left                        ×         ×        ×    ×  ×      ×                  ×        ×
@LeftBack                    ×         ×        ×    ×  ×      ×                  ×        ×
@Length                      ×         ×        ×    ×  ×      ×         ×        ×        ×
@Like                        ×         ×        ×    ×  ×      ×         ×        ×        ×
@Ln                          ×         ×        ×    ×  ×      ×         ×        ×        ×
@log                         ×         ×        ×    ×  ×      ×         ×        ×        ×
@LowerCase                   ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailDbName                  ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailEncyptSavePreferenc     ×         ×        ×    ×  ×      ×         ×        ×        ×
e                            ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailEncyptSentPreferenc               ×             ×  ×      ×         ×        ×        ×
e                            ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailSavePreference          ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailSend                    ×         ×        ×    ×  ×      ×         ×        ×        ×
@MailSignPreference                    ×        ×    ×  ×      ×         ×        ×        ×
@Matches                     ×         ×        ×    ×  ×      ×         ×        ×        ×
@Max                         ×         ×        ×    ×  ×      ×         ×        ×        ×
@Member                      ×         ×        ×    ×  ×      ×         ×        ×        ×
@Middle                      ×         ×        ×    ×  ×      ×         ×        ×        ×



         函数名称              窗口标题      热点 1     热点 2      域    表单       表单操作   视图操作   导航器   布局区域
    @MiddleBack              ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Min                     ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Minute                  ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Modified                ×        ×        ×        ×     ×        ×      ×            ×
    @Modulo                  ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Month                   ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Name                    ×        ×        ×        ×     ×        ×      ×      ×     ×
    @NewLine                          ×        ×        ×              ×      ×      ×     ×
    @No                      ×        ×        ×        ×     ×        ×      ×      ×
    @NoteID                  ×        ×        ×        ×              ×      ×            ×
    @Now                     ×        ×        ×        ×     ×        ×      ×      ×     ×
    @OptimizeMailAddress              ×        ×        ×              ×      ×      ×     ×
    @Password                ×        ×        ×        ×     ×        ×      ×      ×     ×
    @Pi                      ×        ×        ×        ×     ×        ×      ×      ×     ×
    @PickList                         ×                 ×              ×      ×      ×     ×
    @Platform                ×        ×         ×       ×     ×        ×      ×      ×     ×
    @PostedCommand                    ×                                ×      ×      ×     ×
           WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
           TEL:86-0731-5817822 FAX:5159795-608                               54
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@Power                 ×         ×        ×    ×  ×      ×         ×        ×        ×
@Prompt                ×         ×             ×  ×      ×         ×        ×        ×
@ProperCase            ×         ×        ×    ×  ×      ×         ×        ×        ×
@Random                ×         ×        ×    ×  ×      ×         ×        ×        ×
@RefreshECL                      ×        ×                                 ×
REM                    ×         ×        ×    ×  ×      ×         ×        ×        ×
@Repeat                ×         ×        ×    ×  ×      ×         ×        ×        ×
@Replace               ×         ×        ×    ×  ×      ×         ×        ×        ×
@ReplaceSubsting       ×         ×        ×    ×  ×      ×         ×        ×        ×
@Responses             ×
@Return                ×         ×        ×       ×     ×        ×      ×      ×     ×
@Right                 ×         ×        ×       ×     ×        ×      ×      ×     ×
@RightBack             ×         ×        ×       ×     ×        ×      ×      ×     ×
@Round                 ×         ×        ×       ×     ×        ×      ×      ×     ×
@Second                ×         ×        ×       ×     ×        ×      ×      ×     ×
@Select                ×         ×        ×       ×     ×        ×      ×      ×     ×
SELECT                                                                  ×
@Set                   ×         ×        ×       ×     ×        ×      ×      ×     ×
@SetDocField           ×         ×                ×     ×        ×      ×            ×
@SetEnvironment        ×         ×                ×     ×        ×      ×      ×     ×
@SetField                        ×                ×     ×        ×      ×            ×
@Sign                  ×         ×        ×       ×     ×        ×      ×      ×     ×
@Sin                   ×         ×        ×       ×     ×        ×      ×      ×     ×
@Sqrt                  ×         ×        ×       ×     ×        ×      ×      ×     ×
@Subset                ×         ×        ×       ×     ×        ×      ×      ×     ×
@Success                                          ×
@Sum                   ×         ×        ×       ×     ×        ×      ×      ×     ×



   函数名称            窗口标题        热点 1     热点 2      域    表单       表单操作   视图操作   导航器   布局区域
@Tan                ×           ×        ×        ×     ×        ×      ×      ×     ×
@Text               ×           ×        ×        ×     ×        ×      ×      ×     ×
@TextToNumber       ×           ×        ×        ×     ×        ×      ×      ×     ×
@TextToTime         ×           ×        ×        ×     ×        ×      ×            ×
@Time               ×           ×        ×        ×     ×        ×      ×      ×     ×
@Today              ×           ×        ×        ×     ×        ×      ×      ×     ×
@Tomorrow           ×           ×        ×        ×     ×        ×      ×      ×     ×
@Trim                           ×        ×        ×     ×        ×      ×      ×     ×
@True                 ×         ×        ×        ×     ×        ×      ×      ×
@Unavailable                    ×        ×        ×              ×      ×            ×
@Unique               ×         ×        ×        ×     ×        ×      ×      ×     ×
@UpperCase            ×         ×        ×        ×     ×        ×      ×      ×     ×
@URLGetHeader                   ×        ×                       ×      ×      ×     ×
@URLOpen                        ×        ×                       ×      ×      ×     ×
@UserAccess                     ×                                ×      ×      ×     ×
@UserName             ×         ×         ×       ×     ×        ×      ×      ×     ×
@UserPrivileges       ×         ×         ×       ×     ×        ×      ×      ×     ×
@UserRoles            ×         ×         ×       ×     ×        ×      ×      ×     ×
@V2If                 ×         ×         ×       ×     ×        ×      ×      ×     ×
@V3UserName           ×         ×         ×       ×     ×        ×      ×      ×     ×
     WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
     TEL:86-0731-5817822 FAX:5159795-608                               55
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
@Version              ×          ×        ×    ×  ×      ×         ×        ×         ×
@ViewTitle                       ×        ×    ×  ×      ×         ×        ×         ×
@Weekday              ×          ×        ×       ×                ×        ×         ×
@word                 ×          ×        ×    ×  ×      ×         ×        ×         ×
@Year                 ×          ×        ×    ×  ×      ×         ×        ×         ×
@Yes                  ×          ×        ×    ×  ×      ×         ×        ×         ×
@Yesterday            ×          ×        ×    ×  ×                ×        ×         ×
@Zone                 ×          ×        ×    ×  ×      ×         ×        ×         ×

     下表指出了受 ECL(执行控制列表)影响的函数在环境 3 中适用范围,这些函数不
     在工作站上执行,除非标记 ECL 权限被授予公式的签名人。其中,环境 3 包括的
     ECL 标志为下面内容:访问当前数据库、访问环境变量、访问非 Notes 数据库、访
     问外部程序、发送邮件的能力、访问工作站安全性 ECL、读取其他数据库的能力。

                                      函数在环境 3 中适用范围
    函数名称            访问当前       访问环       访问非 Notes       访问外    发送邮件      访问工作站     读取其他数
                     数据库       境变量        数据库            部程序     的能力      安全性 ECL   据库的能力
@@DbColumn                                                                            ×
@DbColumn(ODBC)                                ×
@Dbcommand                                     ×
@DbLookup                                                                            ×
@DbLookup(ODBC)                                ×
@DDEExecute                                                ×
@DDEInitiate                                               ×
@DDETerminate                                              ×
@DeleteDocument        ×                                   ×
@DeleteDocument        ×
@DeleteField
@EditECL                                                                    ×
@EditUserECL                                                                ×
ENVIRONMENT                       ×
@@Environment                     ×
@GetProfileField       ×
@MailSend                                                        ×
@@RefreshECL                                                                ×
@SetDocField           ×
@@SetEnvironment                  ×
@SetProfileField       ×
@Unavailable           ×
@URLGetHeader          ×
@URLOpen               ×

             在下表中列出了受执行控制表(ECL)影响的命令。只有将表中所标记的 ECL
     特权授予给公式的签名人,这些命令才能在工作站上执行。



     WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
     TEL:86-0731-5817822 FAX:5159795-608                             56
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                                 命令在环境 3 中适用范围
       命令名称               访问文件       访问当前         访问非 Notes   访问外         访问外   发送   引出
                           系统         数据库          数据库        部代码         部程序   邮件   数据
AdminSendMailTrace                                                               ×
AgentEnableDisable                                               ×
AgentRun                                                         ×
AgentSetServerName                                               ×
AgentTestRun                                                     ×
AttachmentDetachAll                      ×
AttachmentLaunch                         ×
DesignRefresh                            ×
EditClear                                ×
EditCopy                                 ×
EditCut                                  ×
EditDetach                  ×
EditInsetFileAttachment
EditInsertObject
EditOpenLink                             ×
EditPaste                                ×



          命令名称                  访问文      访问当前        访问非 Notes   访问外      访问外   发送   引出
                                件系统      数据库          数据库        部代码      部程序   邮件   数据
EditPasteSpecial                             ×
EditUntruncate                               ×
EmptuTrash                                   ×
ExchangeUnreadMarks                          ×
Execute                                                                    ×
FileDatabaseCompact                          ×
FileExport                                                                           ×
FileImport
FileOpenDatabase                             ×
FileOpenDbRepID                              ×
FilePrint                                    ×
FileSave                                     ×
FileSaveNewVersion                           ×
Folder                                       ×
FolderMove                                   ×
FolderRename                                 ×
MailForward                                                                     ×
MailForwardAsAttachment                                                         ×
MailRequestCrossCert                                                            ×
MailRequestNewName                                                              ×
MailRequestNewPublicKey                                                         ×
MailSend                                                                        ×
MailSendCertificateRequest                                                      ×
MailSendEncryptionKey                                                           ×
MailSendPublicKey                                                               ×

  WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
  TEL:86-0731-5817822 FAX:5159795-608                                57
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
ObjectOpen                                                            ×
OpenDocument                                ×
RemoveFromFolder                            ×
ReplicatorReplicateHigh                     ×
ReplicatorReplicateNext                     ×
ReplicatorReplicateSelect                   ×
ReplicatorReplicateWith                     ×
ReplicatorSendMail                          ×
ReplicatorSendReceiveMail                   ×
ReplicatorStart                             ×
SerCurrenrLocation                          ×
ToolsCategorize                             ×
ToolsReplicate                              ×
ToolsRunBackgroundMacros                    ×                 ×
ToolsRunMacro                               ×                 ×
ToolsScanUnreadSelected                     ×
ViewRefreshUnread                           ×


  6.2.3.3 应用公式语言中的相关分析

  函数引用相关文件描述

  1 .邮件抬头文件( notehead . txt )

    邮件抬头文件是一个表示邮件标题单词的自由形态列表。如“ Subject ”、
  “ From ”和“ To”等。为了使@Abstract 分段考虑邮件标题,则必须以这个
  文件中指定的单词开始,随后接一个冒号和空格。如果要将一个邮件标题的重要
  性提高,则在这个单词后边加上星号。例如:

    Subject *

     From *

  2 .缩写字典( noteabbr . txt )

       文件的每一行必须包含两个单词:第一个是原单词,第二个词是它的缩写。
  缩写的单词必须比其替换的词短。大小写问题按下面的方法解决(见表 2 - 11 )。

    1)缩写不会转换成小写,但可能转换成大写。

    2)如果缩写指定为大写字母,则它将始终以大写形式出现。


  WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
  TEL:86-0731-5817822 FAX:5159795-608                        58
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
3)如果原单词以小写形式出现,则缩写后的单词将按简写字典中指定的那样显示。

4)如果原单词是大写或大小写混合的:如果要求匹配原单词中的第一个字母,则
缩写后文本的第一个小写字母将转化成大写;如果要求匹配原单词中第二个字母
的大小写,则缩写后文本的其余字母将转化成大写。

                              下表是缩写和大小写显示样例




3 .非关键词文件( notesig . txt )

     是不重要单词的自由形态列表。如“the”、“ and”和“ of”等。在计算
单词的重要性时,将忽略包含在这个列表中的所有单词。例如:

  the and

  of

4 .关健词文件(notesigl.txt )

     是重要单词的自由形态列表。如“urgent”或“immediately”等。在计算文
本的重要性时,将提高包含在此关键词列表中单词的重要性。例如:

  Client

   Boss

  chocolate




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        59
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
文档级别和视图级别

  1 . Windows 和 0S / 2 文件类型

(1) 文档级别

  Ami Pro

  ANSI Metafile ASCll Text

  MicrosoftWOrd RTF

  TIFF 5 . 0 Image

  Word for Windows 6 . 0

  WordPerfect 6 . 0 / 6 . 1

(2) 视图级别

  Lotus l-2-3 Worksheet

  Structured Text

  Tabular Text

2. Macintosh 文件类型

  Macintosh 不支持在文档级别引出 XTND 文件格式(Mac write II 和 Text)

(l)文档级别

  ANSI Metafile

  ASCll Text

  MicrosoftWord RTF

  TIFF 5.0 Image



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        60
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
(2)视图级别

  Lotus l-2-3 Worksheet

  Structured Text

  Tabular Text

3 . UNIX 文件类型

(l) 文档级别

  Ami Pro

  ANSI Metafile

  ASCII Text

  Frame _ ( MIF )

  Interleaf ASCII

  MicrosoftW6rd RTF

  TIFF 5.0 Image




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        61
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科




     下表描述了部分样本匹配实例




     l)要在当前数据库(执行公式计算的同一个数据库)内执行查找操作,可指
定””作为函数的全部参数。

     在某一服务器上运行的代理只能对位于同一服务器中的数据库执行查找操
作,也就是说,””代表用户正在运行的本地 NoteslDomino 目录,并且倘若用
户碰巧有一个运行于服务器上的代理,那么该代理不能离开服务器执行查找操作。

     2)要在本地数据库上执行查找操作,使用””作为服务器名并明确指定数据
库名,如”” :“DATABASE . NSF”

     3)要在驻留于服务器上的 Notes / Domino 数据库中执行查找操作(从工作
站执行) 可将服务器的路径和文件名作为一个文本列表包括进来, “SERVER”
    ,                         如        :
“ DATABASE.NSF”。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        62
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     4)如果数据库有多个拷贝且位于不同的 Domino 服务器上,那么使用数据库
复本标识符同时替代服务器和数据库名,可以实现对数据库复制拷贝的访问,而
不必指定服务器名或数据库名。例如,如果使用“482569C4 :0006FF6B”(数据
库复本标识符,位于数据库属性框中)作为数据库名,那么 Notes/Domino 即可
使用复本获取所需信息。

     为避免复本标识符的键人错误,选择“文件”|“数据库”|“设计摘要”,
再选择“复制”。然后从摘要里拷贝复本标识符,粘贴到公式中。

     Notes / Domino 按以下顺序搜索复本,使用遇到的第一个复本。

     1)工作台

     如果工作台上有一个复本, Notes / Domino 将使用它。

     如果工作台上有多个堆叠在一起的复本, Notes 使用最上面的复本。

     如果工作台上有多个没有堆叠在一起的复本,Notes / Domino 将查找一个与
     当前服务器匹配的图标并使用它。如果没有与当前服务器匹配的图标,那么
     Notes/Domino 使用最先加人工作台的那个图标。

     2)当前服务器

     3)本地(硬盘)

     一旦找到了一个复本,它将被加入到工作台中,以节省以后的查找时间。

     注意:如果数据库位于 DOS 或 0S / 2 子目录下,例如 ASSEM DB . NSf ,
     那么在目录和数据库名之间加一个双斜杠,如“ASSEM   DB . NSf ” ,
     这是因为公式把单斜杠当作转义字符。

启动非自动缓存 NoCache

     采用 NoCache 是出于性能方面的考虑。强制 Notes / Domino 与数据库连接
以及反复检索相同的信息将花费大量时间,导致整体性能下降。但若期望较频繁
地更改数据,那么为确保信息更新而花费较多时间也是值得的。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        63
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     如果希望确保 Notes / Domino 在每次查询时检索到的都是最新信息,即可
指定此选项。若不使用 NoCache ,查找结果将被缓存,但此时应指定 Cache 可读。
     在每次查找时均能恢复上一次查找信息,即保存结果以备再次使用。每次对
同一场所(在同一 Notes / Domino 会话期且执行此查找操作的数据库保持打开)
的并发查找都会使用此信息。如果省略了 Nocache,查找结果会自动缓存。适合期
望较频繁地更改数据,确保信息更新情况。

使用函数时服务器代理及安全性

     将包含函数的数据库看作源数据库,而被存取的数据库看作目标数据库。当
函数用在一个运行于服务器的代理中时,它只能存取和源数据库处在同一个服务
器上的目标数据库。源数据库必须对目标数据库至少有“读者”存取级别。如果
由于安全性原因,不能将“读者”或更高存取级别赋予“-Default-”群组,仍然
可以赋予函数宏从源数据库对目标数据库进行访问的权限。例如:

l) 使用“文件” |“数据库” |“属性”,确定源数据库的复本标识符,例如:
482569C4: 0006FF6B。

2)使用“文件”|“数据库”|“存取控制”,为目标数据库的存取控制列表添加
一个新条目,条目名即为复本标识符本身,赋予此名称至少“读者”的存取级别。
在上面的功能中,用户添加了一个命名为 482569C4 :0006FF6B 的条目。这样做
特别为源数据库中的宏赋予了访问目标数据库的权限,即使“-Default-”是“不
能存取者”。

(2) 当在任何其他类型的公式或代理中使用函数时,该公式也可访问存放在用户
自己工作站上的任意目标数据库而不受限制。如果目标数据库存放在其他 Domino
服务器上,那么函数的存取由用户自己的存取级别(基于用户的 Notes 用 omino
标识符)决定。

(3) 层次名称

     层次名称是由一系列部件组成,以表示全名、组织单元、组织和国家。使用

层次结构的名称可以保证每个用户和服务器都有一个独一无二的名字。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        64
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     数据库的设计者需要确定输入用户名的方法以及它们在 Notes 应用程序中的
显示。为求简单,应该允许用户以缩写的格式输入名称,然后用@Name 将它扩展
为标准格式。也可以使用 @Name 将保存的标准格式的名称转换成缩写格式,以缩
写格式显示名称。

     使用“名称”、“读者”或“作者”域时, Notes 自动地将层次名称转化成

适当的格式以显示并保存起来。如果用户键入了一个缩写的名称, Notes 会在保

存它时将其扩展成标准格式;而名称在表单中总是以缩写的格式显示。

     在视图中显示层次结构名称域的内容时, Notes 不会自动进行转换,而是将

名称按标准格式显示出来。这时可以用@Name 将该名称转换为其缩写格式。

使用 DDE

     (l) 主要在域公式、代理、按钮和便捷图标中使用。此函数不能用在列公式
     或选择公式中,也不适合于窗口标题或表单公式。

(2) 最多可同时运行 10 个 DDE 对话(在正常情况下,某一时刻只有一个对话运
行)。一旦执行完毕,应确保终止所有 DDE 对话,否则可能耗尽会话期,以至于
需要时却不能初始化更多对话。

(3) 如果用户 NOTES . INI 文件中包含如下语句: NoExternalApps = l ,那么
任何包含@DDE 函数的公式均无效,用户看不到任何错误消息,公式也不能执行。

(4) 不能在 Web 应用程序里使用此函数。

(5) 由于 Macintosh 不支持 DDE ,所以这些命令也不能用在 Macintosh 工作站
上。此外,DDE 命令的格式可能因平台或应用程序的不同而有所不同。

(6) DDE 初始化失败的原因:

     l) 工作站操作系统不支持 DDE ( Macintosh )

     2) 试图建立 DDE 对话的应用程序没有运行。指定文件没打开。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        65
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     3) DDE 应用程序正在运行,但是指定主题没有打开,或者应用程序不支持@
     DDEInitiate 指定主题。

     4) DDE 应用程序正在运行,但是指定文件没打开。

     5) 并行运行的 DDE 对话数目达到了最大值(最大值为 10 )。

与数循库相关概念

1 .惟一标识符

          惟一标识数据库所有复本中的一个文档的 32 位干六讲制数。如果两个文
     本共享同一个惟一的标识符,那么这两个文档互为复本。

          惟一标识符是文档整个标识符数字的一部分。单击文档属性框的“信息”
     附签即可看到文档标识符。“标识符”后的第一行就是惟一标识符,而其他
     字符组成了文档标识符的其他部分。

          一旦创建,文档的惟一标识符就不再更改,除非用户拷贝并粘贴此文档。
     Notes / D omino 将粘贴文档看作是一个新创建的文档,并为它创建一个新
     的惟一标识符。应用程序开发人员可以使用惟一标识符遍历文档的各个答复
     层次。每个子文档都有一个特殊的域$Ref,此域包含了其父文档的惟一标识
     符。这意味着可以为子文档写一个公式,通过将它的$Ref 域值和@
     DocumentuniqueID 的返回值相比较,找到其父文档。

2 .指定视图或文件夹

          可以使用视图全名或其同义词作为视图(或文件夹)参数。例如,如果
     Last Name 视图是“查看”菜单内 By Author 的下级视图,并且具有同义词
     LName,那么在视图属性框中显示的名称为:

          By Author\Last Name|LName

          若引用此视图,那么只需使用同义词 LName (用引号括起来) :

          “LName”

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        66
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
          如果视图名没有同义词,由于视图 By Author 加上 Last Name 作为视图
     名,并用引号括起来。由于视图名是在公式里使用,因此必须在“”的前面
     再加上一个“”才能保证 Notes/Domino 的正确解释:

          “By Author   Last Name”

3. 指定列号

           要指定 columnNumber 参数,首先应从左到右计数视图中的列,最左列
           的列号取为1,事实上, Notes / Domino 索引视图的方式决定了并不
           对每一列都编号查找。

           根据查找目的,使用下述方法计算列号:

1)从左向右计数视图里的列。在设计模式下查看视图,确保显示了所有的列,
包括用于排序或分类视图的列。

2)不计人所有显示常值的列,如“Submitted by :”或 32 。如果列中包含的公
式偶尔为每个文档返回相同的值,但此值并不是“常数”,那么计数应包含此列。

3)不计数由如下函数单独组成的所有列:

@ DocChildren 、@ DocDescendants 、@ DocLevel 、@ DocNumber 、@
DocParentNumbel @ Docsiblings 、@ IsCategory 、@ lsExPandable 。

4)现在从左至右重新计数列。

5)修正后的列号就是在查找公式里指定的值。

6)如果指定了一个不存在的列,那么会得到一个非错误的空值。

4 .应用 ODBC 应注意的规则

(l)标识符

     为避免在公式中存储标识符,可使用空串( " " )替代它们,需要时再给出
提示信息。若不希望其他设计者查看标识符,或在存取外部数据而要求输入用户

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        67
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
自己的标识符时,使用这一功能非常有用。然而必须为自动运行(如代理)的公
式设置标识符和口令,因为这些公式不会显示提示信息。在每个 NoteslDomino 数
据库会话期间,只要数据库保持打开,存取数据源所需的用户标止符和口令则仅
只输入一次。如果打开另一个 Notes/Domino 数据库并执行存取同一个数据源的
工式,则需要再次输入用户标识符和口令。

  (2) 口令参数

     仅当指定了标识符参数,才需要使用口令参数。与标识符相同,口令既可存
储在公式中,也可使用空串代替,而在需要时给出提示。如果数据库的口令为空
串,则可从公式中省略。

       例如,若要指定完整的标识符/口令,输入:

““;””(两个空串,用分号隔开)不指定标识符和口令,或在提示时输入。

       “user _IDl”;“ passwordl” ”指定一个用户标识符和口令组合。

       " user _ ID1 " : " user- ID2 " ; “ passwordl”:“password2”指
定两个用户标识符和口令沮合。

     (3) 指定表格名

     可以有选择地将表格所有者的名字包含进来以消除歧义。使用格式 owner _
                                  “
name . table _ name”,
                    用一句点分隔所有者名和表格名。例如: admin . author”
                                      "               。

     Table 也可引用被访问 DBMS 中的数据库视图。

     (4) 指定命令字符串 command _ string

       命令字符串可以由如下选项任意组合:

       l    SQL 语句(必须使用后台 DBMS 能接受的 SQL 语法)。

       l    一条使用后台 DBMS 命令语言的命令语句。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        68
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
         l    存在于后台 DBMS 里的过程名(过程包含一个或多个在@DbCommand 调
              用此过程时激活的命令字串)。

     时间-日期值必须按数据库的格式,而非 Domino 的格式输入。例如, DB2/2
                                        在
里使用的格式为 2000-01-21-12 . 00 . 00,而不是 2000-01-21-12 : 00 :
00 。

     (5) 指定空处理

     一般情况下,空值将被忽略以缩短返回列表的长度(同以下描述的“Disoard”
选项相同)。

     为了控制如何处理空值,指定下列选择之一,添加到 column 参数中,各个参
数间用冒号分隔

     l       “Fail” :如果数据列包含任何空值,将会生成错误消息(此消息不返
             回任何数据) : “发现空值-取消@Db 功能”

     l       “ Discard " :去掉空值,缩短返回值列表。若执行@DbColumn 公式时
             删掉了一个或多个值,状态条中就会显示此消息:“警告:空值从@Db 列
             表中删除”

     l       “Replacement value” :指定空值的替代值。替代值必须是一个用引号
             括起来的字串,但如果列是数字或日期-时间列,那么字串必须能够转化
             成相应类型。

     如果公式中包含排序关键字,则返回值列表在插人替代值之前排序。排序时,
按升序排列的列表中,空值位于表首,反之则在表尾。排序完成后才进行替换。
这可能导致列表的某些值错排。例如,如果指定“zzz”作为替换值,那么即使按
升序排序列表,所有的“zzz”值仍将出现在表头。

     若执行公式时替换了一个或多个值,状态条中就会显示:“警告:用用户定
义值取代@Db 列表中空值”。一般说来,替换值应该是那些不作为有效数据出现



WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        69
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
在列表中的值。例如,若是文本列,替换值可以是***,这样能方便地在
NoteslDomino 中找到它们。

样例

使用域来获取 CGI 变量

     当域和 CGI 变量具有相同的名称时,Domino 会从 CGI 环境中拷贝域值,并将
它放在域中。应该注意两点:

     l   如果域是可编辑的,不必指定公式。

     l   当编辑预览或编辑时,将域隐藏起来。

     例如,可以创建一个名为 HTTP _ USER _ AGENT 的域。这个域主要获取有关
用户所使用的浏览器的信息。可使用这个域来查看用户浏览器是否支持应用程序
的属性。

     HTTP _ USER _ AGENT 变量的一般格式是软件/版本库/版本。最左边的 11
个字符主要说明了浏览器的版本。你可以在公式中评价它,并在此基础上显示不
同的信息。例如:

     @If (@Left ( HTTP _ USER _ AGENT ;11)=" Mozilla 3.0 " ; " Netscape
Navigator " ;

     @Left( HTTP _ USER_AGENT ; 11)= "MSIE 2.0 "; "Hicrosoft Internet
Explorer " ; " "

     表 2-14 描述了 HTTP _ USER _ AGENT 返回的值。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        70
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
基于公式的代理

  1.传递文档

  当文档没有附件时,遵循下列步骤:

  l) 在 Agent Builder 窗口中,单击 Formula 选项。

  2)在程序员面板中输入下列公式:

  @lf (@Attachments > 0@Return (“”) ;

  @Mai1Send ( “ Gina”; “”;””; Subject ; " Please handle this " +
@Newline ; " Body " ; " " ) ) ;

  2 .使用@ URLOpen 命令来呼叫代理

  @ URLOPen 函数允许在公式中引用代理。你可以将公式与按钮联系起来,这样
可以击活 Web 浏览器的代理。当用户单击按钮时,可以运行这些代理。下面这个
例子说明了如何击活名为 WebDelete 的代理。注意这个代理是作为一个参数传递
到文档的 UNID 的。

  UNID: = @Text(@DocumentUniqueID ) ;

  @URLOpen ( " / +@Rep ; aceSubstring(@ DbName;-1 ); " " ; " +" ) + "
/ WebDelete ? openAqent &"+ UNID )

  定制搜索和结果表单

  可以通过在搜索输入和输出表单中增加设计元素来定制搜索。一个定制的搜索
表单必须以 $ $ Search 命名,或者作为实名,或者作为别名。当用户单击链接
打开搜索表单时,Domino 在当前数据库或在搜索数据库中寻找与这个名称匹配的
表单。如果这个表单存在, Domino 打开它。
            则           如果这个表单不存在, Domino 使
                                  则
用在 Domino 服务器的标签目录中的默认 search . htm 文件。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        71
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
  1 .创建一个新的搜索表单可以通过定制 search . htm 文件来创建一个新的搜
索表单,也可以拷贝和粘贴由 Search Site 数据库提供的搜索表单。 Search Site
                                     在
数据库中有两种 We b 搜索表单:

  l    Web Search Simple。用于简单搜索。它包括与 web search Advanced 表单
       的链接。

  l    " Web Search Advaneed 。这种表单允许用户创建更高级的搜索。

  完成表单设计后开始在 Search Site 数据库中进行工作。为了使用数据库中视
图级搜索表单,必须更改$$ Return 域中的公式。具体操作步骤为:

  l) 将 Web Search SimPle 表单拷贝到要使用的数据库中。

  2) 在设计状态下打开表单。修改$ $ Return 域。原来$ $ Return 域公式的
   开始部分为: DBName :=@Subset(@ DbName; -1);

  "【【/ " + DBName +" ? SearchSite & Query=” + Query + " & Searchorder="
   +@Text ( Sort ) + " & SearchMax="+@Text ( MaxResults ) + " & SearchWV="
   + @lf(ExactMatch=" "; " TRUE";"FALSE") + " & SearchThesaurus="+@If
   ( UseThesaurus="" ;" FALSE";"TRUE ") + " 】】"

   将?Searchsite 改成?SearchView ,并在 DBName 后面增加视图名。新公式
的开始如下:

   DSName : = @Subset(@DbName;-l );

   "[ [/ " + DBName + " / ViewNam e / ? SearchView & Query="十 Query +
" + …

   ViewName 是数据库中的视图名。公式的其他部分不变。既然创建了 URL ,视
图名必须以淦江( l )开始和结束,视图名中的空格必须以加号( + )代替。

   如果需要在数据库中包含高级搜索,则在 Web Search Adanced 表单中也要进
行相同的修改。


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        72
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   2 .创建 TeamRoom 搜索下面将要创建一个使用简单的定制搜索表单。这个表
单允许用户构建一个自由文本的搜索或者使用事先定义好的值来创建查询。这个
表单也使得用户将文档数设置成返回值。基于用)
                     的选择,表单生成搜索视图 URL ,
并返回找到的文档列表。

   为了避免强迫用户学习,创建如下的查询语法:

   (< FreeText >)AND ( FIELD Remotewe_User=Jane woody ) AND ( FIELD Subject
= < Documentsubject > ) & Searchorder = < Value > & Start =< Value > &Count=
< Value > & Searcht wv = < Boolean > & SearchTheSaurus =<boolead >

   可以创建一个使用简单的接口进行复杂查询。

   在这个数据库 TeamRoom 中假定已经创建了一些文档。我们想要用户搜索文档,
在这些文书中,search 表单的 Appointment 域的 subjec 域是可用的,而且搜索文
档包含了 search For FreeText 域的值(如果值是可输入的)。

   l) 以创建一个新的表单开始,并赋予别名$ $ Search。

   2) 创建非隐藏域。

   l Name Name 域设置当前用户名,用于查找角户文档。

         选择 Field 类型为“文本和可计算的”,并在设计窗格中(默认值)输
   入下列公式:

         @Name(【 CN 】;@UseName );

   l FreeText FreeText 是一个用户可以输入搜索字符串的域。

   l Appointment Appointment 域是一个包含下列值的关键词域。

   Customer meeting 、 Internal meeting 、 Team meeting 、 Reminded 、
   Untitled 。

     2)创建隐藏域。


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        73
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     Query 域是可计算的。它用于生成查询。在此域中输入以下公式:

     user:=" FIELD RemO Remote_User= " + Name ;

     app:=" FIELD Subject = " + Appointment;

     user 十@If( FreeText!=" " ; "AND ("+FreeText+" ) " ; " " ) +@If
( Appointment!=" " ; " AND (" + app + " )";" " )

     变量 user 得到" FIELD Remote _ user =" + Name 域,它是当前用户的名
字。变量 app 得到" FIELD subject = "十 Appnintment ,这用于确定搜索查询。
@ lf 函数的其他部分查找用户输入的部分。如两个域的值都是空的.则 Domino
只使用 Name 域来创建搜索查询。

     l   使用可计算的$$ Return 域,来生成搜索 URL ,并将浏览器立刻返回查询
         结果。为了返回 URL , $ $ Return 域必须在括号中指定 URL。

     DBName:=@subset(@DbName;-1 ) ;

     " [ [ / " + DBName + " / openview / ? Searchview & Query = " + Query
+ " ] ] "

     当用户在表单中输入数据时,类似域搜索表单,Domino 通常会认可的。为了
拒绝$ $ Return 域输入的值,并直接返回结果页面,我们关闭双括号中的 URL。

     l   一般当 Web 用户提交表单时,Domino 将会在数据库中创建一个文档。在
         本书中,我们不想创建有查询表单的文档。为了避免这些事情,我们使用
         名为 saveOptions 的特殊 Notes 域。如果 saveOptions 的域值是“0 " ,
         则 Domino 不会保存文档。

     现在用户可以通过构建自由文本的查询和简单点击,在数据库中构建复杂查
询,而不必担心需要纠正语法错误。

注意:这里使用 Open view 视图来显示所有用 Search 查询搜索到的数据库文档。

     4) 从我们的 web 站点增加一个链接,使用 URL 来打开定值的搜索表单。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        74
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
      [ < / < database > / < view > / $ $ Search > ]

     5) 为了增强搜索表单,可以增加一些域,以使表单具有下列搜索 arguments

         l SearchMax 这个域决定了你能返回的最大文档数。

         语法是: searchMax = [ n ]

         l Start 这个域决定了第一次显示的结果列表中的文档。

         语法是: start = [ n ]

         l Count 这个域指定了每一页显示的结果数,直到达到 searchMax 的
              限制。

         语法是:Count= [ n ]

         l SerchFuzzy 这是一个关键词域,用于指定是否只返回与当前词完全
              匹配的文档。语法是: searchFuzzy = TRUE, FALSE] 默认值是 FALSE
                                     [             ,

         l Searchwv 这是一个关键词域,它用于发现与辞典定义的词汇的不同
              之处。

               语法是: searchwv= [TRUE,FALSE ] ,默认值是 TRUE 。

         l Searchorder Sort 域决定了返回的文档的顺序

               语法是: Searchorder = [ 1 , 2 , 3]

               l 表示" sort by relevance " ; 2 表示“sort by date ascending" ;
         3 表示“sort by date descending" ,默认值是 l 。

               6)定制搜索结果表单

               为了定制搜索结果页面,创建一个表单,并赋予它一个表单名,取如
         下之一:

         l $ $ SearchTemplate for < viewname >

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        75
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
      将表单与指定的视图联系起来。表单名包括< viewname > ,它是视图的别
名,或者如果不存在别名,则是视图名。

         l $ $ SearchTemplateDefault

     这个表单作为所有未指定表单的 web 搜索的默认搜索结果表单。

     这两个表单都要求在表单中有$ $ ViewBody 域。域值被 Domino 忽视了,但
是在搜索结果表单中必须有这个域。

注意,下列由 Domino 在默认搜索结果表单中提供的特征不能构建搜索结果页面:

         l 找到的文档数。

         l 重新查询的能力。

         l 允许用户重新设置搜索结果的搜索条


6.2.4 JAVASCRIPT

     JavaScript 在 DOMINO 的 B/S 开发中是一个非常重要的实现方式,主要的作用
体现在如下几点:
     1)和 XML 结合形成 AJAX 体系以完成异步数据处理,比如在选择人员的同时
         想快速获取其相关职务而不是所有的相关信息时。
     2)对表单数字域合法性校验时,经由 HTML 首页内容调用外部文件、或存在
         于表单的 JSHEAD 以及表单内置 HTML 中,如:
          function CheckValue()
          {
              var obj=document.all;
              if(obj.Subject.value==""){
                  alert("标题不能为空!!!");
                       obj.Subject.focus();
                       return false;
              }
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        76
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
              if(obj.sDate.value>obj.eDate.value){
                  alert("结束时间不能小于开始时间!!!");
                       obj.eDate.focus();
                       return false;
              }
              return true;
          }
3) 对表单上的热点操作进行模拟点击时。
    以上是 JavaScript 在 DOMINO 的 B/S 开发中所起的主要作用, 接着我们一起
看下其本质和语言的主要特点及实现方式。
     首先从本质上来说 JavaScript 是一种基于对象(Object)和事件驱动(Event
Driven)并具有安全性能的脚本语言。使用它的目的是与 HTML 超文本标记语言、
Java 脚本语言(Java 小程序)一起实现在一个 Web 页面中链接多个对象,与 Web
客户交互作用。
     从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的 HTML 语言
中实现的。它的出现弥补了 HTML 语言的缺陷,它是 Java 与 HTML 折衷的选择,具
有以下几个基本特点:
1)是一种脚本编写语言
     JavaScript 是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本
语言一样,JavaScript 同样已是一种解释性语言,它提供了一个易的开发过程。
     它的基本结构形式与 C、C++、VB、Delphi 十分类似。但它不像这些语言一样,
需要先编译,而是在程序运行过程中被逐行地解释。它与 HTML 标识结合在一起,
从而方便用户的使用操作。
2)基于对象的语言。
     JavaScript 是一种基于对象的语言,同时以可以看作一种面向对象的。这意
味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象
的方法与脚本的相互作用。
     简单性-JavaScript 的简单性主要体现在:首先它是一种基于 Java 基本语句
和控制流之上的简单而紧凑的设计, 从而对于学习 Java 是一种非常好的过渡。其

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        77
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
次它的变量类型是采用弱类型,并未使用严格的数据类型。
     安全性-JavaScript 是一种安全性语言,它不允许访问本地的硬盘,并不能将
数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现
信息浏览或动态交互。从而有效地防止数据的丢失。
     动态性的-JavaScript 是动态的,它可以直接对用户或客户输入做出响应,无
须经过 Web 服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。
所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称
为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当
事件发生后,可能会引起相应的事件响应。
     跨平台性-JavaScript 是依赖于浏览器本身,与操作环境无关,只要能运行浏
览器的计算机,并支持 JavaScript 的浏览器就可正确执行。从而实现了“编写一
次,走遍天下”的梦想。
     实际上 JavaScript 最杰出之处在于可以用很小的程序做大量的事。无须有高
性能的电脑,软件仅需一个字处理软件及一浏览器,无须 WEB 服务器通道,通过
自己的电脑即可完成所有的事情。
     综合所述 JavaScript 是一种新的描述语言,它可以被集成到 HTML 的文件之
中。 JavaScript 语言可以做到回应使用者的需求事件 (如: form 的输入) ,而
不用任何的网路来回传输资料,所以当一位使用者输入一项资料时,它不用经过
传给伺服端 (server)处理,再传回来的过程,而直接可以被客户端 (client) 的
应用程式所处理。
     JavaScript 和 Java 很类似,但到底并不一样! Java 是一种比 JavaScript
更复杂许多的程式语言, JavaScript 则是相当容易了解的语言。
           而                       JavaScript 创
     作者可以不那麽注重程式技巧,所以许多 Java 的特性在 Java Script 中并
不支援。 因此接着我们看看 JavaScript 和 Java 的区别:
     虽然 JavaScript 与 Java 有紧密的联系,但却是两个公司开发的不同的两个
产品。Java 是 SUN 公司推出的新一代面向对象的程序设计语言,特别适合于
Internet 应用程序开发;而 JavaScript 是 Netscape 公司的产品,其目的是为了
扩展 Netscape Navigator 功能,而开发的一种可以嵌入 Web 页面中的基于对象和
事件驱动的解释性语言, 它的前身是 Live Script;而 Java 的前身是 Oak 语言。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        78
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
下面对两种语言间的异同作如下比较:
1)基于对象和面向对象
     Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。
     JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用
的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)
的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。


2)解释和编译
     两种语言在其浏览器中所执行的方式不一样。Java 的源代码在传递到客户端
执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,
它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。
     JavaScript 是一种解释性编程语言,其源代码在发往客户端执行之前不需经
过编译,而是将文本格式的字符代码发送给客户编由浏览器解释执行。
3)强变量和弱变量
     两种语言所采取的变量是不一样的。
     Java 采用强类型变量检查,即所有变量在编译之前必须作声明。如:
     Integer x;
     String y;
     x=1234;
     x=4321;
     其中 X=1234 说明是一个整数,Y=4321 说明是一个字符串。
     JavaScript 中变量声明,采用其弱类型。即变量在使用前不需作声明,而是
解释器在运行时检查其数据类型,如:
          x=1234;
          y="4321";
          前者说明 x 为其数值型变量,而后者说明 y 为字符型变量。
4)代码格式不一样
     Java 是一种与 HTML 无关的格式,必须通过像 HTML 中引用外媒体那么进行装
载,其代码以字节代码的形式保存在独立的文档中。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        79
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     JavaScript 的代码是一种文本字符格式,可以直接嵌入 HTML 文档中,并且可
动态装载。编写 HTML 文档就像编辑文本文件一样方便。
5)嵌入方式不一样
     在 HTML 文 档 中 , 两 种 编 程 语 言 的 标 识 不 同 , JavaScript 使 用
<Script>...</Script>来标识,而 Java 使用<applet>...</applet>来标识。
     静态联编和动态联编
     Java 采用静态联编, Java 的对象引用必须在编译时的进行,
                 即                    以使编译器能
够实现强类型检查。JavaScript 采用动态联编, JavaScript 的对象引用在运行
                           即
时进行检查,如不经编译则就无法实现对象引用的检查。
最后我们再一起回顾下 JS 和 DOMINO 应用开发结合的总结:
     JavaScript 在浏览器中执行,Notes 客户机提供了简单有效的方法为用户界
面编程。可以将 JavaScript 代码放入特殊的 JavaScript 事件中,对于仅 Web 适
用的应用程序也可以放入 HTML 中。Domino Designer 对象与标准JavaScript 对
象模型有关。

JavaScript 事件

     以下 Domino 对象有 JavaScript 事件处理程序:表单、子表单、页面、域、
                               (4)
操作、按钮和操作热点。在 编程窗格中,可将代码附加到这些事件处理程序中。
当事件在支持事件的浏览器中和 Notes 客户机(受到限制)中发生时,此代码才
执行。

JavaScript 事件表

下表列出了 Domino Designer 中的 JavaScript 事件处理程序。“只适用于浏览
器”表示事件处理程序只能用于支持它的浏览器。“浏览器和 Notes 客户机”表
示事件处理程序用于支持它的浏览器和 Notes 客户机。

事件              表单、子表单、页面                 域                操作、按钮、热点

JSHeader        浏览器和 Notes 客户机 对于表单、  子表单或页面
                               使用 JSHeader

onBlur          NA                        浏览器和 Notes 客户机 只适用于浏览器




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        80
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
事件              表单、子表单、页面                 域                操作、按钮、热点

onChange        NA                        只适用于浏览器          NA

onClick         只适用于浏览器                   只适用于浏览器          浏览器和 Notes 客户机

onDblClick      只适用于浏览器                   只适用于浏览器          只适用于浏览器

onFocus         NA                        浏览器和 Notes 客户机 只适用于浏览器

onHelp          只适用于浏览器                   NA               只适用于浏览器

onKeyDown       只适用于浏览器                   只适用于浏览器          只适用于浏览器

onKeyPress      只适用于浏览器                   只适用于浏览器          只适用于浏览器

onKeyUp         只适用于浏览器                   只适用于浏览器          只适用于浏览器

onLoad          浏览器和 Notes 客户机 NA                          NA

onMouseDown     只适用于浏览器                   只适用于浏览器          只适用于浏览器

onMouseMove     只适用于浏览器                   只适用于浏览器          只适用于浏览器

onMouseOut      只适用于浏览器                   只适用于浏览器          只适用于浏览器

onMouseOver     只适用于浏览器                   只适用于浏览器          只适用于浏览器

onMouseUp       只适用于浏览器                   只适用于浏览器          只适用于浏览器

onReset         只适用于浏览器,只适用 NA                             NA
                于表单

onSelect        NA                        只适用于浏览器          NA

onSubmit        浏览器和 Notes 客户机 NA                          NA

onUnload        浏览器和 Notes 客户机 NA                          NA

用于浏览器和 Notes 客户机的事件

必须用于浏览器和 Notes 客户机的代码限于以下事件:

 •   对于文档预处理和后处理,使用 onLoad、onUnload 和 onSubmit。

 •   对于进入和退出域的处理,使用 onFocus 和 onBlur。

 •   对于操作、按钮或操作热点,使用 onClick。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                         81
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
JSHeader 事件

     JSHeader 是一个特殊的事件处理程序,可装载对象中所有事件都可访问的诸
如函数和全局变量声明的代码。该代码位于 Domino 生成的 HTML 中的 <HEAD> 标
记下。

onSubmit 事件

     执行 FileSave @command 时,在浏览器和 Notes 客户机中发生 onSubmit 事
件。要在浏览器中模拟提交文档,可先执行 FileSave 再执行 FileClose
@command。在浏览器中,仅执行 FileClose 不能触发 onSubmit。在 Notes 客户
机中,仅执行 FileClose 能够触发 onSubmit,并使系统询问“希望保存这个新
文档吗?”。从 onSubmit 事件返回错误以终止保存操作。

在 Notes 客户机中启用 JavaScript

     要在 Notes 客户机中运行 JavaScript,用户必须在“文件”“惯用选项”
“用户惯用选项”中“其他选项”下面选中“启用 JavaScript”。要扩展或限制
安全性,用户必须选择“安全性选项”,然后选择“JavaScript 安全性”。

HTML 中的 JavaScript

通过使用如下所示的标准 SCRIPT LANGUAGE 标记,可在可以放置 HTML 的任何地
方使用 JavaScript。此代码只在支持 JavaScript 的浏览器中执行。

     <SCRIPT LANGUAGE="JavaScript">

          code goes here

     </SCRIPT>

如果引用域,JavaScript 代码必须在表单的域之后。

可以在表单、子表单或页面上的 HTML 文本中嵌入计算域和计算文本。

在 Notes 客户机中,HTML 文本显示为纯文本。可以使用以下“公式为真时隐藏
段落”的公式隐藏它:

     @ClientType = "Notes"


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        82
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
可以使用“javaScript”协议将 JavaScript 置于 URL 中,例如:

     <A HREF="javaScript:code goes here">prompt</A>

通过使用打印语句将 JavaScript 作为 HTML 发送到浏览器中,可以从代理运行
JavaScript。例如,在 LotusScript 中:

     Print "<SCRIPT LANGUAGE=JavaScript>"

     Print "code goes here"

     Print "</SCRIPT>"

要从 JavaScript 运行代理,可以将位置对象的 href 属性设置为 URL 以用于打
开代理。URL 可以是相对于当前主机的 URL。例如:

     location.href = "/dbname.nsf/agentname?OpenAgent&arg1=val

JavaScript 对象模型

Domino 支持标准 JavaScript 对象模型。关于 JavaScript 对象模型的详细信息,
请参阅 http://developer.netscape.com/tech/javaScript、
http://developer.netscape.com/docs/manuals/js/client/jsguide 和
http://msdn.microsoft.com/scripting。

对象模型的浏览器执行方式取决于浏览器。Notes 客户机可执行对象模型,但有
些例外。关于 Notes 执行方式的信息,请参阅 notes.net/notesua.nsf 中的
《Notes R5.0 Client DOM》。

导航器

     浏览器对象应用于当前打开的表单、页面、视图或帧结构集。无论基本 Domino
Designer 对象是什么,appName、appCodeName、appVersion、platform 和
userAgent 属性都可用来调用浏览器或客户机并返回相同的信息。

窗口

     窗口对象适用于当前打开的表单、页面、视图,对于帧结构集,适用于焦点
所在的帧结构。假设设计两个页面(分别命名为“Page One”和“Page Two”)
以及一个具有两个帧结构(分别命名为“High” “Low” 的帧结构集, “High”
                       和     )      其中
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        83
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
打开“Page One”,“Low”打开“Page Two”。如果单独打开“Page One”,则
window.status 是指“Page One”的状态属性。如果打开了帧结构集,则当焦点
位于“High”上时,window.status 是指“Page One”,而当焦点位于“Low”上
时,window.status 是指“Page Two”。

帧结构

     可以使用名称并通过帧结构数组访问 Domino 帧结构。在“帧结构属性”框
中指定名称。使用“top”属性访问表示帧结构集的窗口。例如,如果帧结构集有
两个名为“High” “Low”
          和     的帧结构,可以将第一个帧结构作为 window.top.High
或 window.top.frames[0] 引用,而第二个作为 window.top.Low 或
window.top.frames[1] 引用。

     名称属性开头包含 Domino 帧结构名称,如果窗口不表示 Domino 帧结构,
则为空。嵌套的帧结构表示嵌套的 Domino 帧结构集。例如,如果“Low”帧结构
包含另一个帧结构集,而该帧结构集有两个名为“Left”和“Right”的帧结构,
则可以将“Left”引用为 window.top.Low.Left、window.top.frames[1].frames[0]
或名称和帧结构元素的某种组合方式。

     使用“parent”属性访问帧结构的父窗口。如果焦点位于上例中的“Right”
帧结构,则 window.parent 是指 window.top.Low,而 window.parent.Left 是
指相邻的 window.top.Low.Left。

历史记录和位置

     这些对象适用于父窗口适用的所有项目。

文档对象

     文档对象表示当前打开的 Domino 表单、页面或视图的内容。文档对象包含以
下内容:

 •   小程序数组包括 Domino 操作条、视图和 RTF 文本小程序以及引入的小程序。
     小程序由 HTML 中的 <APPLET> 标记表示。请参阅《Application Development
                                       (8)
     with Domino Designer》 “ 添加小程序” 如果在
                          中的       。   “小程序属性” HTML
                                              的
     标记下指定了一个名称,则可以使用名称引用小程序,例如:
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        84
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     document.AppletName。

 •   链接数组包括 Domino 操作、链接热点和操作热点,在 HTML 中由 <A> 标记
     表示。如果在“热点属性”框的 HTML 标记下指定了一个名称,则可以使用
     名称引用操作热点,例如:document.HotspotName。

     Domino 链接热点不包含事件处理程序。然而,可以在“热点属性”框的 <HTML>
     标记下的“其他”中指定一个处理程序。

 •   图像数组包括 Domino 附件、图像资源和图片,在 HTML 中由 <IMG> 标记表
     示。如果在“图片属性”框的 HTML 标记下指定了一个名称,则可以使用名
     称引用图片,例如:document.PictureName。

     可通过以下方式引用 Domino 图像资源:使用指定数据库名称或复本标识符
     的 URL,后面跟着图像资源的名称,例如:/Web+Test.nsf/newdam.gif。

 •   表单数组一般有一个元素,document.forms[0] named _DominoForm,在 HTML
     中由 <FORM> 标记表示。它有指定元素的数组,包含任何类型的对象,如
     Button、Text、Textarea、Password、Select、Radio、Checkbox、Hidden 和
     FileUpload。

 •   Button 对象表示 Domino 按钮,在 HTML 中由 <INPUT TYPE=button> 标记
     表示。如果在“按钮属性”框的 HTML 标记下指定了一个名称,则可以使用
     名称引用按钮,例如:document.forms[0].ButtonName。

 •   Text 对象表示类型为文本、日期/时间、数字、名称、作者和读者的 Domino
     域,它们在 HTML 中由 <INPUT> 标记表示。可以使用 Text 对象的 Domino 域
     名称引用它们,例如:document.forms[0].FieldName。

 •   TextArea 对象表示 RTF 文本类型的 Domino 域。它在 HTML 中由 <TEXTAREA>
     标记表示。可以使用 TextArea 对象的 Domino 域名称引用它们,例如:
     document.forms[0].FieldName。

 •   Password 对象表示口令类型的 Domino 域,在 HTML 中由 <INPUT
     TYPE=password> 标记表示。可以使用 Password 对象的 Domino 域名称引用
     它们,例如:document.forms[0].FieldName。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        85
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
 •   Select 对象表示对话框列表、列表框和组合框类型的 Domino 域, HTML 中
                                          在
     由 <SELECT> 标记表示。可以使用 Select 对象的 Domino 域名称引用它们,
     例如:document.forms[0].FieldName。

 •   Radio 对象表示单选按钮类型的 Domino 域,在 HTML 中由 <INPUT
     TYPE=radio> 标记表示。可以使用 Radio 对象的 Domino 域名称引用它们,
     例如:document.forms[0].FieldName。

 •   Checkbox 对象表示复选框类型的 Domino 域,在 HTML 中由 <INPUT
     TYPE=checkbox> 标记表示。可以使用 Checkbox 对象的 Domino 域名称引用
     它们,例如:document.forms[0].FieldName。

 •   Hidden 对象表示选择了“当文档为下列情况时隐藏段落”的 Domino 域。无
     论是何种类型的域,如果在“表单属性”框中选择了“产生所有域的 HTML”
     选项,隐藏域在 HTML 中都由 <INPUT TYPE=hidden> 标记表示。否则,隐藏
     域对于浏览器中的 JavaScript 是不可访问的;在 Notes 客户机中
     JavaScript 永远都不能访问隐藏域。可以使用 Hidden 对象的 Domino 域名
     称引用它们,例如:document.forms[0].FieldName。

 •   FileUpload 对象没有直接的表示方式表示为 Domino 域类型。通过创建一个
     域(如文本类型)并在 HTML 标记下的“其他”中指定“INPUT TYPE=file”,
     可以生成这种对象。在 Notes 客户机中不能访问 FileUpload 对象。

在“编辑”模式下,Domino 域对于浏览器和 Notes 客户机中的 JavaScript 是
可访问的,但对于隐藏域有一些限制(如上所示)。在“阅读”模式下,Domino 域
对于浏览器中的 JavaScript 是不可访问的,除非在“表单属性”框中选择了“产
生所有域的 HTML”。在“阅读”模式下,Domino 域对于 Notes 客户机中的
JavaScript 是永不可访问的。

Domino 对象

可使用 JavaScript 访问通过 Java 和 CORBA 可获得的 Domino 对象。

执行以下步骤:
                                                           (11)
  1. 在将包含 JavaScript 代码的表单或页面上,创建扩展                           AppletBase 的小
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        86
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     程序。关于编码这种小程序的信息, 小程序可以执行所有操作。它的作用就
     是通往 Domino 对象的网关。

  2. 在“Java 小程序属性”框中,选中“小程序使用 Notes CORBA 类”。

  3. 对于 Notes 客户机上的部署, “用户惯用选项”
                      可在       框中选中“从 JavaScript
     启用 Java 进行存取”。还可选择“安全性选项”按钮,然后选择“Java 小
     程序安全性”单选按钮,并确保对于相应的用户选择了“访问 Notes Java 类”。

  4. 要通过 CORBA 访问类,确保“Domino 目录”中的“服务器”记录在“安全
     性”附签下的“IIOP 限制”区段中正确记录了允许“运行受限制的
     Java/JavaScript”和“运行无限制的 Java/JavaScript”的用户。

  5. 在 JavaScript 代码中,引用小程序以访问 Domino 对象的类和方法。首先
     需要调用 AppletBase.openSession( ) 或
     AppletBase.openSession("username", "password") 以获取 Session 对象。
     例如,如果扩展 AppletBase 的小程序是表单或页面上的第一个小程序,且
     不需要用户名和口令,则以下代码起作用:

     session = document.applets[0].openSession()

然后可以使用返回的 Session 对象以获取其他 Domino 对象。

在 Notes 客户机中,可以调用 AppletBase.getContext(Session) 以获取
NotesAppletContext 对象。该对象包含以下方法:getServer( ) 返回包含工作
站的小程序或空字符串的服务器名称;getDatabase( ) 返回包含小程序的数据库
的文件路径和名称;getDocument( ) 返回包含小程序或空值(如果文档还未保存)
的文档的通用标识符。


6.2.5 HTML&CSS

     HTML&CSS 在 DOMINO 的 B/S 开发中是一个非常重要的实现方式,他们的互相配
合才保证了我们的 B/S 应用界面的丰富多彩。在开发之中 HTML 往往写在内置 HTML
部分。而 CSS 则可由 HTML 首页内容调用外部文件、或存在于表单对象的 HTML 属
性以及内置的 CSS 对象中。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        87
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
接着我们还是先看下 CSS 的本质分析:
     CSS(Cascading Style Sheets) 中文翻译为 层叠样式表单,简称样式单。
1998 年 5 月 12 日,Cascading Style Sheets,level 2 成为了 W3C 的新标准。同
时,”W3C CoreStyles "和 CSS2 Validation Service" 以及“CSS Test Suite" 宣
布成立。它是一组样式,样式中的属性在 HTML 元素中依次出现,并显示在浏览器
中。样式可以定义在 HTML 文档的标志(TAG)里,也可以在外部附加文档作为外
加文档。此时,一个样式表单可以作用于多个页面---甚至整个站点,因此具有更
好的易用性和扩展性。我个人认为 CSS 好比是 HTML 语言的 PLUSIN(插件)
                                          ,插件
的功能大家应该知道,就是壮大原有的功能。你可以精确的控制主页里的每一个
元素,比如一个字,用 CSS 你可以给它控制它的前景色、背景色、背景图片、在
页面的精确位置,四周加入边框等。
     具体效果我们看下如下的示例:
     如果是在表单或页面插入一个图片,我们一般会用<img src="flower1.jpg"
>,得到如下效果:




     而采用 CSS 做模糊化修饰之后,描述代码变为<img src="flower1.jpg" style
="filter:blur(strength=50)">




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        88
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     模糊效果处理后的图片,哪个更漂亮,你觉得呢!而以前如果要实现类似效
果,肯定需要借助于 Photoshop 之类的图象软件。


6.2.6 Java


6.2.6.1 什么是JAVA
     JAVA 是由 Sun Microsystems 公司出品和维护的程序语言,它面向对象、可
移植、多线程、支持网络。
     Java 是事实上的标准化语言。虽然 Sun 公司最终控制了 Java ,但其很强的
适应性,使它对许多创意和目的来说都成为一种标准。从而 Sun 公司允许集团开
发者通过 java 集团化的开发过程来更好地控制 Java 的演化。
     java 程序由称为“Javavirtual Machine (或 JavavM ,即 Java 虚拟机)”
的程序来运行,而不是由操作系统(Windows95 / 98 / NT UNIX 等)来运行。在
效果上看,为 javavm 是一个操作系统中的操作系统,其中 Java 程序可以执行。
不考虑 Java 程序开发所需要的平台,Java 程序是被编写成在 JavavM 中所使用
的一般的 API , 只要 Java 能用于任何一个特定的操作系统,那么 Java 程序(理
论上)应该不用修改就能运行。
     这个技术是 Java 口号“一旦编写成,就可在任何地方运行”的基础,最著名
的 JavaVM 的例子是在浏览器(如 IE XN )中编写的 Java 程序。
     Java 程序通常在浏览器中按小程序(小应用程序)运行。作为一个小程序,
Java 程序与 W eb 页结合,并且它会自动地随着所在的 W eb 页下载到计算机上。
Java 程序也可作为单独的应用程序运行,就像在 web 应用程序中执行服务器端过
程的“Servlets””一样〔 与 Domino 代理相似)。
     Java 程序(特别是小程序)一般不允许向它们运行所在系统的硬盘进行读和
写。从 web 应用程序的前景来说,存在于一个 Domino 环境中 Java 的最明显特性
是其作为一个 defacto 标准的开放性,以及它在客户端(浏览器)和服务器端执
行的能力。与之相比,只被 Lotus 产品和 Web 支持的 LotusScript 就只能处理服
务器端的任务而不能处理浏览器中的任务。Java 是一种特别有前景的技术,并且
事实上得到几乎所有的大公司支持。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        89
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     Java 小程序与 HTML 相比提供了更活跃的、交互式的用户界面,这是因为小程
序是一个可在浏览窗口中执行的实际程序,并且可以对键盘和鼠标操作作出响应。
作为对 JAVA 小程序段能力的检验,Domino 的设计器可以允许用户为特定的对象—
视图、大纲、操作栏和多信息文本域设置属性,Java 小程序的这个属性使得它们
比 HTML 更优秀。


6.2.6.2           是否应该立即在Domino中应用Java呢?
1) 在单位的其他领域也使用 Java 吗?这是不是向前发展时的战略性技术呢?;
2)是在集团内部拥有 Java 专家,还是将外出寻找专家呢?
3)是否在 LotusScript 编程方面进行了投资(如编程者或代码行本身)?用户
     考虑过重新设置和转变代码(如果有必要的费用)?
4    )Domino Designer IDE 没有包含一个 Java 资源调试程序,即可以一步步操做
      JAVA 程序,从而能寻找出错误的程序。虽然 Domino Designer IDE 确实给了
     用户编写 Java 类的能力,并且提供语法检查,然而,实际上,用户必须使用
     第三部份的 IDE(Borland Builder Symanteccaf 6 )编写和修改 Java 中心,
     然后将代码输入到设计器中。
5)Notes 客户的 UI 类只能通过 LotusScript 或 Java 小程序编写。
     6) LotusScript 不同,
       与               Java 可远程利用 CORBA 从一个浏览器中操作 Domino
     服务器的对象。


6.2.6.3 DOMINO对象模型对JAVA的支持
     Domino 对象模型包括数据库、视图和文档,通过 Java 语言中的一个特殊的类
或包提供给了 Java 编程。
     为了说明 Java 和 Domino 的交互,我们将集中讨论使用 Java 来进行 Domino
编程。这是一个进入该主题的很好的切入点,特别是已经有一点用 LotusScript
编写代理的经验。首先用下面的步骤在数据库中创建一个新的代理。
(1)使用 Domino Designer,在设计域中选择数据库,并单击“代理”设计组件;
(2)单击出现在工作域左边的代理按钮。
    (3)在编程域中选择 Java 的“运行”选项。Designer 会自动通过在域的脚本区域
     中插入一些基本的 JAVA 代码,给用户提供入手点,当选择 Java 作为代理“运
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        90
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     行”选项时,Designer 会立即在编程域中放入一些基本的“启动“代码。
     Domino 类库被作为一个 Java 包对待,这个包可以通过下列语句输入到程序
     中;“IMPORTLOTUS。DOMINO.*;




     从这一点看,实际上可以编写 Java 代码来实现所需要的功能。为了提供帮助
,编程域包括了列出所有的 Java 类和接口程序,以及对用户有用的方法和属性指
示栏,它们将被分成“核心 Java ",“Notes Java”和“Third-Party Java”
                                                  ,可
以在“参考”标签下的下拉菜单中选择 Java 类型。下图显示了 JAVA 类和接口程
序出现在列表中的例子。




     通过将鼠标放在正确的插入点并双击参考标签下面的项,就可以在编程域的
脚本区插入对象、方法和属性。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        91
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     由于在 Java 程序中所有的东西都必须在类中,并且一个程序由几个类组成,
 IDE 允许用户通过单击窗口底部的新类的按钮来简单地创建一些新的类。根据定
义的新类,它们会自动地被加到一个能组织和管理 Java 代码的项目上。
下面是一个简单的在当前创建的数据库中打印一个日期的 Java 代理
     Import lotus.domino.*;
     Public class javatest extends agentbase{
     Public void notesmain0{
     Try{
     Session s= getsession0;
     AgentContext ac = s . getAgentContextO ;
     Database db = ac . qetCurrentDatabaseo ;
     DataTime dt = db . get Createdo ;
     String It 一 dt . getLocalTime ( ) ;
     system . Out . printin ( " Database  " ”十 db . getTitleO
     + ' ,  ; " was created on " +it+”.”);
         } catch ( Exceptione ) {
     e . printStdckTrace ( ) ;
     }
     }
     }
     虽然这个代码例子实际上能够工作,但我们的目的是想告诉用户,内核
Domino 对象 session 和 Database 是如何被实例化的。一旦能够掌握这些对象,
许多其他 Domino 对象就很容易掌握,记住所有的包含规则(在 Domino 对象的
层次结构中)都是强制的。一进入 IDE “中的 Java 程序,就可以通过按窗口左
下角的编辑按纽对其进行编辑,所有编辑时的错误(例如语法错误)都将被提示。
     如果用户想测试这个代理,可以用 Domino 设计和 Notes 代理中的 Java 调
                                          “
试控制台来完成,为了调用“ Java 调试控制台”,可按以下步骤进行操作:
 ( l )选择“文件”一“工具” ? “显示 Java 控制台”
                                ,一个新的标题为“ Java
         控制的窗口将出现。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        92
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
 ( 2 )返回 DominoDesigner 或 Notes 中。
 ( 3 )从操作菜单中选择 Java 代理,如上面的例子,将选择“操作“-”JAVA
     “测试
 ( 4 )返回到 Java 控制台窗口来查看代理的输出。


6.2.7 JavaServerLet

      Servlet 是 Domino Web 服务器在对浏览器请求作出响应时运行的 Java 程
序。它为向 Web 应用程序添加强大功能提供了一种简便易行的方法。在某些方面,
服务器小程序类似 CGI(公用网关接口)程序,但是 servlet 与服务器集成得更
为紧密并且可利用特殊的 Java 类。例如:在对 Web 浏览器请求作出响应时,
servlet 可以连接到关系数据库或企业系统来获取数据。
     Domino 对用于 Web 应用程序的 Java servlet 和 Java 小程序均提供支持。
这两种类型的 Java 程序最重要的区别是二者运行方式的不同。Servlet 是“服
务器端”程序;装入并运行服务器小程序的 Java 类完全在 Domino 服务器内进
行,servlet 运行的结果(通常是 HTML 页面)返回给浏览器。
     相比之下,小程序是“客户端”程序;小程序的 Java 类下载到浏览器并且
由浏览器来运行。因此,小程序要求浏览器支持 Java,而 servlet 则没有此要
求 。 用 于 Domino 的 servlet 必 须 符 合 Java Servlet API 规 范 ( 由 Sun
Microsystems, Inc. 发布的开放标准)
                          。
     在 Domino 中运行 servlet 涉及到编写 servlet、启用 Domino 对 servlet
的支持以及必要情况下设置 servlet 属性等方面的内容。
     接着我们再一起看看 servlet 和代理以及 CGI 程序的比较,
                                      首先代理、servlet
和 CGI 程序都允许对 Domino Web 应用程序的功能进行扩展。代理可以通过表单
WebQueryOpen 和 WebQuerySave 事件与 Web 应用程序紧密集成。Servlet 通过
Servlet API 类可以获得一些特殊功能,如会话和 Cookie 管理。由于 Java 日
益受到人们的青睐,现今使用 servlet 而不是 CGI 程序来开发新产品已成为大
势所趋。但是,许多现有的 CGI 程序仍在使用。
     如果正在编写自己的应用程序并需要为服务器上的某些功能编程,则需对使
用哪种类型的程序的选项作出选择。每种类型的程序均有各自的优点而且可能成
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        93
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
为特定情形下的最佳选择。以下是对每种程序类型的使用建议:
     程序类型             最佳用途
     代理               读取或邮寄文档时执行 Domino 操作的程序。 需要按预定时
                      间或当数据库操作发生(如新邮件到来)时运行的程序。
     Servlet          使用标准 Java 接口(如 JDBC)的程序。 使用 HTTP 会话维
                      护或 Cookie 的程序。复杂或资源密集型 Java 程序。
     CGI 程序           需要对系统资源进行低级别访问的程序。 通过非 Java API 与
                      其他产品连接的程序。
     以下对这些程序的属性所作的比较对程序的选用很有帮助。接着我们再看下
这些程序可使用哪种语言进行编写?
1)代理:
     Java、LotusScript 或 Notes 公式语言。这些语言本身均可跨平台使用。
2)Servlet:
     Java。本身可以跨平台使用。
3) CGI 程序:
     平台脚本语言,即任何能够编译为可执行文件的语言或跨平台的语言(如
     Java 或 Perl)。
程序存储在什么位置?
     1)代理:存储在 Domino 数据库中,这意味着代理可以利用数据库复制和群
集服务器的功能。
     2)Servlet:存储在文件系统中,通常是 dominoservlet 目录。
     3)CGI 程序:存储在文件系统中,通常是 dominocgi-bin 目录。
程序以什么方式被 Web 用户调用?
1)代理:
     由 WebQueryOpen 或 WebQuerySave 事件自动调用,或者由 OpenAgent URL
(如“http://acme.com/sales.nsf/results?OpenAgent”)直接调用。代理还可
由服务器事件(如新邮件的到来)或预先的定时安排来触发。


2)Servlet:

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        94
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     直接由 URL 调用。Domino 可识别两种类型的 servlet 的 URL。第一种类型
通过名称指定 servlet(例如:“http://acme.com/servlet/SQLDatabaseQue
ry?month=june”。第二种类型指定一个 Domino 管理员已经映射到 servlet 的
             )
文件扩展名(例如:“http://acme.com/sqlquery.esp?month=june”。
                                                  )
3)CGI 程序:直接由 URL 调用(例如:
                      “http://acme.com/cgi-bin/filesearch?
string=widget”。
             )
服务器何时将程序载入或卸载?
     1)代理:每次调用时装入,执行完毕后卸载。
     2)Servlet:一次性装入;HTTP 任务关闭或重新启动时卸载。与代理或 CGI 程
序相比,这一性能使 servlet 具有很大的优越性。但是,这也意味着可以通过多
个请求同时访问 servlet 类,因此必须保证 servlet 代码的线程安全性。
     3)CGI 程序:每次调用时装入,执行完毕后卸载。
程序与 Domino 的交互方式
     1)代理:LotusScript 和 Java 代理可使用 Domino 对象类。公式代理可使
用大多数 @function。
     2)Servlet:可通过 CORBA (Common Object Request Broker Architecture)
接口访问 Domino。
     3)CGI 程序:可通过 CORBA 接口或通过 Domino C 或 C++ API 访问 Domino。
程序可获得哪些安全性保障?
     1)代理:要调用代理,Web 用户必须对包含该代理的数据库具有“存放者”
或更高存取级别。代理可以以其创建者或用户的身份运行。Domino 的所有安全特
性均适用于由代理执行的操作。
     2)Servlet:对服务器小程序的访问可由“Domino 目录”中的文件保护文档
来控制。如果小程序通过 CORBA 接口访问 Domino,则可以指定一个 Domino 用
户名和 Internet 口令。Domino 的安全性适用于所有 CORBA 操作。
     3)CGI 程序:对该程序的访问可由“Domino 目录”中的文件保护文档来控制。
如果程序通过 C API 来访问 Domino,则会使用服务器标识符。如果程序使用
CORBA 接口,则可以指定用户名和 Internet 口令。两种情况下,均可应用 Domino
的安全性。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        95
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

2.编写 servlet 的前提
     要编写 servlet,需要一个 Java 编译器和 servlet 的 API。二者均可从 Sun
Microsystem 的网站 http://java.sun.com 上获得。可下载 Java Development
Kit (JDK)(其中包含编译器和其他基本工具)和 Java Servlet Development Kit
(JSDK)(其中包含 servlet API 的规范、servlet 的 .JAR 文件 (jsdk.jar) 和
样例服务器小程序)。Sun 站点还提供到 Web 上其他 servlet 资源的链接。
     还可以使用各种流行的 Java 开发环境来编写 servlet。为了提供方便,
Domino 服务器和 Designer 安装程序中包含 jsdk.jar 文件的拷贝。这与 Sun 的
JSDK 提供的文件是完全一样的。
     Sun 定期更新 JDK 和 JSDK。Domino 5.0 支持 JDK 1.1.6 和 JSDK 2.0。Domino
的季度维护版 (QMR) 经常会结合 Sun 的升级内容,因此应该检查 QMR 的版本注
释以检验被支持的 JDK 和 JSDK 版本。

3.启用 Domino 支持的 servlet
     Servlet 是由 Domino Java Servlet Manager(HTTP 服务器任务的一部分)
来装入和调用的。Java 支持 servlet 的运行时间是由 Domino Java Virtual
Machine (JVM) 提供的。HTTP 任务启动时,可以自动启动服务器小程序管理者并
装入 JVM。HTTP 任务将把这些操作的状态信息写入服务器控制台和日志文件中。
     Servlet 管理者是由“Domino 目录”的“服务器”文档中的设置来控制的。
此设置位于“服务器”文档的“Internet 协议”
                         “Domino Web 引擎”附签上。设
置内容如下:
    设置                         选项

    Java servlet 支持            无:(缺省)HTTP 任务不装入服务器小程序管理者或 JVM。
                               Domino servlet 管理器:HTTP 任务同时装入 JVM 和 servlet
                           管理器。
                               第三方 Servlet 支持:HTTP 任务装入 JVM,但不装入 Domino
                           servlet 管理器。这允许使用第三方 servlet 管理器,如 IBM 公
                           司的 WebSphere Application Server。

    Servlet URL 路径             URL 中的路径,通知 Domino 此 URL 指向一个 servlet。缺


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                           96
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                           省路径为 /servlet。

    类路径                        一个或多个路径的列表,servlet 管理器类加载程序将搜索
                           此列表来查找 servlet 及其相关类。此设置允许添加其他路径。
                           可以指定目录、JAR 文件和 ZIP 文件。路径可以是绝对路径也可
                           以是 Domino 数据目录的相对路径。缺省为 dominoservlet。
                               样例:
                               相对目录路径: dominoservlet
                               绝对目录路径: c:appsMyServlets
                               JAR 文件:c:javamailmail.jar
                               ZIP 文件:dominoservletsql.zip

    Servlet 文件扩充               URL 文 件 扩 展 的 列 表 , 示 意 Domino 某 个 URL 引 用 了
                           servlet。列表中的每个扩充必须通过 servlets.properties 文
                           件中的指令映射到单一的 servlet。缺省为无扩充。

     以 下 设 置 控制 Java Servlet API HttpSession 接 口 的 Domino Servlet
Manager 的运行时间支持。不使用此接口的服务器小程序不受这些设置的影响。
     其中 HttpSession 接口支持与 Domino 中的“HTTP 会话验证”功能是完全独
立的。
    设置                         选项

    会话状态跟踪                     启用:
                                 (缺省)servlet 管理器定期检查所有 HttpSession 实
                          例的用户活动。给定时间段内空闲的会话将被自动终止。servlet
                          管 理器 调用实 例的 HttpSession.invalidate() 成 员 函数 通知
                          servlet 该会话已被终止。
                               禁用:不检查会话的活动状态。

    空闲超时时间                等待用户不执行操作的分钟数,此后将终止会话。缺省为 30 分钟。

    最大活动会话                     允许同时进行的活动的会话数。缺省为 1,000 个会话。达到
                          此限制时,空闲时间最长的会话将被终止。

    会话持续                       启用:退出 HTTP 任务时,servlet 管理器将把会话数据保存
                          到 Domino 数据目录中一个名为 sessdata.ser 的磁盘文件中。会
                          话数据将在 HTTP 任务再次启动时重新载入。Servlet 已经固定在


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                            97
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                          会话中的对象如果执行                java.io.Serializable 接口,则该对象
                          也将被保存。
                               禁用:
                                 (缺省)退出 HTTP 任务时放弃所有会话数据。

     用 JVM 加载程序装入 servlet 类
     servlet 管理器类加载程序不会装入使用自身代码、创建定制类加载程序或
执行其他某些受限制的操作的类。如果 servlet 所要求的类不能通过 servlet 管
理器装入,可以试用 Domino JVM 类加载程序进行装入。
     JVM 加载程序通常用于从与 Domino 一起安装的 Java 归档系统(特别是
java.* 和 lotus.* 软件包)中装入类。通过将 servlet 从 Servlet 管理者类
路径移到 JVM 类路径,可以强制使用 JVM 加载程序而不使用 servlet 管理器加
载程序来装入服务器小程序。
     JVM 类路径由 NOTES.INI 变量 JavaUserClasses 指定。
设置 servlet 的属性
     单个      servlet 的 特 殊 属 性 可 以 在 位 于                   Domino 数 据 目 录 中 名 为
servlets.properties 的文本文件中指定。可以指定以下属性:
     (1)别名
     (2)初始化参数
     (3)URL 映射扩展
     (4)servlet 管理器启动时装载
     这些属性是由 servlets.properties 文件中的指令来指定的。指令的通用语
法是:
     servlet(s).<name>.<property>=<value(s)>
     指令是区分大小写的。servlets.properties 文件还可以包含空行和以“#”
号开头的注释行。servlets.properties 文件不是必须进行设置的。Servlet 的缺
省属性是:无别名、无初始化参数、无映射扩展并按需要装入 Servlet。
     Servlet 别名
     别名指令的语法是:
     servlet.<alias-name>.code=<class-name>
例如:

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                              98
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     servlet.SQLQuery.code=sql.database.query.Servlet
     出于安全性的考虑,Domino 不允许 servlet 名包含将要在 servlet URL 中
使用的周期。这样能够防止恶意用户通过 servlet 管理器任意加载 Java 包和类。
如果服务器小程序有一个包名,则必须为其指定一个别名。以上的例子允许
sql.database.query.Servlet servlet 被诸如 “http://acme.com/servlet
/SQLQuery?month=june”等 URL 调用。别名在将 servlet 的实际名称对用户隐
藏方面也很有用。
     可以为 servlet 指定多个别名。servlet 管理器在收到第一个指向所有别名
的 URL 时会创建 servlet 的一个新实例。新实例创建时,servlet 管理器将调
用 servlet 的 init() 成员函数。由于别名可用在属性文件的其他指令中,因此
实例可以被赋予不同的属性。例如:可以为每个别名指定相互独立的初始化参数。
同样,由于即使创建了多个实例,servlet 类也只装入一次,因此 servlet 的实
例可以通过使用静态类变量来共享数据。
     为安全起见,如果给 servlet 指定了别名,则该 servlet 在 URL 中就不能
通过类名来引用。这样可以隐藏 servlet 的真名。
     初始化参数
     可 以 在 属 性 文 件 中 指 定 为 servlet 指 定 初 始 数 据 。 Servlet 可 使 用
ServletConfig.getInitParameter 成员函数来访问这些数据。初始化指令的语法
是:
     servlet.<alias or class name>.initArgs=<name1=value1>
     ,<name2=value2>,...
     可以指定多个参数并以逗号进行分隔。例如:
     servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30
URL 映射扩展
     URL 映射扩展指令的语法是:
     servlet.<alias or class name>.extension=<extension> <extension> ...
     可以给 servlet 指定多个扩展,相互之间以空格分隔。所有扩展都必须包含
在“服务器”记录的“Servlet file extensions”设置中。例如:无论何时 URL
指定扩展“sql”或“sq” 都能使 Domino 调用 SQLQuery servlet,请将“sql,sq”
              ,

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        99
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
添加到服务器设置中,并将这一指令添加到属性文件中:
     servlet.SQLQuery.extension=sql sq
     这允许用户调用含有类似以下 URL 的 servlet:
     http://acme.com/query.sql?month=june
     启动时装入
     缺省情况下,servlet 管理器在第一次接收到引用某个 servlet 的 URL 时
将此 servlet 的类文件装入内存。但是,可以指定 servlet 管理器启动时就同时
装入一个或多个 servlet。这样可以防止用户在 URL 首次要求装入小程序时被延
误。启动指令的语法如下:
     servlets.startup=<alias or class> <alias or class> ...
     请注意“servlets”(服务器小程序)是复数形式,servlet 的名称必须使用
空格分开。
     如果给小程序指定了一个或多个别名,则可以在启动指令中包含这些别名。
这样会使 servlet 管理器装入小程序类然后为每个别名创建一个实例。
     servlet 管理器装入 servlet 类之后,只要不是 Domino HTTP 任务由控制
台命令 "tell http quit" 终止或由控制台命令 "tell http restart" 重新启动,
这些类将一直驻留在内存中。卸载服务器小程序之前,servlet 管理器将为
servlet 的每个实例调用 destroy() 成员函数,以使其有机会清理资源。
     由 JVM 类加载程序装入的类在 HTTP 任务终止之前将一直保持加载状态。
    “tell http restart”命令不会将类卸载。
     属性文件样例
     以下是 servlets.properties 文件的样例:
     # Properties for the sql servlet
     servlet.SQLQuery.code=sql.database.query.Servlet
     servlet.SQLQuery.initArgs=cache=30
     servlet.SQLQuery.extension=sql
     # Properties for the mail servlet
     servlet.MailServlet.initArgs=mime=enabled,smime=disabled
     # Both servlets should be loaded at startup

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        100
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     servlets.startup=SQLQuery MailServlet
     # end of file
样例:Java servlet           此 servlet 样例返回一个 HTML 页面,上面显示浏览器与
服务器小程序请求一起发送的所有 HTTP 标头。
     import java.util.*;
     import java.io.*;
     import javax.servlet.*;
     import javax.servlet.http.*;
     public class ExampleServlet extends HttpServlet {
     public void doGet (HttpServletRequest request, HttpServletResponse
response) throws IOException
     {
         response.setContentType("text/html");
         ServletOutputStream out = response.getOutputStream();
         out.println("<HTML><B>Headers sent with the request:</B><BR>");


         for (Enumeration headers = request.getHeaderNames();
         headers.hasMoreElements();)
         {
             String headerName = (String) headers.nextElement();
             out.println("<BR>" + headerName + ": " +
             request.getHeader(headerName));
         }
     } // end of method
     } // end of class
     编 好 此 代 码 后 , 请 将 ExampleServlet.class 文 件 拷 贝 到 服 务 器 的
dominoservlet 中 。 由 于 此 文 件 不 需 要 特 殊 属 性 , 因 此 不 必 创 建
servlets.properties 文件。输入下面的 URL(请使用自己的服务器名)即可从
浏览器运行小程序:

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        101
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     http://www.yourserver.com/servlet/ExampleServlet
     由 服 务 器 小 程 序 返 回 的 页 面 上 的 信 息 是由 浏 览 器 决 定 的 。 以 下 是 使 用
Netscape 浏览器返回的 HTML 页面:
     <HTML><B>Headers received with the request:</B><BR>
     <BR>ACCEPT-LANGUAGE: en
     <BR>CONNECTION: Keep-Alive
     <BR>ACCEPT: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*
     <BR>USER-AGENT: Mozilla/4.05 [en] (Win95; U ;Nav)
     <BR>ACCEPT-CHARSET: iso-8859-1,*,utf-8
     <BR>HOST: test1


6.2.8 LOTUS/DOMINO-API

     使用 Lotus C API for Lotus Notes/Domino 常常使人想起一把方便好用的
老式瑞士军刀:一个时髦的小工具箱,包含许多没有书面文档的(undocumented)
有用部件!以下笔者将重点介绍 Lotus C API for Lotus Notes/Domino 的一些
功能,帮助大家重新发现其无限的潜在用途。对 Lotus Notes/Domino 有基本的
了解并熟悉编程语言就足以应付以下内容。C 编程语言的应用知识可以帮助您更
好地理解我们讨论的一些概念。
     Lotus C API toolkit 简介
     首先如果要获取的话可以通过访问 Toolkits & Drivers page 下载 Lotus C
API toolkit for Lotus Notes/Domino。在将下载的档案文件中的这些文件解压
缩之后,就可以获得文档、头文件、库文件、已编译的 OBJ 文件、示例程序和示
例中使用的数据库。
     文档中包括一个用户指导和一个参考指导,它们都是以单独 Notes 数据库的
形式出现的。您可以从文档中获得许多信息。同时,用户指导中包含可以使用该
工具箱完成哪些任务以及如何完成这些任务的介绍,而参考指导记录了所有可用
功能。请仔细考虑一下这些数据库中包含的大量信息,这对为数据库创建全文
(full-text)索引很有用,这样就可以快速准确地进行查找。
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        102
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     头文件通常可以在 Include 文件夹中找到。它们包含用于所有可作为该工具
箱的一部分的常数、结构、宏、公共函数的定义。您需要根据程序中使用的 API 调
用在源代码中包含相应的头文件。库文件和已编译的 OBJ 文件通常可以在不同操
作系统的特定文件夹下的 Lib 文件夹中找到。因为 LIB 文件是需要链接到 API 程
序的 DLL 导入库,所以 OBJ 文件是使用 NotesMain 入口点的程序或完成插件服
务器任务所需的引导程序对象。
     在示例文件夹中提供了一个详尽的示例程序列表。notedata 文件夹通常包含
示例程序中用到的所有数据库。参考指导中描绘了每个函数或符号值,它们至少
可以被一个示例程序引用,通过查看该参考指导,我们将了解如何在实际程序中
使用即将检查的函数。
     在明白了我们必须做什么之后,继续研究该工具箱的最好办法就是钻研一个
实际的程序。


6.2.9 DOMINO-WEBSERVICES

     Web 服务是可以通过在 Internet 上发送消息来调用的远程操作的档案。Web
服务供应商发布用于查询和使用的 Web 服务,而 Web 服务消费者调用来自这些
服 务的 操 作 。Web 服务 供 应 商提 供 了定 义 服务 接 口 的 WSDL ( Web Services
Description Language,Web 服务描述语言)文档。WSDL 文档是 XML 格式的。
接口的底层由供应商实现,但大多数供应商将接口映射为支持的编程语言的过程
调用。来自消费者的入站请求传递给底层代码,然后结果返回给消费者。
     Lotus Domino 将 WSDL 接口映射为可以用 LotusScript 或 Java 编码的类
似代理的 Web 服务设计元素。要被使用,Web 服务必须位于启用 HTTP 的 Domino
服务器上。(我们可以通过 Notes 客户机预览中的 HTTP 会话测试 Web 服务。
                                           )
通过下列 Domino URL 命令之一进行访问:
     •   ?OpenWebService 调用 Web 服务以响应通过 HTTP POST 发送的 SOAP 编
码消息。HTTP GET(例如,浏览器查询)返回服务的名称及其操作。
     •   ?WSDL 返回 WSDL 文档以响应 HTTP GET。
     在 Domino Designer 中创建 Web 服务设计元素有多种可行方法。可以完全
用 LotusScript 或 Java 来编码。在这种情况下,保存设计元素会生成反映
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        103
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
LotusScript 或 Java 代码的 WSDL 文档。或者可以导入现有的 WSDL 文档。在
这种情况下,在导入的 WSDL 中会生成反映操作的 LotusScript 或 Java 代码。
Web 服务设计元素保存 WSDL 文档以及代码。如果公共接口未更改,则 WSDL 文
档保持不变。如果在编码中更改了影响公共接口的部分,则会生成新的 WSDL。


6.2.10 XML

     Domino 目前可支持扩展置标语言(或被称为 XML)
                                。与描述数据外观的超文
本置标语言 (HTML) 不同,XML 描述数据的结构。这与将数据存储在结构化文档
中而与其显示方式分开的 Domino 是一致的。通过使用 XML 标准(使用与显示方
式分开的数据),立刻可以生成更强大的 Domino 应用程序。

     Domino 数据的 XML 表示法被称为 DXL。DXL 描述了 Domino 特定的数据和
设计元素,如嵌入视图、表单和文档。由于 XML 成了交换信息的标准基础,所以
DXL 提供了向 Domino 应用程序引入和从中引出数据的 XML 表示法的基础。

在 Java 成员函数中使用 XML

     Domino Designer 和 Server 产品中包括了 XML4J Parser 和 LotusXSL
Processor 可用于解析并转换 XML 数据,而不必单独下载。通过 Java 后端类中
的下列属性和成员函数,可以访问对象的 XML 表示法、解析并转换 XML 数据并
生成文档的 XML 表示法:

Document 中的 generateXML 成员函数

EmbeddedObject 中的 InputSource、InputStream 和 Reader 属性以及 parseXML
和 transformXML 成员函数

Item 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和
transformXML 成员函数

MIMEEntity 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和
transformXML 成员函数

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        104
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
RichTextItem 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和
transformXML 成员函数

     对于独立的应用程序,应该在 lotus.domino 类的类路径中包含 NCSO.JAR 或
NOTES.JAR 文件。还应该在类路径中包含 XML4J.JAR 文件以使用 XML 解析器,
包含 LotusXSL.JAR 文件以使用 XSL 处理器。

注释     即使只需要使用 transformXML 成员函数,也必须在类路径中包含
XML4J.JAR 文件。

对于在浏览器中运行的小程序,应该随小程序自身包含 XML4J.JAR 和/或
XML4J.CAB 文件以使用 XML 解析器。要使用 XSL 处理器,应该随小程序包含
XML4J.JAR 和/或 XML4J.CAB 文件以及 LotusXSL.JAR 和/或 LotusXSL.CAB 文件。

关于 XML4J 解析器和 LotusXSL 处理器的进一步详细信息,请访问 Alphaworks
Web 站点 www.alphaworks.ibm.com。

在 Domino DTD 中使用 XML

     Domino 文档类型定义 (DTD) 描述 DXL 的结构。DTD 存储 XML 标记的定义,
转换外部 XML 数据到 Domino 数据库中时,可使用这些标记来校验 XML 文档,
从而确保所有文档保持统一的结构。

下面是两个 Domino DTD:

View DTD 表示 Domino 数据库中视图的结构。要生成符合 View DTD 的 XML 表
示法,可使用 ReadViewEntries URL 命令。

Document DTD 表示 Domino 数据库中文档的结构。要生成符合 Document DTD 的
XML 表示法,可使用 Document 中的 generateXML 成员函数。

Domino DTD 定义如下内容:
 •   元素以及允许的内容
 •   元素的属性列表
 •   使 DTD 更加模块化的实体
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        105
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                              (
 •    使 DTD 更易于理解的 注释
关于 DTD 中各种声明的完整列表和说明,请参阅 XML Standard Recommendations
Web 站点 http://www.w3.org/TR/REC-xml。
元素
一个元素就是一个标记,其定义如下:
<!ELEMENT tagname ( content-model ) >
其中 tagname 是标记的名称。 标记名称是区分大小写的。       内容模型是一个表达式,
陈述可显示在元素中的内容。它也可以包含嵌套的标记。元素用于开始和结束标
记之间。例如:Domino View DTD 中的 viewentry 元素如此定义:
<!ELEMENT viewentry ( entrydata* ) >
此元素用于 XML 输出中,如下所示:
<viewentry children="3">
     <entrydata columnnumber="1">
         <text> Joe Smith </text>
     </entrydata>
 </viewentry>
内容模型中可用的操作符有:
 •    OR ( | ) 表示选择
 •    逗号 ( , ) 表示连续
 •    星号 ( * ) 表示 0 或更多
 •    加号 ( * ) 意思是 1 或更多
 •    问号 ( ? ) 表示 0 或 1
 •    圆括号 ( () ) 表示分组。
以下样例说明内容模型中操作符的使用:
<!ELEMENT document(noteinfo?, item*)>
在此例中,<document> 元素可包含可选的 <noteinfo> 元素,并且可包含一些
<item> 元素。
操作符的另一个样例是:
<!ELEMENT text ( #PCDATA | button | rule )* >
此处的 <text> 元素只能包含纯文本、<button> 元素或 <rule> 元素,它们可以
任何顺序出现。#PCDATA 表示纯文本(字符内容),并且它必须是选项序列的第
一项,此处将整个选项组括起来并带有一个星号。
属性
任何元素的属性以如下方式声明:
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        106
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
<!ATTLIST tagname

   attr1                      type1                    usage1

   attr2                      type2                    usage2

                              ...

其中 tagname 是要定义其属性列表的元素,该元素的所有属性随同它们的类型和
用法都被列出。
例如:
<!ATTLIST book

  title            CDATA                                        #REQUIRED

  isbn             CDATA                                        #IMPLIED

  cover            (hard|paper)                                 #IMPLIED

  format           ( bound|looseleaf|scroll|parchment )         "bound"

此样例为 <book> 定义了四个允许的属性:title、isbn、cover 和 format。如
果 <book> 没有其他 ATTLIST 声明,那么这些就是唯一允许的属性。任何其他属
性都是非法的。title 属性可包含任何值,而且必须出现。根据此 DTD,没有 title
属性的 <book> 元素是无效的。isbn 属性可包含任何值,但可以忽略。cover 属
性可取两值之一:“hard”或“paper”。任何其他值都是非法的,但该属性可以
被完全忽略。format 属性可以是四个可能值之一,并且如果该属性被忽略,校验
解析器将提供“bound”作为它的值,就象在 XML 内容中实际出现了
format="bound"。

所有属性基本上都是字符串,如此表中所示:

属性值                     意义

CDATA                   任何字符串值(无限制)

NMTOKEN                 单个名称记号

NMTOKENS                名称记号列表




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                             107
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
属性值                     意义

( a | b | c )           “a”、“b”或“c”。用法指定属性是可选、必需、缺省还是常量。

#IMPLIED                可选。

#REQUIRED               必需出现在元素中,并且没有缺省值。

'literal'               可选的,但如果它不出现,解析器将为其提供缺省值,就象指定了属
                        性一样。

#FIXED 'literal'        它只可以采用此值,如果它没有出现在 XML 中,解析器将为它提供
                        值,就象指定的一样。

ATTLIST 声明中属性的顺序是不相关的(就象它在 XML 数据中),且可使用空格
以使 DTD 更加易读。
实体
实体是按如下方式声明的宏:
<!ENTITY macroname "macrocontent" >
例如:

<!ENTITY        % string                 "CDATA" >

<!ENTITY        % book.formats           "bound|looseleaf|scroll|parchment" >

<!ENTITY        % book.covers            "hard|paper" >

定义实体时,“%”符号是必需的。上面的实体按如下方式使用:
<!ATTLIST book

  title                  %string;                          #REQUIRED

  isbn                   %string;                          #IMPLIED

  cover                  ( %book.covers; )                 #IMPLIED

  format                 ( %book.formats; )                "bound"

此处的实体名称位于百分号和分号之间,并且与 C 语言的宏一样插入内容。
注释
DTD 中的注释按如下方式括起来:
<!-- comment text, anything except two dashes. -->
公共元素和实体
Domino View DTD 和 Document DTD 使用它们共同具有的元素和实体。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                    108
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
实体
以下为公共实体:

<!ENTITY % boolean "( true | false )">         表示布尔型

<!ENTITY % integer "CDATA">                    Represents an integer

<!ENTITY % noteid "CDATA">                     NoteID 是 4 至 8 个十六进制字符

<!ENTITY % unid "CDATA">                       文档的 32 个字符的十六进制标识符

<!ENTITY % string "CDATA">                     不能被转换为其他自然语言的字符串

DateTime 元素及其属性
以下元素及其属性是 View 和 Document DTD 共同具有的。
<!ELEMENT datetime ( #PCDATA )>
      此元素表示视图中某列或文档中某项的日期和/或时间数据。Domino
      TIMEDATES 按 ISO8601 基本格式表示。
<!ATTLIST datetimedst %boolean;
"false"

dst              datetime 元素的属性。布尔值。如果记录此时间时实行夏时制,则为真。
                 缺省为假。



定义的实体下面定义的实体在 View 和 Document DTD 中都能使用。
<!ENTITY % simple.types "text | number | datetime | textlist | numberlist
| datetimelist">
其中

元素                                           表示

<!ELEMENT text ( #PCDATA )>                  视图中某列或文档中某项的单一文本数据。

<!ELEMENT number ( #PCDATA )>                视图中某列或文档中某项的单一数字数据。

<!ELEMENT textlist ( text* )>                视图中某列或文档中某项的多文本数据。

<!ELEMENT numberlist ( number* )>            视图中某列或文档中某项的多数字数据。

<!ELEMENT datetimelist ( datetime*,          视图中某列或文档中某项中的多 datetime 和
datetimepair* )>                             datetimepair 数据。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                               109
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

6.3 如何优化我们的编码

6.3.1 公式语言的优化

1.使用@ClientType 代替@UserRoles 来检查客户端类型
   不使用@UserRoles 中的$$WebClient 来检查客户端是否使用浏览器,直接使用
@ClientType 比较快。
2.使用简单的公式隐藏条件比较快
     以下三种写隐藏的选择,性能递减。可以利用第一个,不要写判断@ClientTy
pe 的公式;可以利用编辑模式,不要写判断@isdocbeingedited 的公式
   a.根据客户端程序类型                     b.根据编辑模式                c.根据公式隐藏
3.在@dblookup 和@dbcolumn 公式中使用列号比使用域名快
     使用域名需要在域列表中对比,但直接使用列号会带来维护的困难。
4.打开@dblookup 和@dbcolumn 的 cache 开关
     cache 不但可以使这个公式执行更加快,而且可以使‘同一个数据库’ ‘同
                                       中,
样公式’的另一个 lookup 运行更快。cache 是基于数据库的,不同数据库的相同
lookup 不能利用相同的 cache。注意:无论是否打开 cache,LotusScript 调用 e
valuate 的 lookup 都不能利用 cache。
5.根据 4,如果公式和 LotusScript 都要利用相同的 lookup 结果,可以将信息放
到 profile 文档中。
6.要 lookup 一个包含很多文档的视图时,创建一个隐藏视图,仅包含必要的列。
视图越小,越快。
7.如果要取视图中的几个列,分别取的话,每个 lookup 都要花时间。将几个列
组合成一个列,用特别的字符分隔,一次取出来,然后分析出几个域。
8.一段公式中,数次利用同一个结果集,用临时变量保存,而不是每次重新取
9.使用不同的搜索方法,如果处理的文档集较小(例如少于数据库中所有文档的
15%),用 LotusScript 比公式快,如使用 getview , search, ftsearch 等方法。
10.使用‘显示时计算’域来避免不必要的重复计算。


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                            110
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
注意两点:
1.使用 check box 和 radio box,一打开文档,公式总要计算,即使仅仅打算阅
读而不是修改文档,看起来是合理的,因为需要计算出各个项目供阅读嘛
2.已经有数据的,使用对话框格式的编辑域,打开时候也要重新计算,这个就不
太合理了。
   当使用复杂的@dblookup 时,性能有很大影响。隐藏公式域没有作用,因为仍
然会发生计算。按照下面方法解决
1)创建一个隐藏的多值‘显示时计算’域:kwDataHidden,计算公式是原来的@d
blookup 公式,但仍然要做如下处理,值公式写成这样:
   rem "Do not run formula during doc save";
   @if (@IsDocBeingSaved; @Return("");"");
   rem "Only run if doc is in edit mode";
   @if (@IsDocBeingEdited;@DBColumn(............);"")
2)在表单的 PostModeChange 中,写:@If(@IsDocBeingEdited;@Command([ViewR
efreshFields]);""),(实际上,如果觉得公式的值的修改频率不是太快的话,
这里也可以不写)
3)真正操作那个域的公式写:kwDataHidden;并且该域属性选择‘刷新文档时刷
新选项’。


6.3.2 脚本语言优化

1.使用 For loop,不使用 Do loop 或者 while loop 的循环
     前者比后者快 60%(不计算循环内部时间的情况下)
2.引用数组元素的时候,使用 Forall 比 for 快
     一维数组,前者快 75%,二维以上,也可以快 50%
3.简化 if 语句
     LotusScript 不会象 c 那样进行逻辑语句优化,所以
     If a=x and b=y then
     应该写成
     If a=x then

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        111
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
         if b=y then
     后者快 40%
4.避免混合变量类型(计算)(也就是不要隐式造型)
     dim a as single
     dim z as long
     z = 3
     a = 1.0
     z = z+a
     上面这一段使用了 implied casting,z=z+(long)a 会比较快
1.对整数结果,使用整数除法:z& = x&  y& 比 z& = x& / y& 快 60%
2.仅在有必要的时候才使用 variant 类型,lotus 使用更多的时间处理 variant
3.读取文件的时候,一次读取一块,而不是一行,下面的例子 A 比 B 快接近 5 倍!
而且读取的文件越大,越明显。
     example A
Open fName$ for input as #fNum
buff$ = Input$(Lof(fNum),fNum)
stPos = 1
lineNo = 1
eoFile = false
While Not eoFile
  nlPos = Instr(stPos,buff$,Chr$(13))
  If (nlPos) > 0) then
     fData$(lineNo) = Mid$(buff$,stPos,nlPos - stPos)
     stPos = nlPos + 1
  else
     fData$(lineNo) = Mid$(buff$,stPos)
     eoFile = true
  end if
  lineNo = LineNo + 1

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        112
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
wend
close #fNum
          example B
Open fName$ for Input as #fNum
lineNo = 1
while Not Eof(fNum)
  Line Input #fNum , fData$(lineNo)
  lineNo = lineNo + 1
wend
close #fNum
注意,R4.6 以及之前的版本,string 变量有 64k 的限制,所以一上例子 a 需要
再增加一些东西(不能一次读取,而是要分次读取文件),但块读取的好处仍然
是显而易见的。 开始,
       R5  string 变量可以最大达到 2G,足够读取非常大的文件了。
例子 A 虽然增加了代码量,但是可以大大加快速度,某些场合非常有用
5.避免无谓地使用数组,下面例子 A 比例子 B 快两倍
Example A
For i = 1 to 100
  sum = sum + x(i)
Next
t(1)=sum
Example B
For i = 1 to 100
  t(1) = t(1) + x(i)
Next
Domino R5 引入了新的数组处理函数:ArrayAppend , ArrayGetIndex ,
ArrayReplace , FullTrim,使用这些函数比自己写相同的功能快
6.有一个不使用字符串数组的替代方法
     把所有数组中的字符串元素构造成一个字符串,用特殊分隔符分开(例如回
车符),然后用             Instr     来取各个元素

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        113
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
7.优化字符串的处理
     字符串的处理非常消耗资源,例如下面这句很常见
X$= X$ & "a"
这个语句非常消耗资源(java 中有类似现象,因为涉及到重新生成字符串),下
面这句缩短字符串也是很消耗资源的
x$ = Right$(x$ , currentLength% - lengthStrippeddOff%)
8.创建一个新的字符串有时候更加快
下面例子 A 比 B 快 25%
A
str$ = stringA$ & stringB$
B
str$ = stringA$
str$ = str$ & stringB$
9.反复处理字符串时,记住处理位置
     比不断修改字符串长度快(其实是不断生成新的字符串),下面例子 A 比 B
快 85%
A
strPiece$ = Mid$(str$ , startPos% , pieceLength%)
startPos% = startPos% + pieceLength%
B
strPiece$ = Left$(str$ , pieceLength)
strLength% = strLength% - pieceLength%
str$ = Right$(str$ , strLength%)
10.谨慎是用 redim 命令
     可以理解,每次 redim 是内存堆数据的乾坤大挪移,所以尽可能事先决定数组
大小。实在没有办法,也千万不要在循环中 redim。以下例子 A 比 B 快 20%
A
For i = 1 to 10000
    If ( i> iMax) then

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        114
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
       iMax = iMax + 100
       redim Preserve sArray(1 to iMax)
    end if
    sArray(i) = ""
Next
B
For i = 1 to 10000
    Redim Preserve sArray(1 to i)
    sArray(i)=""
Next
以上实际是减少 redim 的次数,每次增加多些,循环后可能还需要一次 redim,让
数组空间和实际一致
11.在多维数组中循环
     应使用正确的顺序。在外循环中操作后面的维数,在内循环中操作前面的维
数,下面的例子 A 比例子 B 快 400%!
A
For y = 0 to 2
    for q = 0 to 5000
      z = z + x(q,y)
    Next
Next
B
For q = 0 to 5000
    For y = 0 to 2
      z = z + x(q,y)
    next
next
12.比较整数,而不是比较字符串
下面的例子 A 比例子 B 快 50%,例子 C 比例子 D 快 30%

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        115
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
A   If(Asc(x$) = Asc("A")) then
B   If(Left$(X$,1) = "A") then
C   If(Asc(Mid$(x$ , 1, 1) = "A") then
D   If(Mid$(x,1,1) = "A") then
下面比较空串的例子 E 也比例子 F 快 30%
E   If (Len(x$) = 0) then
F   If (x$="") then
13.将数字转为字符串的时候使用自动造型,不用手工转换
    例如 s2$ = "Text" & iNum 比 s2$="Text & Cstr(iNum%) 稍微快一点,不过
不明显。
14.重要:避免过多使用环境变量
    环境变量要读取 notes. 文件,
                  ini 对性能造成影响,替代办法是使用 profile。
如果一定要使用环境变量,将多个环境变量合并成一个,用特殊符号分隔,取出
来后再分析成多个。取 10 个单独的环境变量要比取一个长的环境变量多花 10 倍
时间!


6.3.3 Java & JavaScriptino应用程序优化

    Java 需要装入 JVM,client 端第一次运行的时候装入,server 端,随着 http
装入的时候装入(所以不用 http 就不要装入了,估计慢也是受到 jvm 影响 :)                                )
有关 java 没有什么好说,就说两点。
1.将需要的 java 类,尽可能放在类列表前面,尽可能接近 base 类,可以加快搜
    索速度;
2.周期性调用回收函数,java 本身是自动进行垃圾收集的,但是该书的意思似乎
    说 java 的垃圾回收,不能回收相关 lotus objects 用掉的内存;
3.JavaScript,没有什么好说的,用于 web 页面,域校验,和输入转换,可以避
    免 browser 和 web server 来回交换数据,减少网络流量;




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        116
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

6.3.4 DOMINO对象模型优化

  利用后期初始化和对象重用技术来最大限度地利用资源
1.后期初始化(lazy initialization)。学习到一定地步的 lotus 程序员,为
了程序结果清晰,往往喜欢事先将一些对象如 db , view , doc 等初始化,然后
每个函数都可以使用。从提高效率的角度,可以改进为使用后期初始化(自己翻
译的,不知道是否准确,应用期初始化?),下面是后期初始化的方法
' *** Globals
' *** Declare the global data we share
Public gDb As NotesDatabase
Public gVwCustomerType As NotesView
'*** Functions
'*** Get the customer type view (lazy initialization)
'*** Do account validation
Sub Initialize
'*** Set up the database (NOT lazy)
          Dim ss As New NotesSession
          Set gDb = ss.CurrentDatabase
End Sub
Function GetCustomerTypeView() As NotesView
'*** Only get it the 1st time it is used
          If (gVwCustomerType Is Nothing) Then
                    Set gVwCustomerType = gDb.GetView("Customer Type")
          End If
          Set GetCustomerTypeView = gVwCustomerType
End Function
Function ValidateAccount(custName As String, _
accountType As String) As Integer
'*** Return True if account is valid

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        117
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
          Dim vw As NotesView
          Dim doc As NotesDocument
          Dim aKeys(0 To 1) As String
          Select Case AccountType
          Case “New”
'*** New accounts are always valid
                    ValidateAccount% = True
          Case Else
'*** Is customer allowed the specified account type?
                    Set vw = GetCustomerTypeView()
                    aKeys(0) = custName$
                    aKeys(1) = accountType$
                    Set doc = vw.GetDocumentByKey(aKeys, True)
                    If (doc Is Nothing) Then
                             ValidateAccount% = False
                    Else
                             ValidateAccount% = True
                    End If
          End Select
End Function
     以上 GetCustomerTypeView 函数中使用了 lazy initialization 方法,当该
函数第一次被调用,它调用 getview 取得视图,以后只要直接取 public 的 vw 即
可,其他程序的结构不会受到影响(如果将全局变量的 vw 封装在 class 中,则更
加符合面向对象的规则)


6.3.5 最大限度重用对象

 1.打开数据库时的动作
   a.创建数据库,涉及到内存分配和初始化
   b.定位数据库,涉及到目录查找,或者存取其他服务器
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        118
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
    c.初始化对象属性,需要从数据库读取 ACL 等属性
由于打开数据库如此耗费资源,所以应该尽量重复利用打开的 db,作为参数传递,
或者全局变量(或者类变量)而不是在每个函数中重新打开。
2.使用已有对象,比较下面,A 比 B 快
A
dbTitle$ = doc.ParentDatabase.Title
B
set session = new NotesSession
set db = session.CurrentDatabase
dbTitle = db.Title
3.使用 back-end 类,比用 front-end 类快,并且 back-end 类可以添加任何数据
类型和新域
4.使用 NotesUIDocument 类时,如果需要大量修改文档域,禁止 AutoReload 属
性
修改前:source.AutoReload = false
修改后:source.AutoReload = true
          source.Reload
5.如果从视图存取文档,使用 ColumnValues 访问域,比直接访问要快,但只有
从视图存取文档才能利用这点,还有就是要注意 columnNumber 这个列数的计算,
不是视图上的每个列都算在里面
A
var = doc.ColumnValues(columnNumber%)
x    = var(0)
B x =doc.fieldname


6. 如何在不同应用中选择合适的编码语言
  4
     在具体的开发过程中,根据需求性质,DOMINO 可以有多种编码语言的选择。
主要有公式、LotusScript、java、javaScript 等语言:
     其中 javaScript 是跨平台面向对象的描述性语言,可以附加到诸如 ONCLICK
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        119
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
的特定事件或被附加到诸如 ONCLICK 的特定事件上,但不能在代理中编写;
     LotusScript 则是完全面向对象的,通过他我们可以访问系列 DOMINO 服务;
     而 JAVA 方面,
              系统内置 20 多个 JAVA 与 DOMINO 的接口是通过预定义的 DOMINO
JAVA 类实现,在代理方面的使用方法类似于 LotusScript,但不能附加到 DOMINOUI
的事件中。
     比较起来,特别简单的功能和逻辑,用公式实现比较快;复杂的功能和逻辑,
用 LotusScript 比较快。
     而 java 语言可以实现多线程,完全面向对象,处理大量文档时,如果程序利
用到多线程,比不能利用多线程的 LotusScript 快。
     另外针对于底层开发,LOTUS 还有专门的 Toolkits 支持,按 Lotus 产品系列
来分,Lotus 提供下列产品的工具包: Notes/Domino 、Sametime 、QuickPlace 、
Discovery Server 、Other。其中,Notes/Domino 和 Sametime 的工具包比较多,
C、C++、Java 语言的都有,其他产品的则很少。从这个角度,也可以看出文档数
据处理、协同工作是 Lotus 系列产品的核心价值所在。其中,Notes/Domino 的工
具包有:
Lotus C API toolkit Lotus                       C++ API toolkit
Lotus Domino Toolkit for Java/CORBA             Lotus and Notes Toolkit for COM
Lotus Domino Driver for JDBC (简称 LDDJ) NotesSQL
Lotus XML Toolkit(简称 DXL) Custom Tag Converion kit(简称 DCT)
LotusScript Extensions toolkit(简称 LSX)
    在 Domino/Notes 的 Toolkit 中,C API 的功能最为强大:可以操纵 notes 数据
库中几乎所有的数据对象:数据库及 ACL、文档和域、表单、视图和文件夹、代理、
可以为 Notes 客户端的增加附加菜单、可以用来创建附加的 Domino 服务任务、可
以用来扩展 Domino/Notes 的事件管理。而其主要限制如下:不能修改已有的
Domino/Notes 软件,不能去除其已有的功能、特性,或者改变其工作机理、不能
修改安全特性、不能修改用户活动记录。
                 支持的操作系统:WindowsNT/2000, Linux,
Solaris SPARC/Intel, HP-UX, MacOS, AIX, AS/400, S/390 等。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                               120
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科

6.4.1 使用公式和LOTUSSCRIPT的前提

     一般,公式最好用于用户当前处理的对象(如返回域的默认值)或者确定视
图的选择标准。脚本最好用于访问已存在的对象,如基于其他文档的值来修改这
个文档的值。脚本提供了公式没有的功能,如操作 RichText 域的能力。在一些
情况下,公式提供了更好的效率,而且比小应用程序更方便。
     可以使用 LotusScript 中的 Evaluate 函数将公式语言与 LotusScript 结
合起来。这样在完成相同任务的情况下,函数比 LotusScript 使用更少的行数。
通过使用同一表单的不同部分,可以在应用程序中将 LotusScript 和公式结合起
来。在脚本中包含公式可以使脚本更容易编写,但不能提高效率。
     除了直接与 Notes 用户界面相互作用的函数外, 你可以使用 Evaluate 包
含任何函数,例如@Prompt 、@DialogBox 、@PickList 和@Command 。下面是与
LotusScript 结合的特别有用的函数:
 l ) @ Name :允许你操作层级名。
 2 ) @ RePlace :从文本列表中取值,而不需要像 LotusScript 要求的循环
3 ) @ Unique :从文本列表中删除复本。
4 ) @ subset :从左到右读取列表。
     当两者都用时,对于一个给定的任务,究竟使用 LotusScript 还是 Domino 公
式语言,主要取决于任务的复杂性。当做决策时,考虑以下几个问题:
l )需要处理大量数据吗?
     如果一个公式通过函数需要涉及多个数据库或文档,那么必须依赖于 Notes
用户界面来访问每个文档,然而 LotusScript 可以更有效更快地访问文档。
      例如,LotusScript 是一个创建代理的好工具,它可以查看工作台上所有的
文档,并返回诸如数据库大小、已使用空间、文档数等的信息。 LotusScript 是
在多个文档中运行全文本搜索的好工具,并可以利用搜索结果执行活动。
2 )使用 Domino 对象模型 front 一 end 或 back 一 end 吗?
     Domino 对象模型( front 一 end 类)与相对应的@ commands 有相同的
Domino 代码,因此当使用这些类时, LotusScript 不可能比公式语言更好。然
而数据库( Back 一 end 类)使用不同的代码,所以比相对应的函数更好。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        121
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
     例如,执行修改多个域时,避免使用 NotesuIDocument Front 一 end 类。
NotesDocument Back - end 类更快,并允许赋予数据类型(包括 rich text ) ,
以及增加新(隐藏)域。 Front 一 end 类只允许你修改表单中已存在的域,并
允许你在域中增加文本,就像@ command ( [ EditlnsertText]) 一样。
     另外, Front 一 end 类不能在由服务器运行的计划代理中工作,只能在由
用户工作台运行的代理中有效(如从菜单中)。
3 )使用 CoRBA applets 吗?
     Domino 对象模型( Back 一 end )支持 CORBA 小应用程序。如果你打算利
用 COBRA 小应用程序开发 Web 应用程序,用于向浏览器用户显示信息。
4 )需要操作当前选中的对象吗?
     使用公式语言,而不是 LotusScript
5 )需要在 Action 栏上编写按钮吗?
     考虑使用公式语言,而不是 LotusScript 。按钮活动一般比较简单,而且直
接通过 Notes 用户界面完成任务,例如保存或关闭文档.
6 )需要返回域的默认值吗?
     使用公式语言,而不是 LotusScript
7 )需要返回窗口标题吗?
     使用公式语言,而不是 LotusScript
8 )需要从表单控制工作流程吗?
     LOTUSSCRIPT 是用表单事件控制工作流的最好选择,特别是 Query Save 事件,
因为它能处理更复杂的任务,如循环和设置多个变量。
     例如,你可以通过操作输入和退出域事件,来事先确定的顺序,并要求用户
按照此顺序填写表单中的域。或者你可以防止用户打开、保存或编辑文档,直到
满足一定的条件。
9 )在一个公式中是否包含了太多的函数?
     如果一个公式中包含了许多函数,尝试将公式转换成 LotusScript 。然而,
在只需要一个函数的公式情况下,例如@ Command [ FilePrint ] ,采用公式比
采用脚本更有效。
10 )需要使用大量 if - then 一 else 或 for 一和 while 一循环吗?

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        122
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   使用 LOTUSSCRIPT 而不是公式语言,因为这样易于维护代码。而且,公式不支
持循环。


6.4.2 执行LOTUSSCRIPT和公式顺序分析

( l )在单一表单中 LotusScript 和 Domino 公式在一系列活动中的执行顺序
   如果你的应用程序包含了 LotusScript 和公式语言的结合体,这将有助于了
解表单中的事件和公式执行的顺序。
   下面这个样例列出了在单一表单中 LotusScript 和 Domino 公式在一系列活
动中的执行顺序。这个列表是通过内嵌信息框命令或将@ prompt 公式嵌人各种
事件和公式生成的,这些事件和公式在一张包含各种不同域类型的表单中。这张
表单并不包含所有域的类型或评价结合体。然而,通过了解这个例子中的结果,
你也许能更好的理解应用程序表单中的执行顺序。假定测试表单包含 5 个域,从
高到低顺序如下:
 subject : Editable / Text 域(缺省值、输入转换、输入合法值校验公式)
 From :创建时计算/“作者”域(值计算公式)
 Counter :计算。数字域(值计算公式)
 DisplayNum :显示时/数字域(值计算公式)
 Body :可编辑/RTF 域(缺省值公式)
 l ) 表 l 一 11 说明 了 各 种 不 同的 活 动( 如 编写 文 档)以 及 每个 活 动中
LotusScript 事件和 Domino 公式的执行顺序。
编写文档活动执行顺序
对象                                            公式或事件
表单                                            Initialize 事件
表单                                            Window Title
表单                                            Query Open 事件/WebQuery Open 事件
Subject 域                                     Default Value 公式
Subject 域                                     Initialize 事件
From 域                                        Value 公式
From 域                                        Initialize 事件
Counter 域                                     Value 公式
Counter 域                                     Initialize 事件
Body 域                                        Value 公式
Body 域                                        Initialize 事件
Subject 域                                     Entering 事件
表单                                            PostOpen 事件
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                            123
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
2)使用@Command([FileSave])或者文件-保存来保存文档(见下表)
保存文档活动的执行顺序
对象                                            公式或事件
表单                                            Query Save 事件
Subject 域                                     Input Translation 公式
Counter 域                                     Value 公式
DisplayNum 域                                  Value 公式
Subject 域                                     Input Validation 公式
3 )使用@ Command ( [ FileClosewindow ] )或者文件一关闭来关闭窗口(见
表 l 一 13)
               对象                                          公式或事件

表单                              QueryClose 事件/WebQueryClose 事件
表单                              Terminate 事件
Subject 域                       Terminate 事件
From 域                          Terminate 事件
Counter 域                       Terminate 事件
DisplayNum 域                    Terminate 事件
Subject 域                       Terminate 事件
4)在只读状态下再次打开文档(见表 l 一 14 )
                         。
     表 1 一 14 在只读状态下再次打开文档活动的执行顺序
            对象                                     公式或事件
    表单                      Initialize 事件
    表单                      Window Title 公式
    表单                      Query Open 事件/Query Open 事件
    Subject 域               Initialize 事件
    From 域                  Initialize 事件
    Counter 域               Initialize 事件
    DisplayMum 域            Value 公式
    DisplayMum 域            Initialize 事件
    Body 域                  Initialize 事件
    表单                      Postopen 事件
5)当打开文档时,由只读状态转换到编辑状态(见表 1-15)
                            表 1-15 在编辑文档活动的执行顺序
            对象                                 公式或事件
    表单                      QueryModeChange 事件
    Subject 域               Entering 事件(决定于光标)
    表单                      PostModeChange 事件
6)当打开文档时,由编辑状态转换到只读状态(未修改)
                         ,见表 1-16
             表 1-16 在由编辑状态转换到只读状态(未修改)活动的执行顺序
                    对象                         公式或事件
    表单                         QueryModeChange 事件
    表单                         PostModeChange 事件




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                                  124
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
7)当打开文档时,有编辑状态转换到只读状态(保存修改),见表 1-17
     表 1-17 在由编辑状态转换到只读状态活动(保存修改)的执行顺序
对象                     公式或事件
表单                     QueryModeChange 事件
与保存文档顺序相同
表单                     PostModeChange 事件
表单                     QueryClose 事件/QueryClose 事件
与关闭文档顺序相同
与在只读状态下再次打开文档顺序相同
8)将光标从一个可编辑域移到另一个可编辑域,见表 1-18
                        表 1-18 在编辑状态光标移动时的执行顺序
               对象                           公式或事件
           First 域                       Exiting 事件
          Second 域                       Entering 事件
9)在编辑状态下刷新域(F9),见表 1-19
                         表 1-19 在编辑状态刷新域时的执行顺序
               对象                                   公式或事件
Subject 域                      Input Translation 公式
Counter 域                      Value 公式
DisplayNum 域                   Value 公式
Subject 域                      Input Translation 公式
表单                             PostRecalc 事件
( 2 )在复杂例子中的事件顺序图显示了在包含子表单的表单中的事件顺序。

           全局
                      1 Initialize             17 Terminate
                表单
                          2 Initialize       3 Query Open          9 Post
           Open
                          11 QueryClose                       13 Terminate
                域1
                          4 Initialize               8 Entering         14
           Terminate

                   子表单
                   5 Initialize              6 Query Open
                      10 Postopen             12 QueryClose        15
               Terminate
                   域2
                                7 Initialize          16 Terminate




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                               125
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
打开文档时的事件顺序如下:
     l )全局的 Initialize 。
     2 )表单的 Initialize 。
     3 )表单的 Queryopen 。
     4 )域 l 的 Initialize (包含在表单中)
                                。
     5 )子表单的 Initialize 。
     6 )子表单的 Queryopen 。
     7 )域 2 的 Initialize (包含在子表单中)
                                 。
     8 )域 2 的 Entering 。
     9 )表单的 Postopen 。
     10 )子表单的 Postopen 。
关闭文档时的事件列表:
 1 ) Queryclose 表单。
 2 ) Queryclose 子表单。
 3 ) Terminate 表单。
 4 ) Terminate 域 l 。
 5 ) Terminate 子表单。
 6 ) Terminate 域 2 。
 7 ) Terminat 全局。


6.5 DOMION和其他数据库的开发区别
     目前的客户项目中集成性质的越来越多,而且因为 LOTUS 开发人员很多都是
从其他平台转移过来或身兼多职,因此清晰的认识 DOMINO 平台和其他数据库的开
发就变得相当重要了,首先我们看看类似的方面:
(1)Notes 是一个文档型数据库,它的数据是以文档的形式存放的。Access 是一个
   关系型数据库,它的数据是以记录的形式存放。
(2)我们已经知道在每一个文档中有很多域组成,相同结构的文档,它用的是同一
   张表单。在 Access 中有很多记录,相同数量和类型的字段组成了 Access 中的
   表。说得通俗一些,同一张表单中的域的数量是相同的,不同表单的域的数量
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        126
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   是不同的。就相当于在 Access 中同一张表的字段数量和类型是相同的,但不
   同表之间的字段数量和类型是不同的。
(3)表单中的域相当于 Access 中的字段。数据库的文档相当于 Access 中的记录。
   区别:一是我们在 Notes 中通过视图查看文档,只是看到视图中显示了文档的
   部分域,但不表示文档中的其它域不存在或丢失了这个道理,只是文档的一种
   显示方法,这和 Access 不同,Access 将所有的字段都显示不来。但 Notes 只
   是显示你需要的一些字段,其它的域仍然在文档中,只是你暂时不需要用到这
   些域!
           二是我们知道在 Access 中我们建了多少字段就是多少不会多也不会少,
    但在 Notes 是不一样的。在一张表单保存后系统会自动添加一些系统域,这些
    域是每个表单都会存在的,可以说有些是便于查询工作的:比如 Form,这个
    域用来区别是那一张表单还有些其它的系统域,有“$”开头的一些。除了一
    些能直看到的系统域以外,还有一些隐藏的内容,比如文档的唯一标识,这是
    每个文档必须有的,如果你知道这个文档的标识符,你就能找到这个文档,就
    象我们的身份证一样,用来区别不同文档,这是系统自动产生不会重复。
          三是在 Access 中输入数据后直接关闭,系统能够自动保存,但在 Notes
    中是不可以的,你输入数据关闭时系统会提示你是否保存新文档。如果你按不,
    那你所建立的数据将会全部丢失!
          四是在 notes 中我们可以建立多个视图进行查看数据, Access 不可以。
                                      可
          五是 Access 缺省是查看所有字段。但 Notes 缺省是个(无标题)视图,我
    们习惯把它称为($All)视图,它是不可以进行删除的。它的缺省列为在在视图
    中的编号。
         六是在域中只有对域的类型进行规定,没有规定长度(除域是数字类型以
     外)。在 Access 中对各种域的类型长度进行明确规定。
(4)关系和链接
           关系型数据库中有关系,在表和表之间可以建立对应的关系,甚至可以
    保证表之间的强制一致性关联。保证不会有垃圾的记录。 NOTES 中文档与文
    档之间可以通过链接来表示。但是只是松散的链接,如果链接端的文档被删除,
    只能出错。

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        127
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
(5)视图/索引
      相同的是 Notes 中的视图来建立文档的索引,
                             关系型数据库中其实也有 View
用于建立记录的索引,Access 里没有 View,不过有 Query。它们都用来展现具体
的文档/记录,NOTES 可以通过视图来删除文档就象在某些 Query 中删除记录一样。
      不同点:因为没有关系的概念,NOTES 中的视图索引,建立的是一份文档,
Query 则可以针对多表来建立)
                。
(6)表单
     表单只是一张纸,用来填写数据(数据包括 Access 中的记录和 Notes 中的文
档)的工具或窗口,说它是一张纸针对 Notes 来讲更贴切。因为一方面可以做规
定好栏目的表格,用来填写规定的字段(Notes 和 Access 相同);在 Notes 表单这
张纸上还可以“乱涂乱画”(用 RTF 域),Access 中其实也可以做一些乱涂乱画的
事情了,不过要另外拿一张纸(用 MEMO 域嵌 OLE 对象) Notes 因为要支持冲突
                              。
的问题,所以即使是表单,也要保存;而 Access 的表单中可以有 DataSource,这
样在添加记录内容后可以自动保存,其实如果 DataSource 为空,一样要通过程序
去 Save。
(7)记录/文档 虽然可以在表单中规定域类型,但是这只是这张纸上的规定,其实
  Notes 下的文档中的域类型是可以随意变换的(同时也是随意增删的),并且
  Notes 文档中的域支持多值,这个与 Access 大不相同。所以在编写程序的时候,
  一定要有出错处理,HasItem,IsNumeric 等函数的应用会比 Access 大得多。




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        128
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


13.DOMINO-B/S 模式下常见应用功能
开发指南及分析(例程参见随书附赠
的 CHINALOTUSVIPFTP)
13.3 DOMINO与EXECL交互的多种方式
   在 DOMINO 的日常应用中,将数据导出为 EXECL 以便再处理是经常遇见的需求,
那么接着我们就一起看看具体的实现方式有哪些。

1)LS+VBA

   以前在 windows Domino 环境中的 B/S 应用操作 EXCEL,相对来说,比较简单,
只要操作系统上装了 Office 套件,利用 LS+VBA 就可以了。大致代码如下:

   Dim obj As Variant

   Dim apli As Variant

   Set obj = CreateObject("Excel.Application")

   Set apli = obj.Application

   apli.Visible=True

   Dim workb As Variant

   Dim works As Variant

   Set workb= apli.Workbooks.Add()

   Set works = workb.Worksheets(1)

   Call workb.Activate

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        129
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   Call works.Activate

   With works

   .Cells(1,1).Formula="=SUMA(E1:E2)"

   End With

     但是如果在 AIX 上操作的话,没法安装 office 套件,就没有
Excel.Application,不能创建相应的对象。

1) html+print 的方法

     利用用 html+print 的方法可以将输出的信息转化为 excel 文件。

   Print {Content-type:application/vnd.ms-excel}

   Print {Content-Disposition:attachment;filename=excelData.xls}

   Print "Hello, this is the LotusScript web agent. I've been triggered
by the form's WebQuerySave event.<BR>Now the UNID is <P>"

     Print "<TABLE border=1><TR><TD>测试 1 /TD><TD>测试 1</TD></TR>"

     Print "<TR><TD>测试 1</TD><TD>测试 1</TD></TR></TABLE><P>"

   这样就可以直接产生 excel 格式文件。但是在使用的过程中发现 EXCEL 的字符
集选项有时候会有变化,所以需要在代码中将字符集给固定下来。只需要增加一
句就好了。如下:

   Print {Content-type:application/vnd.ms-excel}

   Print {Content-Disposition:attachment;filename=excelData.xls}

   Print {<META HTTP-EQUIV="Content-Type"
CONTENT="text/html;charset=gb2312">}




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        130
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
   Print "Hello, this is the LotusScript web agent. I've been triggered
by the form's WebQuerySave event.<BR>Now the UNID is <P>"

     Print "<TABLE border=1><TR><TD>测试 1 /TD><TD>测试 1</TD></TR>"

     Print "<TR><TD>测试 1</TD><TD>测试 1</TD></TR></TABLE><P>"

3)通过 js,FSO 去操作本地的文件系统

   var fso = new ActiveXObject("Scripting.FileSystemObject");

   var f1 = fso.createtextfile("c:myjstest.xls",true");

4)通过 OFFICE 自带的 excel 控件处理,但受制于 EXECL 的版本

    考虑到性能和目前大多数客户的实际环境,我们接着还是以 LS+VBA 为例子分
析看下我们的 DOMINO 数据是如何跑到 NSF 里去的。
   1)                设计一个后台代理,让它定期自动运行,例如一个礼拜运行一
  次,将这个
         礼拜当中新添加的文档的摘要内容取出来放到一个 Excel 文件里面,然
       后对这个报表进行单元格的自动对齐等操作,最后将这个 Excel 文件以电
       子邮件附件的形式发送到特定的若干地址当中去。
运行这样 的程序, 必须在机器上安装 Excel,这样 LotusScript 才可以操作
Excel。这里,Notes 数据库只需要在一台机器(服务器)上运行即可,也就是说,
只需要在服务器上面装上 Excel 程序就可以了。
      要打开一个 Excel 对象,需要用到 LotusScript 里面的 CreateObject 方
法,这个方法打开一个 OLE 对象,我们可以在方法调用的时候指定对象类型:
xlApp As Variant
'创建一个新的 Excel 应用实例,对应一个 Excel 文件
Set xlApp = CreateObject("Excel.application")
'在这个 Excel 文件当中添加一个 Sheet
xlApp.Workbooks.Add
xlApp.Visible = True

     LotusScript 是一种语法比较松散的脚本语言,类似于 VB,为了避免代码的
逻辑混乱,我们可以利用 LotusScript 里面的面向对象的特性,将处理 Excel 操

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        131
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
作的代码统一写到一个类里面,这样既便于维护,也可以最大程度的避免代码冗
余,提高代码的重用性。
     一 般的 , 我 们用 Script 库 共 享代 码 的方 式 来实 现 一个 类 :在 Domino
Designer 的 “Script 库” 里面点击“新建 LotusScript 库”就可以新建一个
空的共享脚本,我们定名字为 “ExcelUtil”,希望在里面存放所有需要的 Excel
操作代码;然后,我们在(Declarations)方法里面写下全局的类定义如下:
Class ExcelReport
       Private xlApp As Variant
       '其他变量……
       Sub new()
               '创建一个新的 Excel 应用实例,对应一个 Excel 文件
               Set xlApp = CreateObject("Excel.application")
               '在这个 Excel 文件当中添加一个 Sheet
               xlApp.Workbooks.Add
               xlApp.Visible = True
       End Sub

       '其他方法可以往下继续添加……
End Class

      我们可以用类似 Java 的语言思想来看待这段类定义的代码:这个类的名称
叫做 ExcelReport,意为一个类的实例对应于一个 Excel 文件,其中私有的变量
xlApp 对应 Excel 文件,构造函数 new() 则实现了 Excel 对象和 Sheet 的初
始化。我们以后更多的操作方法可以追加在后面,实现更多的功能。
      有了这个共享的类,我们就可以考虑实现业务逻辑了。在 Domino Designer
的“代理”里面,按照本文 前面提到的 方式,我们创建一个简单的 代理
“ReportGenerator”,然后,在(Options)方法里面,我们引入那个共享的类:
Use "ExcelUtil"

这 样就 可 以 在这 个 代理 里 面使 用 共 享的 ExcelReport 类了 。 随后, 我 们在
Initialize 方法里面通过 ExcelUtil 里面的类定义并初始化一个 Excel 对象:
'定义 ExcelReport 类的实例,表示一个 Excel 对象
Dim report As ExcelReport

'调用构造函数,初始化
Set report = New ExcelReport
操作 Excel 对象
     对 Excel 对象的 简 单操作 主要是 通 过调用上 述 ExcelReport 类当 中的
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        132
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
xlApp 变量的特定方法来实现的。
     我们都知道,Excel 文件的基本数据单元就是一个个的“单元格”,由于所
有单元格默认都是为空且存在的,所以对单元格没有“添加”和“删除”操作(要
删除一个单元格的内容,只要写入一个空字符串即可)。所以,简单说来,操作
Excel 文件,就是对单元格的定位与读写,而不是“增删改”模式。要定位一个
单元格,只要知道 “sheet”、“row” 和 “column” 三个参数就可以了;而
简单说来,单元格的内容可以统一认为是一个字符串。下面的函数实现了对一个
单元格的读写:
Function insertData(intSheet As Integer,row As Integer,column As
Integer,value As String)
       '1.定位单元格,在第一个 Excel 文件的第 intSheet 个(从 1 开始)
       ' sheet 里面的行列号为 row 和 column 的单元格
       '2.用字符串 value 来填充单元格
       xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row ,
column ).Value = value
End Function

Function getData( intSheet As Integer , row As Integer , column As Integer )
As String
       '得到第一个 Excel 文件的第 intSheet 个(从 1 开始)sheet 里面的行列号
为 row 和 column 的单元格的值
       getData = xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row ,
column ).Value
End Function

     上述代码很简单,仅仅调用了一句 xlApp 对应 OLE 对象的方法就实现了定
位与读写。当然,我们还需要对以上方法添加错误处理代码,具体关于错误处理
的内容介绍超出了本文的范围,请参考 LotusScript 的相关资料。
     此外,我们应该注意到,通过上述方法创建的 Excel 对象还是在内存当中的,
并没有保存为文件,我们需要添加一个保存文件的方法 “saveFile” 来保存它。
最后,我们还应该为这个 ExcelReport 类实现一个退出的方法 “doQuit”,用
来关闭和释放 Excel 对象的资源。
这样,我们就得到了如下完整的 ExcelReport 类:
Class ExcelReport
       Private xlApp As Variant

          Sub new()
                 '创建一个新的 Excel 应用实例,对应一个 Excel 文件
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        133
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                    Set xlApp = CreateObject("Excel.application")
                    '在这个 Excel 文件当中添加一个 Sheet
                    xlApp.Workbooks.Add
                    xlApp.Visible = True
          End Sub

          Function saveFile(strFilePath As String)
                 '保存 Excel 文件到硬盘指定位置
                 xlApp.ActiveWorkbook.SaveAs( strFilePath )
          End Function

       Function insertData(intSheet As Integer,row As Integer,column
As Integer,value As String)
              On Error Goto err_hdl
              '1.定位单元格,在第一个 Excel 文件的第 intSheet 个(从 1 开始)
sheet 里面的
              ' 行列号为 row 和 column 的单元格
              '2.用字符串 value 来填充单元格
              xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row ,
column ).Value = value
              Exit Function
err_hdl:
              Print Error$ + "in cls: ExcelReport , method: insertData ,
at line " + Cstr( Erl )
              Exit Function
       End Function

       Function getData( intSheet As Integer , row As Integer , column
As Integer ) As String
              On Error Goto err_hdl
              '得到第一个 Excel 文件的第 intSheet 个(从 1 开始)sheet 里面
的行列号为 row 和 column 的单元格的值
              getData =
xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row , column ).Value
              Exit Function
err_hdl:
              Print Error$ + "in cls: ExcelReport , method: getData ,
at line " + Cstr( Erl )
              getData = ""
              Exit Function
       End Function

          Function doQuit
                 '关闭资源
                 xlApp.Quit
                 '资源释放
                 Set xlApp = Nothing
          End Function
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        134
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科


End Class

业务逻辑实现
      在业务逻辑方面,首先,我们需要在这个 Notes 数据库里面新建一个视图
(NotesView)
          ,名为 “byTime”,按照文档的创建时间从晚到早的排序所有的文
档,这个视图的创建很简单,不用任何代码;随后,我们可以借助这个视图来得
到按照创建时间排序的文档(NotesDocument),从最近的文件开始遍历,对所有
一周以内创建的文档进行处理,将它们的内容写入新建好的 Excel 对象的对应单
元格;完成以后将这个文件保存在硬盘,然后发送给指定的地址列表当中;最后
在 本地 删 除 这个 文 件。 这 个简 单 业 务逻 辑的代 码 如 下( 关 于 NotesView 和
NotesDocument 的概念和具体用法请参考相关资料):
Sub   Initialize

          '定义 ExcelReport 类的实例,表示一个 Excel 对象
          Dim report As ExcelReport
          Dim session As New NotesSession
          Dim db As NotesDatabase
          Dim view As NotesView
          Dim doc As NotesDocument
          Dim iRow As Integer
          Dim author As String

          '调用构造函数,初始化
          Set report = New ExcelReport

          '写入    Excel 标题行(第一行)
          Call   report.insertData(1,1,1,"创建时间")
          Call   report.insertData(1,1,2,"题目")
          Call   report.insertData(1,1,3,"作者")

          '得到按照日期排序的视图
          Set db = session.CurrentDatabase
          Set view = db.GetView("byTime")

          Set doc = view.GetFirstDocument
          iRow = 2

          While Not(doc Is Nothing)
                 '按照创建日期排序,处理一周以内的所有文档
                 If (doc.Created > Today-7 ) Then
                        '用 Cstr 函数转换时间到字符串

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        135
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
                      Call
report.insertData(1,iRow,1,Cstr(doc.Created))
                      'GetItemValue 返回的是一个字符串数组,我们要其中的第
一个
                      Call
report.insertData(1,iRow,2,doc.GetItemValue("Subject")(0))
                      '从 From 当中得到作者名字,然后转成简称
                      author = doc.GetItemValue("From")(0)
                      Call
report.insertData(1,iRow,3,session.CreateName(author).Abbreviated)
                      '找到下一个文档
                      Set doc = view.GetNextDocument(doc)
                      iRow = iRow + 1
              Else
                      '发现不是本周内的文档,退出循环
                      Goto BreakLoop
              End If
              Set doc = view.GetNextDocument(doc)
       Wend
BreakLoop:

       '保存文件
       Call report.saveFile ("C:Docs Report This Week.xls")
       '释放资源
       Call report.doQuit
       '发送邮件
       Call   SendMail("Rui R Hu/China/IBM","C:Docs Report This
Week.xls")
       '还可以发送更多地址......

          '删除本地文件
          Kill "C:Docs Report This Week.xls"
End Sub
用邮件发送报表
     其中,代码用到了一个自定义的方法 “SendMail”,它可以向一个地址发送
一封带附件的邮件,两个参数分别是收件人地址和附件文件地址。代码如下


Sub SendMail(target As String,attachment As String)
       Dim session As New NotesSession
       Dim db As NotesDatabase
       Dim doc As NotesDocument
       Dim ritme As NotesRichTextItem

          Set db = session.CurrentDatabase
          Set doc = New NotesDocument( db )
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        136
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
          doc.Form = "Memo"
          doc.SendTo = target
          doc.Subject = "Here's the document you wanted"
          Set ritem = doc.CreateRichTextItem("Attachment")
          ritem.EmbedObject EMBED_ATTACHMENT, "", attachment
          Call doc.Send( False )
End Sub



设置自动运行
     写好了代码,我们就可以让这个代理运行了,不同于本文前面提到的简单例
子,这里,我们希望让这个代理在每周五下午运行,生成一周的报表发送给一些
收件人,设置如下图所示:




这样,每周五下午,相关收件人就会收到一封信,其中的附件就是一个 Excel 报
表,如下图所示:




用 Excel 宏取得更多操作代码
     读者一定对上图当中的 Excel 报告很不满意,因为这个 Excel 报表格式很
难看,需要读者手工在每一列的分界处双击一下,来对齐单元格内容。有没有办
法可以自动实现这个烦人的操作呢?
     答案当然是肯定的,而且我们可以不用参考任何书籍或者资料就开发出需要
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        137
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
的代码。 一般地,关于 Excel 报表的更多操作,我们可以通过翻阅参考资料来
学习更多功能代码的实现方法,就如同其他技术的学习一样。不过,现在我们有
另一种更加方便、巧妙和快速的方法可以得到我们需要的操作代码,那就是利用
Excel 的宏。在相关参考资料不太充足的情况下,这个方法尤为有用。
我们就拿当前需要的“对齐单元格”的需求为例子,看看如何用宏来取得代码。
如下图所示:




     首先,我们打开 Excel 程序,新建一个文件,点击“工具”-“宏”-“录制
新宏”,开始录制新的宏。
     然后,我们只要简单的在 B 列和 C 列中间双击一下对其单元格,就可以按
“停止录制”的按钮以停止录制了。
     最后,我们打开“工具”-“宏”-“Visual Basic 编辑器”,见到在“模块
1”当中,有一个 VBA 的函数。这个函数正是我们刚才录制的宏操作,当中只有
一句代码,就是对其单元格的代码。
     这样,我们就取得了这个操作的 VBA 代码。在 “ExcelReport” 类当中,
我们“照葫芦画瓢”地添加这个功能的方法如下:
'对齐单元格,col 表示列名称,接受 “A” “B” 等列名
Function autoFit(intSheet As Integer, col As String)
       xlApp.Workbooks(1).Worksheets(intSheet).Columns(col+":"+col).
EntireColumn.AutoFit
End Function

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        138
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
在业务逻辑代码里面,我们在数据全部填好以后,加上以下三句话,就可以自动
对齐单元格了:
Call report.autoFit(1,"A")
Call report.autoFit(1,"B")
Call report.autoFit(1,"C")

     这样,我们就可以得到格式整齐的 Excel 报表了。更重要的是,我们也了解
了,如果我们想要在我们的代码当中实现一个 Excel 的高级功能,只要简单地用
宏来录制相关操作,得到相应的 VBA 代码,就可以快速地在 “ExcelReport” 类
里面添加相应的方法了。
调试代码
     有了宏的录制,我们就可以“挖掘”更加丰富的 Excel 高级功能了,不过,
这种“照葫芦画瓢”的代码生成方式也不是非常的可靠,可能出错,这时,代码
的调试就可以发挥作用了。
     同很多语言开发平台一样,Lotus Domino Designer 也支持 LotusScript 等
语言的调试功能。调试的具体用法很简单:首先,在 Lotus Notes 当中将“文
件”-“工具”-“调试 LotusScript” 勾上,开始调试模式。然后,在 Notes 当
中执行任何 LotusScript 代码都会进入调试模式。在调试模式当中,我们可以单
步前进、用双击的方法设置断点、观察变量等等。一切调试功能都类似于一般的
高级语言一样,主要的区别就在于,调试一定是从运行的第一句代码开始停顿,
断点只能在调试模式才可以设置。




2)以上是后台定期导出的例子,接着我们看看如何在前台执行一个操作时间将指

 定视图数据导为一个标准的 EXECL 文件,后续的如格式处理等操作仍可参考例一
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        139
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
具体例程如下:

Sub Initialize

    On Error Goto ErrorRoutine

    Dim doc As notesdocument

    Dim cdoc As notesdocument

    Dim view As notesview

    Dim session As New notessession

    Dim db As notesdatabase

    Dim Num As Integer

    Dim NewNum As Integer

    Dim exapp As Variant

    Dim workbook As Variant

    Dim worksheet As Variant



    Dim Readerstr As String

    Dim Stautsstr As String

    Dim bodyitem As NotesRichTextItem

    Dim ReCommenditem As NotesRichTextItem



    Set db=session.currentdatabase

    Set cdoc=session.documentcontext



    Forall v In cdoc.Reader

         Readerstr =Readerstr+v+" "

    End Forall
WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        140
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
    If cdoc.Stauts(0) = "1" Then

          Stautsstr = "已完成"

    Else

          Stautsstr = "未完成"

    End If

    Set bodyitem = cdoc.GetFirstItem("station")

    Set ReCommenditem = cdoc.GetFirstItem("ReCommend")



    Dim tempstr As String

    'tempstr = ReCommenditem.text

    'Print ReCommenditem.text

'%REM

    Dim temp As String

    Dim bodystr As String

    Dim i As Double

    temp = ReCommenditem.GetFormattedText(False,0)

    bodystr=temp

    '/替换 chr$(13)

    i=1

    While i>0

          i=Instr(i+1,temp,Chr$(13),5)

          If i>0 Then

             bodystr=Left$(temp,i-1)+","

             bodystr=bodystr+Right$(temp,Len(temp)-i)

             temp=bodystr

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        141
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
          End If

    Wend

    '/替换 chr$(10)

    i=1

    While i>0

          i=Instr(i+1,temp,Chr$(10),5)

          If i>0 Then

             bodystr=Left$(temp,i-1)+","

             bodystr=bodystr+Right$(temp,Len(temp)-i)

             temp=bodystr

          End If

    Wend

'%END REM



    '/定义 excel 变量

    Print |<script>|

    Print |var exapp = new ActiveXObject("Excel.Application");|



    Print |if (exapp!=null){|

    Print |exapp.statusbar ="正在创建工作表,请稍等……";|

    Print |exapp.visible=true;|

    Print |exapp.ScreenUpdating=true;|

    Print |var workbook=exapp.workbooks.add;|

    Print |var worksheet =exapp.workbooks(1).worksheets(1);|

    Print |exapp.caption ="正在将当前日程安排导出为EXCEL表" |

WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        142
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科



    Print |exapp.cells(1,1)="主题";|

    Print |exapp.cells(1,2)="| +cdoc.Subject(0)+ |";|



    Print |exapp.cells(2,1)="任务参与者";|

    Print |exapp.cells(2,2)="| +Readerstr+ |";|



    Print |exapp.cells(3,1)="任务安排者";|

    Print |exapp.cells(3,2)="| +cdoc.AddName(0)+ |";|



    Print |exapp.cells(4,1)="时间";|

    Print |exapp.cells(4,2)="| +cdoc.sDate(0)+|--|+cdoc.eDate(0)+ |";|



    Print |exapp.cells(5,1)="状态";|

    Print |exapp.cells(5,2)="| +Stautsstr+ |";|



    Print |exapp.cells(6,1)="安排描述";|

    Print |exapp.cells(6,2)="| +bodyitem.GetFormattedText(False,0)+ |";|



    Print |exapp.cells(7,1)="备注";|

    'Print |exapp.cells(7,2)="| +ReCommenditem.GetFormattedText(True,0)+
|";|

    Print |exapp.cells(7,2)="| +bodystr+ |";|



    Print | exapp.worksheets(1).pagesetup.orientation =2;|


WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                        143
IBM 官方推荐用书-CHINALOTUS 之 DOMINO7 开发大百科
    Print      |                     exapp.worksheets(1).pagesetup.centerheader
="report_confidential";|

    Print      |              exapp.worksheets(1).pagesetup.rightfooter
="page&P"|&Chr$(13)&|"Date:&D";|

    Print | exapp.worksheets(1).pagesetup.centerFooter="";|

    Print | exapp.statusbar ="数据导入成功";|

    Print | }</script>|



    'Print "["+db.FilePath+"/0/"+cdoc.UniversalID+"?OpenDocument]"

    Exit Sub

ErrorRoutine:

    Msgbox "Error:" & Str(Erl) & " " & Error

End Sub




WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com
TEL:86-0731-5817822 FAX:5159795-608                          144

最终Chinalotus之Domion7开发大百科简体尝试版

  • 1.
    IBM 官 方推 荐 用 书 -CHINALOTUS 之 DOMINO7 开发大百科 目前本書有简、繁双體版本,管理篇人民币 166 元 20 万余字,开发篇人民币 199 元 20 万余 字,量多优惠。详情请参考如下网址! http://bbs.chinalotus.com/viewthread.php?tid=23913&extra=page%3D1&page=1 本书是笔者在 DOMINO 开发管理领域多年经验结合 CHINALOTUS 十年资源汇集而成的一本 LOTUS 开发管理入门提高之书,编写原因一是工作日久,想总结的心愿也愈见浓厚,再加看到 市面上复制帮助之途类书籍的为祸不浅。因此笔者根据日常工作心得,结合实际的产品及项 目开发经验基于 DOMINO7 编写了这套丛书,希望能给入门的朋友带来一盏指路的明灯;为资 深的同行带来一点新的启发,思想的共鸣! 本套丛书的特点是,全套 DOMINO 知识是由浅而深;提供大量图文并茂的实例;并随书附 送不断更新价值人民币 150 元 CHINALOTUSVIPFTP,具有大量优秀例程、正版开发工具以及开 发管理资料;还通过 QQ 读书群 5217694 为读者提供永久免费修正升级以及讲解支持。 因为是专业的 LOTUS 技术书籍,销量有限导致成本较高,DOMINO 确实是个被市场证明的 优秀的群件平台,只是大家都知道的一些原因,只能努其不争,因此欢迎大家团购节省费用。 目前通过各大 LOTUS 技术门户与联盟书店热销中, 购买或咨询方式:QQ:59637733;QQ:441097519 EMAIL:cndragonws@hotmail.com 电话: 86-0731-5817822;5159795 联系人:林小姐 L OTU S 中 文 网 ChinaLotus Software Co., Ltd. ComBestsoft Confidential
  • 2.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 目 录 1.写在前面....................................................................................................................................... 7 2.LOTUS/DOMINO 起源、家族组成 ................................................................................................... 9 2.1 LOTUS/DOMION 的起源 ........................................................................................................... 9 2.2 LOTUS/DOMION 所支持平台及家族组成............................................................................. 11 3.LOTUS/DOMINO 与现有流行平台的对比分析 ............................................................................ 14 3.1 LOTUS/DOMINO 与 MICROSOFT/EXCHANGE 的比较 ......................................................................... 18 3.2 LOTUS/DOMINO 与 JAVA 系统的比较 ...................................................................................... 19 4.LOTUS DESIGNER 7 的主要新功能(整理至 IBM 官方正式红皮书)............. 错误!未定义书签。 4.1 更直观的所见既所得的编辑...................................................................错误!未定义书签。 4.2 对 DB2 的集中支持 ..................................................................................错误!未定义书签。 4.3 对 WEB SERVICES 的集中支持 .....................................................................错误!未定义书签。 4.4 新增的可编程性......................................................................................错误!未定义书签。 4.5 其他应用程序开发改进 ..........................................................................错误!未定义书签。 4.6 用户界面 .................................................................................................错误!未定义书签。 4.6.1 新的设计元素导航器.........................................................................错误!未定义书签。 4.6.2 书签 ...................................................................................................错误!未定义书签。 4.6.3 自定义设计元素文件夹.....................................................................错误!未定义书签。 4.6.4 快速滚动 ..........................................................................................错误!未定义书签。 4.6.5 加/减指示器 ....................................................................................错误!未定义书签。 4.6.6 设计元素视图的新特性 ...................................................................错误!未定义书签。 4.6.7 为多个元素修改属性 .......................................................................错误!未定义书签。 4.6.8 设计元素的锁定...............................................................................错误!未定义书签。 4.6.9 打印增强 ..........................................................................................错误!未定义书签。 4.6.10 底纹 .................................................................................................错误!未定义书签。 4.7 设计大纲的新特性 ..................................................................................错误!未定义书签。 4.8 新的设计元素..........................................................................................错误!未定义书签。 4.8.1 共享资源 ..........................................................................................错误!未定义书签。 4.8.2 样式单 ...............................................................................................错误!未定义书签。 4.8.3 数据连接 ...........................................................................................错误!未定义书签。 4.8.4 共享代码 ...........................................................................................错误!未定义书签。 4.9 改良的事件模式......................................................................................错误!未定义书签。 4.9.1 以代码为目标 ....................................................................................错误!未定义书签。 4.9.2 被删除的事件 ..................................................................................错误!未定义书签。 4.9.3 推荐事件 ..........................................................................................错误!未定义书签。 4.9.4 新的事件 ..........................................................................................错误!未定义书签。 4.9.5 增强的公式........................................................................................错误!未定义书签。 4.9.6 新的 @函数 ........................................................................................错误!未定义书签。 4.9.7 新的命令 ...........................................................................................错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 1
  • 3.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 4.9.8 增强的循环........................................................................................错误!未定义书签。 4.9.9 LOTUSSCRIP 的变化 ...........................................................................错误!未定义书签。 4.9.9.1 新类的用法 .........................................................................................错误!未定义书签。 4.9.9.2 远程调试器 .........................................................................................错误!未定义书签。 4.9.9.3 重新编译所有脚本..............................................................................错误!未定义书签。 4.9.9.4 针对 Java 的 LotusScript(LS2J).....................................................错误!未定义书签。 4.9.9.5 LotusScript 增强的函数..................................................................错误!未定义书签。 4.9.10 自动完成..........................................................................................错误!未定义书签。 4.9.11 代理增强..........................................................................................错误!未定义书签。 4.9.11.1 新的用户界面....................................................................................错误!未定义书签。 4.9.11.2 代理限制列表....................................................................................错误!未定义书签。 4.9.11.3 访问远程服务器................................................................................错误!未定义书签。 4.9.11.4 代表运行...........................................................................................错误!未定义书签。 4.9.11.5 脚本库...............................................................................................错误!未定义书签。 4.9.11.6 用户激活...........................................................................................错误!未定义书签。 4.9.11.7 代理安全...........................................................................................错误!未定义书签。 4.9.11.8 转换共享和私有的代理.....................................................................错误!未定义书签。 4.9.11.9 新的控制台命令................................................................................错误!未定义书签。 4.9.12 HTML 增强.........................................................................................错误!未定义书签。 4.9.13 新的界面设计元素-层.....................................................................错误!未定义书签。 4.9.14 新的概要增强 ..................................................................................错误!未定义书签。 4.9.15 新的操作增强 ..................................................................................错误!未定义书签。 4.9.16 视图增强..........................................................................................错误!未定义书签。 4.9.17 上下文相关的操作 ..........................................................................错误!未定义书签。 4.9.18 字段增强..........................................................................................错误!未定义书签。 4.9.19 窗体增强..........................................................................................错误!未定义书签。 4.9.20 段落增强..........................................................................................错误!未定义书签。 4.9.20.1 语言标识符 .......................................................................................错误!未定义书签。 4.9.20.2 段落边框...........................................................................................错误!未定义书签。 4.9.20.3 新的区域样式....................................................................................错误!未定义书签。 4.9.21 嵌入元素的增强 ..............................................................................错误!未定义书签。 4.9.21.1 改进的操作条支持和增强样式 .........................................................错误!未定义书签。 4.9.21.2 横跨数据库引用................................................................................错误!未定义书签。 4.9.21.3 页面或者窗体上的多个嵌入视图......................................................错误!未定义书签。 4.9.21.4 在嵌入视图中删除文档.....................................................................错误!未定义书签。 4.9.22 表的增强..........................................................................................错误!未定义书签。 4.9.22.1 自动调整宽度适应内容.....................................................................错误!未定义书签。 4.9.22.2 新的选项...........................................................................................错误!未定义书签。 4.9.22.3 标题样式...........................................................................................错误!未定义书签。 4.9.23 框架增强..........................................................................................错误!未定义书签。 4.9.24 工具菜单..........................................................................................错误!未定义书签。 4.9.24.1 添加一个工具....................................................................................错误!未定义书签。 4.9.24.2 定制你的工具....................................................................................错误!未定义书签。 4.9.24.3 DXL 实用程序 ....................................................................................错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 2
  • 4.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 4.9.25 URL 增强 ..........................................................................................错误!未定义书签。 4.9.26 增强的 WEBDAV .................................................................................错误!未定义书签。 5.DOMINO 与面向对象技术................................................................................. 错误!未定义书签。 5.1 面向对象技术的基本特征.......................................................................错误!未定义书签。 5.2 面向对象方法的重要特征.......................................................................错误!未定义书签。 5.3 DOMINO 如何体现面向对象的设计.......................................................错误!未定义书签。 5.3.1 简单操作 ...........................................................................................错误!未定义书签。 5.3.2 公式语言 ...........................................................................................错误!未定义书签。 5.3.3 LOTUS SCRIPT ........................................................................................错误!未定义书签。 6.DOMINO 主要开发技术分析及编码优化指南 ............................................................................ 22 6.1 DOMINO 支持的主要开放标准 ........................................................................................ 22 6.2 DOMINO 支持的主要开发语言及方式 ............................................................................. 24 6.2.1 DOMINO OBJECT MODEL(DOM)类........................................................................................ 24 6.2.2 LOTUSSCRIPT .............................................................................................................. 28 6.2.3 公式语言 ..................................................................................................................... 37 6.2.3.1 什么是公式语言............................................................................................................ 37 6.2.3.2 不同的应用范围............................................................................................................ 47 6.2.3.3 应用公式语言中的相关分析......................................................................................... 58 6.2.4 JAVASCRIPT.................................................................................................................. 76 6.2.5 HTML&CSS ..................................................................................................................... 87 6.2.6 JAVA .............................................................................................................................. 89 6.2.6.1 什么是 JAVA .................................................................................................................. 89 6.2.6.2 是否应该立即在 Domino 中应用 Java 呢? ................................................................ 90 6.2.6.3 DOMINO 对象模型对 JAVA 的支持 .................................................................................. 90 6.2.7 JAVASERVERLET ................................................................................................................ 93 6.2.8 LOTUS/DOMINO-API ...................................................................................................102 6.2.9 DOMINO-WEBSERVICES................................................................................................103 6.2.10 XML ..........................................................................................................................104 6.3 如何优化我们的编码 .....................................................................................................110 6.3.1 公式语言的优化 .......................................................................................................110 6.3.2 脚本语言优化 ...........................................................................................................111 6.3.3 JAVA & JAVASCRIPTINO 应用程序优化 ..........................................................................116 6.3.4 DOMINO 对象模型优化...............................................................................................117 6.3.5 最大限度重用对象 ...................................................................................................118 6.4 如何在不同应用中选择合适的编码语言 .......................................................................119 6.4.1 使用公式和 LOTUSSCRIPT 的前提.............................................................................121 6.4.2 执行 LOTUSSCRIPT 和公式顺序分析 .......................................................................123 6.5 DOMION 和其他数据库的开发区别..............................................................................126 7.LOTUS/DESIGNER 综合分析 ............................................................................. 错误!未定义书签。 7.1 帧结构集 .................................................................................................错误!未定义书签。 7.2 页面.........................................................................................................错误!未定义书签。 7.3 主表单 .....................................................................................................错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 3
  • 5.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 7.4 视图.........................................................................................................错误!未定义书签。 7.5 文件夹 .....................................................................................................错误!未定义书签。 7.6 共享代码 .................................................................................................错误!未定义书签。 7.6.1 代理 ...................................................................................................错误!未定义书签。 7.6.2 WEB 服务 ............................................................................................错误!未定义书签。 7.6.3 大纲 ...................................................................................................错误!未定义书签。 7.6.4 子表单 ...............................................................................................错误!未定义书签。 7.6.5 共享域 ...............................................................................................错误!未定义书签。 7.6.6 自动化组件........................................................................................错误!未定义书签。 7.6.7 共享操作 ...........................................................................................错误!未定义书签。 7.6.8 SCRIPT 库 ..........................................................................................错误!未定义书签。 7.6.9 导航器 ...............................................................................................错误!未定义书签。 7.6.10 层 .....................................................................................................错误!未定义书签。 7.6.11 DXL..................................................................................................错误!未定义书签。 8.已知开发限制................................................................................................. 错误!未定义书签。 8.1 已知开发限制..........................................................................................错误!未定义书签。 8.2 WEB 开发不支持特性 ...........................................................................错误!未定义书签。 8.2.1 不支持范围........................................................................................错误!未定义书签。 8.2.2 视图小程序不支持的特性 .................................................................错误!未定义书签。 8.2.3 WEB 不支持的 DOMINO 操作和代理属性 ..............................................错误!未定义书签。 8.2.4 WEB 不支持的 DOMINO 日历特性........................................................错误!未定义书签。 8.2.5 WEB 不支持的 DOMINO 域属性............................................................错误!未定义书签。 8.2.6 WEB 不支持的 DOMINO 表单属性........................................................错误!未定义书签。 8.2.7 WEB 不支持的 DOMINO 格式特性........................................................错误!未定义书签。 8.2.8 WEB 不支持的 DOMINO 帧结构属性 ....................................................错误!未定义书签。 8.2.9 WEB 不支持的水平基准线属性 .........................................................错误!未定义书签。 8.2.10 WEB 不支持的 DOMINO 热点属性 .......................................................错误!未定义书签。 8.2.11 WEB 不支持的 DOMINO 导航器属性....................................................错误!未定义书签。 8.2.12 WEB 不支持的 DOMINO 表格属性 .......................................................错误!未定义书签。 8.2.13 WEB 不支持的 DOMINO 文本样式 ......................................................错误!未定义书签。 8.2.14 WEB 不支持的 DOMINO 视图属性.......................................................错误!未定义书签。 9.DOMINO 独有的内置对象支持分析.................................................................. 错误!未定义书签。 9.1 内置变量 .................................................................................................错误!未定义书签。 9.2 内置表单 .................................................................................................错误!未定义书签。 9.3 内置域 .....................................................................................................错误!未定义书签。 10.DOMINO 特有的 URL 开发详细分析................................................................ 错误!未定义书签。 10.1 概述.......................................................................................................错误!未定义书签。 10.2 服务器、数据库和视图.........................................................................错误!未定义书签。 10.3 帧结构 ...................................................................................................错误!未定义书签。 10.4 代理、表单和导航器 ............................................................................错误!未定义书签。 10.5 打开资源 ...............................................................................................错误!未定义书签。 10.6 增加、删除、编辑、打开和保存文档..................................................错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 4
  • 6.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 10.7 在 URL 命令中通过 KEY 打开指定文档..............................................错误!未定义书签。 10.8 页面.......................................................................................................错误!未定义书签。 10.9 附件、图形和 OLE 对象.......................................................................错误!未定义书签。 10.10 搜索文本 .............................................................................................错误!未定义书签。 10.11 通过 START 和 COUNT 参数使用前后页按钮或热点........................错误!未定义书签。 10.12 验证必须的 URL 命令.........................................................................错误!未定义书签。 10.13 处理 SSL 验证 .....................................................................................错误!未定义书签。 10.14 在 WEB 应用程序中设置用户首选项 .................................................错误!未定义书签。 10.15 单一数据库中管理多语言输入 ...........................................................错误!未定义书签。 11.DOMINO-CGI 开发支持分析 ........................................................................... 错误!未定义书签。 12.一个复杂的 B/S 公告管理系统详细开发实例分析 ...................................... 错误!未定义书签。 12.1 需求调查 ...............................................................................................错误!未定义书签。 12.2 详细设计建议及要点实例分析 .............................................................错误!未定义书签。 12.3 开发流程建议........................................................................................错误!未定义书签。 12.4 应用开发 ...............................................................................................错误!未定义书签。 12.4.1 录入表单设计及要点详细分析 .......................................................错误!未定义书签。 12.4.1.1 录入表单的隐藏域及关联对象作用..................................................错误!未定义书签。 12.4.1.2 公告的类型获取..............................................................................错误!未定义书签。 12.4.1.3 公告的有效保留时间及结合 JS 实现日历选择 .............................错误!未定义书签。 12.4.1.4 多附件的实现..................................................................................错误!未定义书签。 12.4.1.5 JS 图文混排编辑器的集成..............................................................错误!未定义书签。 12.4.1.6 面向其他系统的数据同步 .............................................................错误!未定义书签。 12.4.2 通过 HTML 更好的美化和解析视图数据 ..........................................错误!未定义书签。 12.4.2.1 利用 HTML 使视图显示数据更美观....................................................错误!未定义书签。 12.4.2.2 数据的选择以及删除控制.................................................................错误!未定义书签。 12.4.3 实现可自定义条件的数据查询表单 ................................................错误!未定义书签。 13.DOMINO-B/S 模式下常见应用功能开发指南及分析(例程参见随书附赠的 CHINALOTUSVIPFTP) ................................................................................................................................................... 129 13.1 多用户登陆邮件系统 ............................................................................错误!未定义书签。 13.2 结合 AJAX 实现在线感知及消息交互..................................................错误!未定义书签。 13.2.1 我们通过 AJAX 实现在线感知的目标 ..............................................错误!未定义书签。 13.2.2 实现的具体步骤实例分析 ...............................................................错误!未定义书签。 13.3 DOMINO 与 EXECL 交互的多种方式 .........................................................................129 13.4 在 DOMION 中开发多语种的应用程序 ...............................................错误!未定义书签。 14.DOMINO-B/S 模式下应用系统高级开发指南及分析 ..................................... 错误!未定义书签。 14.1 利用 ERWIN 和 NOTESSQL 设计 DOMINO ...........................................错误!未定义书签。 14.2 在 DOMINO 中提供 RSS 服务 ............................................................错误!未定义书签。 14.3 有效利用 DOMINO/NOTES 缓存机制.....................................................错误!未定义书签。 14.4 用 DREAMWEVER 开发 DOMINO 应用 .............................................错误!未定义书签。 14.5 利用 APACHE COCOON 动态的转换 DOMINO 文档到 PDF 及 JPG .......错误!未定义书签。 15.系统集成开发实例分析................................................................................ 错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 5
  • 7.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 15.1 DOMINO 利用 ODBC 和关系型数据库的交互.....................................错误!未定义书签。 15.2 DOMINO-DB2 .......................................................................................错误!未定义书签。 15.3 DOMINO 与 SAP 的集成开发 ...............................................................错误!未定义书签。 15.4 基于 DOMINO 以 WEBSERVICES 的形式提供跨平台的数据交互 ....错误!未定义书签。 15.4.1 创建 WEB 服务 ..................................................................................错误!未定义书签。 15.4.2 调用和测试 WEB 服务.......................................................................错误!未定义书签。 16.DOMINO 应用程序开发安全性分析................................................................ 错误!未定义书签。 16.1 基于 ACL 的安全控制 ..........................................................................错误!未定义书签。 16.2 基于文档存取的安全控制.....................................................................错误!未定义书签。 16.3 基于域的安全控制 ................................................................................错误!未定义书签。 16.4 基于代理的安全控制 ............................................................................错误!未定义书签。 17. DOMINO 开发中的设计规范建议.................................................................. 错误!未定义书签。 17.1 注释规则及功能注释 ............................................................................错误!未定义书签。 17.2 设计元素命名规则 ................................................................................错误!未定义书签。 17.3 变量定义规则........................................................................................错误!未定义书签。 17.4 类定义规则 ...........................................................................................错误!未定义书签。 17.5 错误处理规则........................................................................................错误!未定义书签。 17.6 JAVASCRIPT 部份编码规范 ....................................................................... 错误!未定义书签。 17.6.1 异常处理..........................................................................................错误!未定义书签。 17.6.2 变量命名..........................................................................................错误!未定义书签。 17.6.3 代码风格..........................................................................................错误!未定义书签。 18.DOMINO 常见开发管理问题汇总.................................................................... 错误!未定义书签。 19.优秀 LOTUS 技术门户和公司推荐................................................................. 错误!未定义书签。 19.1 LOTUS 优秀技术开发公司推荐 ................................................................错误!未定义书签。 19.2 LOTUS 优秀技术门户推荐........................................................................错误!未定义书签。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 6
  • 8.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 1.写在前面 窗外天光微明,忙碌的一天又将开始。。。 。。。 拖着疲惫的身躯,写下这篇序,终于将本书告一段落了!一个许久的心愿也 将圆满。还记得当初决定写这本书的起因,实在是个压抑已久的心愿。 开始的时候心怀万般喜悦,满以为会在充满回忆的欣慰下写下这篇序,而没 料到是在连续奋斗了月余,基本没完整享受过睡眠美味的今晨,努力的眯着双眼、 敲着自己心爱的小黑完成这个宏愿。但此时该有很多同行也在享受同样的待遇, IT,挨踢,笑。。 。。ASP、DOMINO、.NET、JAVA 及即将而来的更多的后来者,将协 作这个世界吵得好不热闹,但对笔者来说,一切似乎都是昨天。而协作-回归本然 之美的时刻才是自己期待的欣慰。经过 ASP 的启蒙、经过.NET 的新鲜、还有对 JAVA 的仔细思考之后,还是感觉让自己爱恨交加的 DOMINO 最好,虽几经差点放弃。。。 。。 技术要想之能成,巧匠要想成大家,抛却名利的静心真少不了,执著于代码 的小技,终不知成就完善产品的大乐!在这里,在笔者的心中,这个大家这个大 乐就是 LOTUS,太多让人敬畏的神奇在其中,太多大师的手笔让人回味无穷。MY LOTUS!I LOVE YOU!历经二十余年的风雨,仍能不断进取,给大家带来一个又一 个新的未来! 工作日久,想总结的心愿也愈见浓厚,再加看到市面上复制帮助之途类书籍 的为祸不浅,因此是笔者站在一个开发者的角度,根据日常工作心得,结合实际 的产品及项目开发经验基于 DOMINO7 编写了开发管理丛书。在具体理论基础方面, 为确保正统性以官方帮助为准,但根据笔者实际工作经验勘误。最终希望能给入 门的朋友带来一盏指路的明灯;为资深的同行带来一点新的启发,思想的共鸣! 在 本 书 的 编 写 过 程 中 , 笔 者 依 仗 了 中 国 最 大 的 LOTUS 技 术 门 户 WWW.CHINALOTUS.COM 上众多同行朋友近十年积累的 LOTUS 知识以及无私贡献的资 料支持,点点滴滴,才始聚成海。并且在编写的过程中,如 carrot、庄生梦蝶、 长颈叔叔、败类、南瓜大叔、暴雨、光合作用等资深同行在编写过程无私提供的 宝贵意见,父母和亲爱的妻子则在无数的长夜给我了默默的支持,没有他们的支持, 我根本不能想象这套书能顺利完成,只有他们的支持,才能最终成就了笔者这个由 来已久的心愿 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 7
  • 9.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 因此笔者在这里对所有支持这套书编写的亲人和朋友除了用心说声感谢还是 只有感谢,对笔者而言只有将书写完美,无他可替,阅书的朋友在阅书的过程中也 请记住这些名字,没他们也就没这套能给你工作带来支持的书。 青春无忌,所以有最珍贵的书生意气,激扬文字,理想豪言。 还记否,离开校园时的清涩和迷茫,但最终我们还是起程,各自用并不宽厚 的肩膀负荷着理想和行囊,背井离乡闯荡在异乡。 岁月如梦,我们到底得到什么又失去什么?蹄过尘扬,是否我们还能相视而 笑?保持心中的爱与理想吧,别管经受了多久的寒冷!别管激情已经遗失蒙尘了 多久!只要坚持,我们定将一起穿越到水穷之处,笑看云起! 在本书完成之前不久 IBM 宣布了 LOTUS7 下一个版本,代号为 “Hannover” 的详细蓝图,让笔者更加坚信 LOTUS/DOMINO 因为其数十年的丰富积累,开放的精 神,将仍然是那朵最美丽的智慧莲花!“Hannover”主要特性参详如下: 1)以“工作为中心”是“Hannover”的核心理念,即它在将在 Notes 中采用 一种新的模式和特性集来支持当前的协作应用与流程; 2)组合应用”则是“Hannover”所要实现的目标,即它通过添加在 J2EE 平 台上开发的功能(定制或打包),来扩展在 Domino 上部署的应用,从而 Notes 客 户机提供更丰富的应用。 3)基于角色的计算――通过充分利用驻留于服务器版之上的用户配置文件, 企业将可以实现基于 角色的用户供应。 4)通过使用 WorkplaceClient Technology,将 Workplace 功能集成至 Lotus Notes 客户机之中。为用户带来更简单、创新、易于使用的客户机,以支持消息传 送、定制应用、办公工具、以及基于 J2EE 的功能等(包括工作管理、文档管理、 以及团队工作空间)。 本书的建议读者范围 有一定基本的开发基础但并非是 DOMINO 的,具有对函数,变量,过程的基本 知识的能力,熟悉 HTML、CSS、JS 开发的朋友阅读并了解本书,如果不具备以上 基础不建议购买阅读。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 8
  • 10.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 2.LOTUS/DOMINO 起源、家族组成 2.1 LOTUS/DOMION的起源 凡事究其本源,才能熟知其器,因此笔者决定在本书之始以稍长点的篇幅向 本书读者娓娓道来 LOTUS/DOMINO 的起源,其间也是怀着一份敬畏的心感谢 LOTUS 开发者们用自己的青春与才智培育出来这么一朵最美丽的智慧莲花。 导致 Notes 客户机和 Domino 服务器诞生的最初概念,实际上比个人计算机 的商业开发早了将近十年。 最开始是 1973 年伊利诺斯州立大学 Computer-based Education Research Laboratory(CERL)发布了一个名为 PLATO Notes 的产品。在当时,PLATO Notes 的唯一功能就是为缺陷报告加上用户 ID 和日期的标签,以及保护文件避免被其 他用户删除。然后系统开发人员可以对屏幕下方报告的问题作出反应。这种用户 间的安全通信是 PLATO Notes 的基础。 1976 年, PLATO Group Notes 在吸收了 PLATO Notes 的最初想法之后加以 扩展发布,可以让用户完成以下实现: · 创建按主题组织的私有 notes 文件 · 创建访问列表 · 阅读特定日期以后编写的所有 notes 文件并作出响应 · 创建匿名的 notes 文件 · 创建主控消息标志(director message flag) · 标记文档中的注释 · 把 notes 文件连接到其他 PLATO 系统 · 使用多角色游戏 其后一直到 1982 年 IBM PC 和 Microsoft MS-DOS 推出后,基于主机架构的 PLATO 性价比变得越来越低。Group Notes 开始变成很多 “notes 类型” 的其 他软件产品。 早期曾参与 PLATO Notes 开发的 Ray Ozzie 因为对 PLATO Notes 初始的感情, WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 9
  • 11.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 决定在其后到来的个人 PC 时代继续完善基于 PC 的 Notes 产品的开发。 最初他并无法为自己的设想筹到资金。不过 Lotus Development Corporation 的缔造者 Mitch Kapor 发现了 Ozzie 所做研究的发展潜力,决定将 Lotus 的资 金投入该项目的开发。Kapor 的商业敏感性、创造力和远见对于把 Ozzie 的设想 变为现实至关重要。 在 1984 年年底,在 Mitch Kapor 的资助下,按照 Lotus 的协议,Ozzie 成 立了 Iris Associates Inc。 开发 Lotus Notes 的第一个版本。1985 年 1 月, Tim Halvorsen 和 Len Kawell 加入了 Ozzie,随后 Steven Beckhardt 也来了。 这些人为公司带来了广博的知识和远见,但在那时协作和消息软件这些观念往好 处说是奇思异想,往坏处说就是不切实际。按照 PLATO Notes 他们 塑造了 Lotus Notes,但也加以扩展,包括了更多强大的特性,比如在线讨论、电子邮件、电话 簿和文档数据库等等。在其后 DEC 的 Alan Eldridge 加入后,Notes 体系结构的 数据库和安全特性开始进一步完善。 但是在当时,网络互联手段非常原始缓慢,因此,开发人员最初决定将 Notes 定位为具有一些共享能力的个人信息管理程序(PIM),类似于 Organizer。其次, PC 操作系统还不成熟,Iris 必须编写大量系统级代码来完成 Nae Server 和数 据库这样的任务。最后,随着网络能力的提高,Iris 开始将 Notes 称作群件 (groupware)。群件这个词(最终基本上变成了 Notes 的同义词)指的是促进 一群人之间进行通信、协作和协调的应用程序。 为了实现这些目标,Notes 为用户提供了客户机/服务器体系结构,主要特 点是 PC 连接到局域网(LAN)。一个组可以设置一台专门的服务器(PC)和其他 组的服务器通信(可以在同一个 LAN 中,也可通过交换网络)。服务器通过 “复 制数据” 交换信息(就是说位于不同服务器上的同一数据库可能有多个副本, Notes 服务器软件不断地同步它们)。这就使得用户很容易与分支机构的同事交 换信息,就像在同一间办公室中一样。 其实在 1984 年,考虑团体通信软件是很古怪的,因为当时多数人还没有接 触过电子邮件系统……产品远远走在了时代的前面。 Notes 初始另一大特色是定制,Notes 体系结构使用了构造块的方法,通过 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 10
  • 12.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 将各种不同的服务拼凑到一起就可以构造团体文本性应用程序。因此 Notes 能够 在行业的变迁中生存下来,因为其灵活,用户可以定制它来适应变化的需求。在 差不多的时刻,Apple Computer 推出了带有易用的图形化用户界面的 Macintosh 机器。它影响了 Lotus Notes 的开发人员,让他们开始为新产品提供了面向字符 的图形化用户界面。 1986 年 8 月,NOTES 第一版基本完成,能展示了它那独到的功能并具备了初 步的文档。因此 Lotus 评估并接受了该产品。Lotus 于 1987 年买断了 Notes 的 版权。 但甚至在第一个版本推出之前 Lotus Notes 就已经成功了。在正式发布 前 Price Waterhouse 的总裁观看了 Notes 的演示,留下了深刻的印象,因此购 买了 10,000 份拷贝。 这在当时是有史以来一种软件产品最大的 PC 销售量。作为 Notes 的第一个 大客户,Price Waterhouse 预言 Lotus Notes 将改变我们做生意的方式。现在 我们知道,他们的预言应验了。 至目前的 LOTUS7 为止,LOTUS 的官方销售拷贝已经过亿,并继往开来的继续 发展中。 2.2 LOTUS/DOMION所支持平台及家族组成 从第一个版本到目前的 LOTUS7, LOTUS 家族已经发展成了一个覆盖众多 领域的庞大家族,在平台支持方 面目前支持:iSeries; Windows; AIX; Solaris; 其产品家族的组成和用途如下: 1)Lotus Domino Server(LOTUS 服务器) ; 2)Lotus Domino Administrator(LOTUS 管理台); 3)Lotus Domino Designer(LOTUS 开发工具) ; 4)Lotus Notes(LOTUS 客户端) ; 5)Domino Web Access (以前的 iNotesLOTUSB/S 电子邮件产品); 6)Domino Access for Outlook WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 11
  • 13.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 (一个为 Microsoft Outlook 用户提供 Lotus/Domino 邮件、地址簿、Calendar and Scheduling 功能的产品); 7)Lotus Domino Document Manager (以前的 Domino。Doc-主要用于以下几个方面:组织文档以便工作团队能够有效地 进行共享访问;管理版本以便每一位团队成员都能够获得最新的版本;自动处理 文档驱动的过程,例如评审和批准、汇编和发布、存档,以及记录管理) 8)Lotus/Domino Everyplace (一套完整的无线解决方案,允许移动 IBM Lotus Notes 和 Domino 用户随时随地 访问其 e-mail、日历、任务列表、目录和其他应用程序。从单一平台支持多种移 动设备,包括个人数字助理 (PDAs)、智能电话和寻呼机) 9)Lotus/Domino Unified Communications (以前称为 Domino Unified Communication Services,将语音邮件、电子邮件 和传真进行了整合,从而所有的消息都存储在同一个位置,可以从不同的设备上 访问,包括电话和 PC 机,并能将消息访问扩展到其他设备和技术,比如移动电 话、寻呼机、PDA 和浏览器。此外,还提供了通知功能,在收到消息或者符合特 定条件时以不同的方式通知订阅者) 10)Lotus Connector for SAP Solutions (它提供 Lotus Domino 和 SAP 企业资源计划软件之间的整合。如果需要从 Lotus Domino 服务器对 SAP 解决方案数据进行计划或事件驱动的访问,或需要整合 Lotus Notes 收件箱中的 SAP 应用程序工作流项目) 11)Lotus Instant Messaging&Web Conferencing (SametimeLOTUS 的多媒体视频交流平台); 12)Lotus Learning Management System (管理基于教室和数字化学习的资源、课件和事件的培训产品) 13)Lotus Virtual Classroom (通过健壮的协作工具,创建和交付富有吸引力的、基于 Web 的真实培训课程) 14)Lotus Workflow (LOTUS 的工作流管理设计平台,帮助组织将耗时长、基于人员的活动标准化和流 线化,并且跟踪进展情况,一般须配合 Lotus Domino Document Manager 使用); WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 12
  • 14.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 15)Lotus Team Workplace (以前的 QuickPlace,LOTUS 的项目协作系统,支持 LDAP); 16)Lotus Enterprise Integrator (LOTUS 一个声明式的、基于服务器的产品,主要用于数据的移动、同步和提取。 如支持 Domino 和很多关系型数据系统及 Enterprise Resource Planning (ERP) 系统之间交换数据); 17)Lotus NotesSQL (LOTUS/DOMINO 用来进行数据交互的 ODBC 驱动) 18)Lotus SmartSuite (LOTUS 的桌面编辑系列工具:1-2-3, 提供了全方位功能;Word Pro 领先的文 字处理器; Organizer Release 5 。04 领先的个人信息管理工具;Freelance Graphics 为日常交流提供了演示图形包;Approach 则提供了支持整个团队使用的 关系数据库) WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 13
  • 15.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 3.LOTUS/DOMINO 与现有流行平台的 对比分析 目前随着技术的日新月异,不断有一些新的技术平台诞生或有一些老瓶装新 酒的再生,基于各种商业目的,为了赶超历史最为悠久的协作平台-LOTUS,经常 会有些有意思的混淆视听的说法诞生。 为了以正视听,笔者在此以自己的亲身感受拟做以下 LOTUS 与现有主流相似 平台的相关性技术分析,希望能给大家一些正确的认识,以正视听。 开始之前简短的交代下笔者从业经历。1997-1999 于 ASP 及 Exchange 平台基 础上从事 OA 系统开发;2000-2000 至今一直主要基于 LOTUS 工作,同时对 J2EE 体系开始研究。以上的从业经历确保笔者不是个只知 LOTUS 不知其他者,确保了 以下分析的客观性:)首先我们一起来看看几个对 DOMINO 常见的指责。 1.DOMINO 速度太慢 反对者: DOMINO 是基于文档的数据库、不具备数据快速检索功能。当数据库中文档数 超过二到三万条时,几乎显得无能为力。Domino 使用解释性的客户响应机制,在 采用 Browser-Domino 结构响应 Web 请求时, Server 端实时地将 Domino 视图 转换或解释为 HTML 文档传送回客户端,对于复杂视图转换时间长。 在客户端 Browser 上利用 JavaApplet 实现数据的互操作性,客户端启动 Java VM 就需要耗费很长时间,Java VM 启动后, 还要解释运行缓慢的 Java Applet, 用户等时太严重。如在一般的 100M 共享网络上,10 个用户同时查询具有 1 万个 文档的数据库,将费时数分钟,而一般办公系统均有数百个用户。 点评: 以上这段技术分析是最常见的对 DOMINO 的指责,看似合理,稍微认真的去思 考下,其实有着太多的常识性技术错误。 首先 DOMINO 是会慢,但这里有个前提,数据很多之后是 DOMINO 会慢还是所 有的数据库都会慢?准确的说法应该是当数据量海量的时候,没有任何数据库不 会慢,而且查询及浏览的时候实现方式和代码质量也很重要,再快的平台如果代 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 14
  • 16.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 码或实现方式有问题,随便几行代码都可以让一个优秀的平台崩溃。 接着还是回到速度这个话题,具体而言,速度的定义应该是两个方面,一是 显示速度二是检索速度。 首先在显示方面,DOMINO 并不是如上文反对者所说的仅支持 Java Applet, 还支持 HTML 和 XML 多种解析方式。 而且其中如果采用 JAVA 方式显示的话,DOMINO 方面跟普通的 JAVA 系统的实 现方式并没什么区别。如果 DOMINO 速度慢那么 JAVA 开发的系统也是一样的显示 速度。 并且在笔者从事 DOMINO 开发的过程中,一直不喜欢采用的就是 JAVA APPLET, 因为一是需要客户端配置,二是速度确实慢,三是那界面的显示方式个人感觉不 是很好,因此笔者一般是采用 HTML 或 XML 解析视图的方式。 如果解析表单上没多少计算的部分或单纯用视图显示那么可以说十万以上文 档的时候,浏览速度不超过 5 秒,注意这里说的是文档而不是字符型的字段数据; 但如果有大量的计算那么显示速度在大数据量下一般会减缓 5-10 秒。 最接近极限的一次是一个项目上曾遭遇过一个 30 多 GB 的 NSF 数据库,不管 啥方式显示都比较慢,后来干脆心一横,用了单纯视图显示,结果打开速度也不 超过 10 秒,要换了个同指标的关系型数据库估计已经趴下了。 至于检索,处理好你的代码,建好索引,数十万文档的数据库想得到检索结 果绝对还是可以承受在 10 秒之内的,如果还要提高速度,建议把文档标题和 URL 地址都放到 DB2 里去检索,但如果文档表单里具有读者域或作者域,此法无效。 DOMINO 只负责打开文档:) 2.综合统计能力太差 反对者: 在办公信息系统中,实时地对公文运行状况进行分类汇总、监控是必不可少 的功能。而 Domino 是基于文档的小型数据库,如要求进行多维数据汇总,其实现 过程十分复杂,效率极其低下,反应缓慢,远不如关系型数据库。 点评: “Domino 是基于文档的小型数据库”“基于文档” , 可以说不错,“小型数据库” 的印象却不知从何得来?不知该文作者的标准是什么?十万篇文档和十万条关系 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 15
  • 17.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 型记录,无论从存储容量、检索难度、复杂度等方面都不可同日而语。 所以,在我的印象当中,Domino 数据库的指标一般只提容量,很少提文档数 目,没有什么原因,只是因为在达到文档数目的限制前存储介质早就“爆”掉了。 并且将 Domino 简单地称为“数据库”,对于它所能完成的工作而言,实在是 一种误解,Lotus/Domino 在市场上一直是作为领先的服务器电子邮件和群件产品 而得到广泛承认的。 至于“对公文运行进行分类汇总、监控” ,以笔者的经验横向比较的话,只可 能是强项不可能是弱项,这有非常丰富的 DOMINO-OA 产品可证明。 至于“多维数据汇总”“远不如关系型数据库” , ,这的确是事实,但每个平台 都有自己所擅长的领域和不擅长的领域。 DOMINO 作为提供综合服务的群件平台,工作流、协同、通信、文档管理才是 他侧重的方面,否则还要 MIS 系统对大量的原始数据进行多维汇总、处理加工、 产生统计报表做什么。 而且非要用 DOMINO 做复杂的数据统计分析,也不是没有变通的法子,比如通 过 ODBC、JDBC、LEI, DOMINO 当成一个普通的关系型数据库, 把 结合 DELPHI、JAVA 等高级语言,那么 DOMION 一样可以支持复杂的数据统计分析。通往罗马的道路不 仅仅只有一条滴~。 3.实现复杂的应用和界面困难 反对者: 管理信息系统的界面上一般具有众多的界面元素。如会签界面上至少有文件 标题、正文、附件、起草人、起草时间、处室审核人、审核时间、司局审核人、 签发人、签发时间、会签司局………等等数十项,在 Domino 的视图上实现如此众 多的界面元素十分困难,对于复杂视图在 Notes 中有时竟无法正常显示导致死机。 点评: 这些更不知道从何说起了,至少在笔者的开发过程中没遇见过,而且科学的 开发方式显示数据也不是依靠视图,而是通过传递给代理一些参数动态构成数据 展现,最终方式有很多种 HTML、XML 等等都可以。至于死机问题,确实存在,但 主要是 R6 以下版本的 C/S 开发中。 4.界面实现手段缺乏呆板 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 16
  • 18.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 反对者: Domino 的界面主要由帧、视图、大纲等一些固定格式组成,缺乏灵活性,样 式粗糙呆板,与 HTML 或应用程序界面相比过于原始化、简单化,缺乏个性。 点评: 的确,直接使用这些元素是缺乏灵活性,但原因恰恰来在于这些设计元素易 用性。一个粗通 Notes 编程的人可以在极短的时间内搭接出一个基本可用的系统, 这是其它系统所难实现的。随着对于 Domino 编程的进一步了解,还可以进行界面 的定制,应用诸如内嵌 HTML 代码、结合 JavaScript、DHTML 等技术开发出开发出 充满个性和艺术性的界面的应用程序,这方面,DOMINO 产品有太多成功的例子。 当然,灵活性的提高通常也伴随着复杂度的提高,这些工作都是需要一定的编程 量的,如何取舍,是见仁见智的问题。 5.数据共享、导入、导出限难 反对者: Domino 文档数据库不支持 ACCESS, EXCELL,FoxPro 等通用前台数据库的共 享访问,也不支持各种 SQL 检索工具通过 ODBC 访问,不支持 SQL 语句查询,数 据共享性能极差、数据批量格式化导入导出困难,在流行的 Internet/Intranet 环境下,难以满足用户端数据访问多样化的需求。 点评: 首先笔者建议大家针对这几条去看看下 LOTUS 的开发帮助和样例数据库,这 些说法就不攻自破了,至于支持各种 SQL 检索工具通过 ODBC 访问,这是笔者在 项目开发中常通过 NOTESSQL 这个产品做的实现。 如果要做复杂的交互,JDBCSQL、LEI、ESB 都是非常成熟的解决方案。而且目 前 SOAP 架构下的 WEB 服务也是 R7 默认就提供支持了,且实现非常简单。 以上是笔者根据自己的亲身经历针对目前几种对 LOTUS/DOMINO 常见不实攻击 的技术分析,希望还大家一个真实的 LOTUS/DOMINO 认识。 接着笔者将 LOTUS/DOMINO 和目前同样主流的 MSExchange 及 J2EE 下的 JAVA 平台作个具体的对比分析,让大家了解更清晰。这里要补充的是 DOMINO 也是 J2EE 的一个组成和 J2EE 规范没有任何矛盾的地方, R8 本身都有纯 JAVA 的版本了:。 且 ) WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 17
  • 19.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 3.1 Lotus/Domino与Microsoft/Exchange 的比较 首先在销售过程中 IBM 和 Microsoft 都将两个产品互相描述为竞争的产品, 主要原因是在电子邮件的层次上,这两个产品确有可比性。但是在更大的意义上, LOTUS 和 Exchange 是完全不同的两类产品。Exchange 基本上专注于电子邮件,而 Notes 则是协作平台,电子邮件只是其中一个基本功能而已。它们两个的不同之处 更胜于其共同之处。 从 LOTUS 第一版开始设计时,就定位在提供网络连接起来的用户之间针对工 作或问题,互相通讯和协同的综合集成环境。到今天为止,这一产品定位没有改 变过。我看也没有什么理由在未来改变。 而在 Microsoft 的产品家族中,Exchange 是作为 Ms Mail 的换代产品出现的。 Ms Mail 是文件共享型的邮件系统,从 90 年代初起,Microsoft 希望用将其换代 升级为 Client/Server 结构的邮件系统,并着手开始了产品开发工作。Microsoft 用了许多代码名来称呼这个开发项目:"Spitfire"、"Touchdown"、"EMS"等等。 后来,Microsoft 决定他们必须有一个"Notes Killer",Notes 做什么,这个产品 也要做什么,并最终定名为"Exchange"。 可是,尽管产品名称和市场目标不断改变,但本质并没有改变。因此 Exchange 从根本上说是一个电子邮件产品。 最开始 Exchange 有个著名的限制就是每一个服务器数据库只能到 16GB,原因 就是来自于其关系数据库存储内核。试想,如果平均每一个用户都占了 50MB 的邮 箱与公共文件夹大小,那么每一个 Exchange 服务器只能支持 320 个用户。难道这 就是"企业级支持"?要知道,实际使用中,由于邮件中包含了大量的附件文件, 50MB 的限制是很容易达到的。 从 5。5 版开始,Microsoft 在 Exchange Enterprise Server 中解决了这个问 题,办法就是修改内核,引入新的磁盘存储结构。而在 Exchange Standard Server 中依然如故。 因此于是新的问题出现了:两个版本不兼容。而且 Exchange 的 Enterprise 版必须运行在 NT 企业版上,价位就不一样了,分别是 Standard 版的3倍和4倍。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 18
  • 20.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 产品设计思想的不稳定只能给用户造成灾难,Exchange 的升级对用户来说, 每一次升级都意味着"抛弃与取代"。 另外象办公管理平台目前常需要的 LDAP 服务、HTTP 服务、CA 认证服务、开 发服务如果选择 Exchange 的话,哪怕是最高级版本也是不具有的,需要另外购买 Microsoft 的其他产品组合再加上开发商的代码开发才可以实现。 3.2 Lotus/Domino与JAVA系统的比较 目前 J2EE 是炒的非常火的一个东西,到处都是宣称自己的系统用 JAVA 开发, 到处都是 JAVA 培训的广告,大有一夜之间 JAVA 来,全国全民都非要学 JAVA 不可 的味道。 而且很多人都把 JAVA 和 J2EE 混为一谈,但实际上 J2EE 是个很优秀的很大的 体系,JAVA 和 DOMINO 都是其中的组成,因此 J2EE 并不就等同于 JAVA!这是笔者 的第一个观点,因此也只是把 Lotus/Domino 与 JAVA 做对比。 虽然 JAVA 有跨平台、支撑大用户、较好的开发手段这些不错的优点,尤其跨 平台支持方面,但 DOMINO 就不支持跨平台么,而且历史还早于 JAVA。 而且就真实的本质而言, JAVA 开发办公管理系统的过程和以前的开发语言 用 如 VB,ASP 都没太大的区别。开发过程都是先设计数据库、然后编码。只是在开 发过程中 JAVA 有一些不错的技术支持手段。过程仍是老酒装新瓶。 如果需要一些常用的服务,比如邮件服务、HTTP 服务、LDAP 服务,基于 JAVA 的系统不是要集成第三方的那么就是要自己开发。而不象 DOMINO 天然就提供上述 成熟稳定的服务。因此在系统集成这方面, JAVA 开发的系统的风险性、 用 困难性、 稳定性并不比十年前的 ASP 好多少,因为还是一样的设计方式和过程。 再就是具体开发实现上,DOMINO 本身就提供了很多封装好的支持,而且这些 支持是 20 多年的积累不是一朝一夕的事情,这样就避免了很多重复的开发工作, 而用 JAVA,就要享受很多东西都完全自己来实现了,一些重复的工作无可避免。 在管理系统最核心的权限方面,DOMINO 本身天然提供七级的完善权限控制, 还有读者域、作者域这些不错的辅助支持。 而 JAVA,全都靠自己设计开发吧,而且效果基本上也只能到东施的效果,这 不是代码的问题这完全是定位和结构的问题,任何事物都需要时间去完善和积累。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 19
  • 21.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 以前笔者也曾带领一个团队做过一个 JAVA+SQLSERVER 的 OA 项目。结果,在 项目前期看起来一切都很好,公文也能流转,也能对数据域进行控制。但是,到 后期的时候,问题出现了。 我们知道 OA 特别是政府部门的 OA,内部机制是非常复杂的。首先,你用什么 来保证修改的东西在文档资料中是可见的,而且后来的人不能修改,第二,如果 我使用数字签名,你如何保证这些文档是我签字的?而不是别人修改数据库之后的 结果,而且完整的数字签名和需要价格不菲的 CA 支持。 再往下如果我的控制需要做到文档级的,就是说同一类型的文档,这一份你 能看,那一份你不能看?又该如何实现? 总体来说:控制流转在 DB 环境下没有什么问题,就算是很复杂的控制,也可 以做。但是文档资料的保存,数字签名。实际上,用 DB 来做解决方案,就意味着 你企图使用结构化的数据格式来表示非格式化的东西。 而且,结构化的表示方法 如果出现了问题,比如在文档结构上要改动,那么你怎么应对?一切程序都有变动 的可能。如此下去,修改只会变得越来越复杂以至到处皆补丁。 当然,非结构化的数据(比如 Word 文档资料)用 XML 来表示。这当然是可以的, 但工作量是多少? 而且 XML 仅仅是一种通过格式的表述工具,所谓 WPS 的使用 XML 技术就可以和 Office 完全兼容,这是一种废话,也就是说说而已,因为你不知道 格式。所以同样的,将来 XML 也许可以支持其他格式的东西,比如矢量图形,但 这里是有前提的,一是所有文件都免费开发格式结构,其次是这个标准大家都认 可,否则转换和兼容性都是镜中花水中月,所以 XML 也不是解决问题的根本办法。 最后还有个现象,不管是 IBM 还是 MS, OA 中重要的知识管理方面都有自己 在 不基于普通数据库解决的独立数字认证、LDAP 用户管理、存储管理解决。 为什么 MS 不使用关系型数据库,IBM 不使用关系型数据库来做类似的系统。 按理他们有自己的 DB,有自己的开发工具,但是还是重新开始做了类似的系统, 还不值得我们去考虑一些问题吗? 因此综上所述,协作市场以后的发展趋势肯定是居于 J2EE+DOMINO 的架构, 末了我再将主要观点重复如下:选择 LOTUS/DOMINO 的优点 1)LOTUS/DOMINO 如果不做开发本身也能用,邮件,日程安排,讨论等 2)LOTUS/DOMINO 可大可小,小用户可以在上面做简单的流程及业务处理,开发时 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 20
  • 22.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 间快,对开发人员要求不高。 3)LOTUS/DOMINO 可与 J2EE 进行很好的接合。从 R7 的发展可以看出。Lotus 将越 来越好的与 J2EE 进行整合。 4)LOTUS/DOMINO 有 IBM 的技术支持,可以有效的保护投资及技术升级改造,如果 选择其它开发的平台,将无法保证 OA 系统的延继性(做 OA 的公司倒闭系统无法 升级,做 OA 的技术人员离开都将对系统造成很大影响,系统本身做好后开发商 很少对平台进行升级),拿区区几年的时间就说可以跟 LOTUS20 多年的漫长完善 成熟过程相比,无疑是不现实的。 5)可与其它系统无缝接成,Sametime、workflow、domino.doc 无线应用等,为系 统的再次升级提供了很好的解决方案,而如果是自已开发的平台,开发商将无 法帮你提供这些解决方案。 6)Lotus/Domino 相对于 JAVA 具有绝对的价格优越 真正意义上的 JAVA 部署要购买数据库、应用服务器、邮件等众多 SRV、高端 应用还要购买 EJB 服务器,部署复杂维护成本高,而且几个方面的累计是远远超 过 DOMINO。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 21
  • 23.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 6.DOMINO 主要开发技术分析及编码 优化指南 6.1 DOMINO支持的主要开放标准 首先与 Domino 7 有关的开放标准可以分成两大类:Internet 协议、应用程 序和数据协议。 1)Internet 协议 我们首先分析与 Internet 有关的协议。下面是我们将讨论的一些重要协议 和相应的 RFC: 名称 RFC Hypertext Transfer Protocol(超文本传输协议,HTTP/1.0) 1945 Hypertext Transfer Protocol(超文本传输协议,HTTP/1.1) 2616 Session Initiation Protocol(会话发起协议,SIP) 3261 Session Initiation Protocol(SIP)--Specific Event Notification 3265 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile(Internet X.509 公共 3280 密约基础设施证书和证书撤销列表子协议) Definition of the inetOrgPerson LDAP Object Class(inetOrgPerson 2798 LDAP 对象类定义) Lightweight Directory Access Protocol version 3(轻型目录访问 3673 协议,LDAP v3) LDAP Data Interchange Format(LDAP 数据交换格式,LDIF) 2849 POP3 Extension Mechanism(POP3 扩展机制) 2449 Internet Message Action Protocol(Internet 消息动作协议,IMAP4)3348 Simple Mail Transfer Protocol(简单邮件传输协议,SMTP) 2821 Internet Inter-Orb Protocol (IIOP) CORBA/IIOP Domino 在 R5 中支持上述多数协议。Domino 7 在其核心服务器上实现了这 些标准,并通过这些标准协议公开本机功能。这使得 Domino 成为一种健壮的 Web WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 22
  • 24.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 服务器,在向传统的 Domino NSF(Notes 存储设备)数据格式提供一幅 Web “面 孔”的同时实现了 HTTP RFC。 对于应用程序访问,Domino 在其 DIIOP(作为插入的服务器任务)中支持 IIOP,使 Java 能够远程访问传统的 Domino 数据格式。 同时,Domino 服务器仍然可以访问 Domino 数据。此外,Domino 服务器上 也有 LDAP 服务器的实现(作为插入的服务器任务),通过 LDAP 公开传统的 Domino Directory 数据。 Domino 还提供了所有与邮件相关的 RFC 的实现,支持使用 POP3 和 IMAP 客 户机访问邮件文件、使用 SMTP 发送和接收邮件,也支持 MIME。Domino 可以作 为 X.509 Certificate Authority(证书权威,CA)。在 Domino7 中原有的 Notes 证书和标准的 X.509 证书结合在一起。除了作为 CA 外,Domino 在服务器和客 户端完全支持 Secure Socket Layer(安全套接字层,SSL) Lotus Instant Messaging 即时消息, ( 原来的 Sametime)现在也支持 Session Initiation Protocol(会话发起协议,SIP),在已有的通信方法上增加了一种 传输机制。 Lotus Instant Messaging 3.x 中, 在 作为连接两个不同 Lotus Instant Messaging 体、或者连接一个 Lotus Instant Messaging 体和一个支持 SIP 的 非 Lotus 体的一种方式引入了 SIP。 随着语音 IP(VoIP)和多媒体/实时协议的融合,SIP 逐渐被业界接受,现 在已成为在 Internet 上建立基于信号的、类似电话的会话的事实标准。Lotus Instant Messaging 以后的版本将对 SIP 和相关标准提供更多的核心支持。 2)应用程序和数据协议 接着我们再看一看与 OSI 模型的数据/应用程序层有关的标准,我们会看到 在这个舞台上控制着各种技术标准的一些角色。其中包括: Extensible Markup Language(可扩展标记语言,XML)和 Document Object Model (文档对象模型,DOM) · XML Schema(XML 模式) · XML Schema Language Transformation(XML 模式语言转换,XSLT) · Simple Object Access Protocol(简单对象访问协议,SOAP) WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 23
  • 25.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 · Web Services Definition Layer(Web 服务定义层) · Universal Description, Discovery, and Integration of Web Services (Web 服务统一描述、发现和集成,UDDI) · Scalable Vector Graphics(可缩放向量图形,SVG) · Security Assertion Markup Language(安全断言标记语言,SAML) · Unified Modeling Language(统一建模语言,UML) · RDF Site Summary, Rich Site Summary, Really Simple Syndication(RDF 站点提要,丰富站点提要,真正简单的连锁,RSS) 1.0和 2.0 6.2 DOMINO支持的主要开发语言及方式 6.2.1 Domino Object Model(DOM)类 Domino Object Model(DOM)是 DOMINO 用于构建应用程序的面向对象的类的总 集合,并且通过其支持其他的开发语言来访问 DOMINO 数据库和应用程序。 在 DOMINO 中这些类是作为标准的 CORBA 对象加入,用来进行分布式应用程序 的创建。对于更高级的定制应用程序,则是通过 C++API 直接访问 DOMINO 服务。 如果计划编写自己的应用程序,可以使用在模型中定义的对象、成员函数和 属性来操作 Domino 对象.例如,数据库、视图和表单。通常使用对象的属性来获 得对象的信息(例如,利用数据库对象的 RephcaID 属性来查询数据库的复制 ID ) ; 使 用 成 员 函 数 来 执 行 有 关 对 象 的 活 动 ( 例 如 , 使 用 数 据 库 对 象 的 CreateDocument 成员函数在给定数据库中创建一个文档)。从概念上讲, DOM 模 型中存在两种类型的对象。它们是: Front- endUI (前端用户界面)对象和 Back-end (后端服务器)对象。 1 .理解 Front - end 和 Back - end Classes 为了考虑数据是如何存储在 Domino 中的,可以考虑将 Domino 数据库中的文 档作为一个关系型数据库的纪录。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 24
  • 26.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 但 Domino 文档比一个典型的数据库记录更复杂。因为它可能包含 richtext、 图片、对象和其他类型的信息。因此,如果使用 Back - end 类进行访问 Domino 文档,操作域中的内容,在文档中增加新域,或者从文档中删除域等操作,则表 单中包含的输入转换和输出有效性公式可能都不能执行。 另一方面,如果操作 Domino 中的 Front - end 对象,则所作的修改对表 单公式都是可见的。例如,如果激活 NotesuIDocument 类中的 Refresh 成员函 数,则输入转换和输出有效性公式可以执行。 $updateBy susan 域一 域二 文档中的表单名 上图就表示了一个 Back - end 文档,并显示了数据是如何存储在 Domino 数据库中的。 用于创建文档的表单中, “域 1 ”和“域 2 ”已经定义了。这个 表单的名字存储在“表单”域中,如果使用代理或 LotusScript 修改了表单域的 值,则当下一次打开文档时它会利用其他表单呈现给用户。 如果在文档中没有“表单”域,则 Domino 会使用数据库默认表单显示文档。 如果没有默认表单,则不能显示文档。 $ updateBy 域是由 Domino 创建的内部 域,它包含了已经操作过此文档的用户列表。在大多数情况下,这类使用以$开 头的域名是 DOMINO 自己维护的内置对象。从 Domino R5 开始还允许指定用户输入 的最大值,并将此修改保存在数据库中的 InfoBox 中。 2 . Domino Front - end Ul 对象 Front - endul 对象用于操作当前用户界面。它们的典型用法是用于事件编 程,以及访问用户当前操作的 Domino 对象。以下是可用的对象。 l ) NotesUlworkspace 表示当前 Notesl 作台窗口。 2 ) NotesuIDatabase 表示当前使用的数据库。 3 ) NotesuIView 表示当前使用的视图。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 25
  • 27.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 4 ) NotesuIDocument 表示当前打开的文档。 只有事件联系的对象 5 ) Button 表示按钮 6 ) Field 表示域 7 ) Navigator 表示导航器 3 . Domino Back - end 对象 Domino Back - end 对象用于操作 Domino 数据。它们不支持任何事件或通 过用户界面的操纵。然而,可以在 Ul 脚本中将 Back - end 对象与 Front - end 对象结合起来。例如, NotesuIDocument 对象具有 Document 的属性,它提供了 访问下划线文档的功能。表 1 - 1 描述了 Back - end 对象存在的相关类功能。 类 功 能 NotesSession 代表当前脚本的 Domino 环境,提供了访问环境变量、Domino 目录、 当前用户信息、以及当前 Domino 平台和版本信息 NotesDbDirectory 代表指定服务器或本地上的 Domino 数据库 NotesDatabase 代表 Domino 数据库 NotesACL 代表数据库的访问控制表 ACL NotesACLEntry 代表访问控制列表中的一项。该项可代表个人、群组或服务器 NotesAgent 代表一个代理 NotesView 代表数据库的视图或文件夹、并提供访问文档的权限 NotesViewColumn 代表视图或文件夹的列 NotesDocumentCollection 代表数据库中满足一定标准的文档集合 NotesDocument 代表数据库中的文档 NotesItem 代表文档中的一项数据。不管在用户界面上文档是以何种形式显示的, 文档中的数据项都可以通过 LotusScript 看到 NotesRichTextItem 代表 RichText 类型数据 NotesRichTextStyle 代表 RichText 域的属性 NotesEmbeddedObject 代表嵌入对象、链接对象和附件 NotesDateTime 代表日期和时间。提供了在 LotusScript 日期-时间格式与 Notes 格式之 间的转换功能 NotesDateRange 包含 NotesDateTime 范围。NotesDateTime 类型的对象表示一个给定的 日期和时间 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 26
  • 28.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 类 功 能 NotesLog 记录在脚本运行期间,发生的活动和错误。可以在 Notes 数据库、邮件 或文件(本地运行的脚本)中记录活动和错误 NotesNewsLetter 代表一个包含所有来自其他文档或文档链接信息的文档。所有 NotesItem 属性和方法也可以用于 NotesRichTextItem NotesForm 代表 Notes 数据库中的表单 NotesInternational 该对象包含了提供关于国际设置信息的属性,例如,在 Domino 环境中 运行的日期格式 NotesName 这个对象的属性包含了有关 Domino 用户姓名的信息 NotesTimer 代表 Domino 中的定时器 NotesRegistration 代表 ID 文件的创建和管理 NotesOutline 代表 Notes Outline 属性 NotesReplication 代表数据库复制设置 NotesRichTextParagraphStyle 代表 RichText 段落属性 NotesRichTextTab 代表 Rich Text 标签属性 NotesViewEntry 代表视图输入项。一个视图输入项表示视图中的一行 NotesViewEntryCollection 代表根据一定标准选择的视图输入项的集合 NotesViewNavigator 代表视图导航器。视图导航器提供了访问所有或者一部分视图输入项的 功能 可以从 Java 访问 Domino Back - end 对象。从而可以用 Java 编写部分应 用程序。 Java 程序在安装了 Domino 的机器上运行。例如, Java 代理可以操 作 Domino 对象。但要注意的是 Java 类程序不是 LotusScript 与 Java 的端口。 事实上,除了界面的语法是不同的之外,;可以执行相同的 C +十代码。 4 .对象层级 Domino 对象之间存在层级关系。高层级对象包含低层级对象。图 1 一 2 描 述了几个 Domino 对象之间的层级关系。 上图中每个对象都定义了成员、属性和成员函数。利用这些成员函数,你可 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 27
  • 29.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 以访问其他对象。这种包含关系意味着高层级的对象具有访问低层级对象的属性 或成员函数的特性。 例如,当打开数据库时,可以看到所有的视图。这表示在工作台中打开的数 据库(对象)包含了视图(对象)。而且,当选择一个视图时,可以看到文档。这 表示选中的视图(对象)包含文档(对象)。在使用 Domino 对象时这种层级关系 非常重要。在 Domino Object Model 中 Notessession 是最高层级的对象。如果 从 Notessession 启动,可以对任何对象操作 6.2.2 LOTUSSCRIPT 当在 Domino 中编程时,可以通过编写 LotusScript 代码来影响 Domino 对 象。代码由对象事件的发生来执行。例如,单击按钮,打开文档,关闭文档,或 者在域中输入数据。使用 objects 视图,可以很容易看见对象可用的事件。 例如,你可以编写诸如按钮的一段非常简单的对象脚本。 Sub Click (Source As Button) MessageBox (“I’m learning LotusScript!”) End gub 当单击按钮时,这个脚本会显示信息框。 1 .事件描述 DOMINO 对象有:数据库、代理、操作、视图、文件夹、表单、子表单、页面、 域、热点对象。为响应对象中发生的事件, Domino 通过执行公式、LotusScript 、 JavaScript 和 Java 代码来响应在对象中发生的事件。此外可以将 LotusScript 子例程或函数添加到对象中。并在属于对象的 Script 列表中添加或选取相应的 ScriPt ,同时,代码可保存在 Script 库中。 Domino 的每一个可编程对象都有一个对应的相关事件列表。每一个对象都有 一个 declarations 区域和 option 区域,可以在其中编写应用于该对象中所有 LotusScript 事件的非执行 LotusScript 语句: 在 Options 区域里可以编写 Option 、 Use 、 UseLSX 和 Const 语句; 在每一个文档和视图都有一个 GlobalS 区域,可以在其中编写应用于文档中所有 LotusScript 事件的非执行 LotusScript 语句; WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 28
  • 30.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 在 Postopen 事件中对当前文档所做的修改被当作缺省值看待。该文档不被标记 为已产生变化。如果用户在此时关闭文档, Postopen 的修改内容将会丢失,必 须显式的保存此变化。 Domino 也允许在 web 应用程序中运行 LotusScript 代码,但是有几个限制。 通 常 你 使 用 LotusScript 来 开 发 代 理 , 这 些 代 理 来 自 WebQueryopen 和 WebQueryClose 事件。 LotusScript 代理只能在 Domino 服务器上运行,而不能 在 WEB 浏览器上运行。 l )下面一些表列出了能够使用公式语言、 LotusScript、JavaScript 和 Java 自动执行的事件。 下表是数据库对象的事件描述 事 件 名 执 行 时 间 Postopen (LS,F) 打开数据库后 Postdocumentdelete (LS,F) 文档被删除后 Queryclose (LS,F) 数据库正在被关闭时 Querydocumentdelete (LS,F) 将文档标记为删除之前 Querydocumentundelete (LS,F) 将文档标记为取消删除之前 将文档标记为拖放操作之前 Querydragdrop (LS,F) 在视图中执行拖放操作之前 Postdragdrop (LS,F) 在视图中执行拖放操作之后 Initialize (LS) 数据库正在被装入时 Terminate (LS) 数据库正在被关闭时 下表是文件夹对象的事件描述 事 件 名 执 行 时 间 Postpen (LS,F) 打开视图或文件夹之后 Regiondoubleclick (LS,F) 双击日历视图中的区域时 Queryopendocument (LS,F) 装入文档之前 Queryrccale (LS,F) 刷新视图或文件夹之前 Queryaddtofolder (LS,F) 将文档添加至文件夹之前 Querypaaste (LS,F) 文档被粘贴之前 Postpaste (LS,F) 进行粘贴操作之后 Querydragdrop (LS,F) 在日历视图中进行一个拖放操作之前 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 29
  • 31.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 事 件 名 执 行 时 间 Postdragdrop (LS,F) 在日历视图中进行一个拖放操作之后 Queryclose (LS,F) 正在关闭视图或文件夹时 Initialize (LS) 装入视图或文件夹时 Terminate (LS) 正在关闭视图或文件夹时 下表是页面对象的事件描述 事 件 名 执 行 时 间 onHelpRequest (F) 选择帮助时 JS Header (JS) 正在装入文档时 onBlur (JS) 取消选中对象时 onClick (JS) 选中对象时 onDblClick (JS) 双击选中对象时 onFocus (JS) 选中可编辑域时 onHelp (JS) 选择帮助时 onKeyDown (JS) 按下键时 onKeyPress (JS) 按下键时 onKeyUp (JS) 放开键时 onLoad (JS) 打开文档之后 onMouseDown (JS) 按下鼠标按钮时 onMouseMove (JS) 移动鼠标时 onMouseOut (JS) 鼠标移出对象时 onMouseOver (JS) 鼠标移动经过对象时 onMouseOut (JS) 放开鼠标按钮时 onMouseOver (JS) 重置文档 onMouseUp (JS) 提交文档之前 onReset(JS) ---form only 关闭文档之前 onSubmit(JS) ---form only 打开文档之前 onUnload (JS) 打开文档之后 Queryopen (LS,F) 将文档更改为读或编辑模式之前 Postopen (LS,F) 将文档更改为读或编辑模式之后运行 Querymodechange (LS,F) 刷新文档之后(重新计算数值) Postmodechange (LS,F) 保存文档之前 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 30
  • 32.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 事 件 名 执 行 时 间 Postrecalc (LS,F) 保存文档之后 Querysave (LS,F) 正在装入文档时 Postsave (LS,F) Queryclose (LS,F) 关闭文档之后 Initialize (LS) 选中对象时 表单对象的事件描述 事 件 名 执 行 时 间 表单 WebQueryOpen (F) 显示 Web 文档之前 —— 公用于表单 为使用以下语法的公式:@command([ToolsRunMacro] agentname” “ ) 子表单 WebQuerySave (F) 保存 Web 文档之前 ——仅用于表单 为使用以下语法的公式:@command([ToolsRunMacro] agentname” “ ) 域对象的事件描述 事 件 名 执 行 时 间 onClick (JS) 选中对象时 onChange (JS) 更改对象时 onBlur (JS) 取消选定可编辑域时 onFocus (JS) 选中可编辑域时,光标移到处于编辑状态下的域中 Entering (LS) 选中可编辑域时 Exiting (LS) 取消选定可编辑域时 Initialize (LS) 正在装入文档时——在表单 Initialize 事件之后发生 Terminate (LS) 正在关闭文档时 其他对象的事件描述 事 件 名 执 行 时 间 onBlur (JS) 操作 取消选定对象时 onClick (JS) 按钮 选择对象时 onDblChick (JS) 热点 双击选择对象时 onFocus (JS) 选择可编辑域时 onHelp (JS) 选择帮助时 onKeyDown (JS) 按下键时 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 31
  • 33.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 事 件 名 执 行 时 间 onKeyUp (JS) 放开键时 onMouseDown (JS) 按下鼠标按钮时 onMouseMove (JS) 移动鼠标时 onMouseOut (JS) 鼠标移出对象时 onMouseOver (JS) 鼠标移动经过对象时 onMouseUp (JS) 放开鼠标按钮时 Click (LS,F) 选中对象时 Objectexecut (LS) 对象被启用了 FX/NotesFlow 的 OLE2 服务器激活时 Initialize (LS) 正在装入对象时 Terminate (LS) 正在关闭对象时 Action (F) 代理 运行代理时 JavaAgent (J) 运行代理时 Initialize (LS) 正在装入代理时 Terminate (LS) 正在关闭代理时 2)在对象视图中 Domino 表单和域事件的任务和采用的开发工具。 在对象视图中 Domino 表单事件功能与使用开发工具描述 事 件 开发语言 描 述 Notes Web Window Title 公式 给表单命名 是 是 HTML Head 公式 包含了所有在 HTML 主题区段中的信息,例如: 否 是 JavaScript Content 公式 颜色和字体 HTML Body 包含了所有的 HTML 主体区段中的信息 否 是 Attributes WebQueryOpen 公式 当表单从 Web 页面提交之后运行。默认在 Web 文档 否 是 显示之前运行一个代理,这个公式必须运用以下语 法:@command([tollsrunmacro];”agentname”),你也可 以在不呼叫代理的情况下输入不同类型的公式,你可 以输入一个 LS 代理,然后呼叫这个代理 WebQuerySave 公式 必须运用下列语法: @Command([ToolsRunMacro]:”agentname”) 可以在不呼叫代理的情况下输入不同类型的公式或 输入一个 LotusScript 代理,然后呼叫这个代理 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 32
  • 34.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 事 件 开发语言 描 述 Notes Web HelpRequest 公式 当用户按下 F1 键时,允许显示自己的表单帮助 是 是 Target Frame 公式 如果在热点活动属性中设置中没有指定默认值,则将 是 是 打开框架页面、视图和表单 JS Header JavaScript 将 JavaScript 函数放在这里 是 是 OnClick JavaScript 当选中一个对象时运行 是 是 onDblClick JavaScript 当双击选中一个对象时运行 是 否 OnHelp JavaScript 当选中帮助时运行 否 只可 OnKeyDown JavaScript 当按下键时运行 否 是 OnKeyPress JavaScript 当按键时运行 否 是 OnKeyUp JavaScript 当释放键时运行 否 是 onLoad JavaScript 装载文档时运行 是 是 OnMouseDown JavaScript 当按下鼠标时运行 否 是 OnMouseMove JavaScript 当鼠标移动时运行 否 是 OnMouseOut JavaScript 当鼠标移开对象时运行 否 是 OnMouseOver JavaScript 当鼠标越过对象时运行 否 是 OnMouseUp JavaScript 当释放鼠标时运行 否 是 onReset JavaScript 当用按钮重置文档时运行。触发启动表单,重置活动 否 是 OnSubmit JavaScript 当提交文档时运行 是 是 OnUnload JavaScript 当退出文档时运行 是 是 (Option) LotusScript 适用于所有的脚本对象,并提供一定的说明(例如, 是 否 用途、选项、常数、定义等) (Declaration) LotusScript 适用于所有的脚本对象,并确定了所有的全局变量 是 否 Queryopen LotusScript 打开文档之前运行 是 否 Postopen LotusScript 打开文档之后运行 是 否 Querymodecha LotusScript 将文档改为只读或编辑状态之前运行 是 否 nge LotusScript 用户将文档改为只读或编辑状态之后运行 是 否 Postmodechang LotusScript 刷新文档之后运行(重新计算各值) 是 否 e LotusScript 保存文档之前运行 是 否 Posttrcalc LotusScript 保存文档之后运行 是 否 QuerySave LotusScript 关闭文档之前运行 是 否 PostSave LotusScript 装载文档时运行 是 否 Queryclose LotusScript 关闭文档之后运行 是 否 Initialize Terminate WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 33
  • 35.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 在域中 Domino 事件功能与使用开发工具描述 事 件 开发语言 描 述 Notes Web Default value 公式 当装载文档时,会显示 Default Value 事件的内容 是 是 Input translation 公式 可用于修改用户输入的数据,调整空格,将用户名 是 是 改成大写或正确的大小写 Input validation 公式 要求从列表中选择一项,可以通过使用@if 公式来完 是 是 成 否 是 HTML Attributes 公式 允许你在 Domino 生成的域标签中增加其他属性 是 是 OnBlur JavaScript 当用户退出域时运行 否 是 OnChange JavaScript 当修改域值时运行 否 是 OnClick JavaScript 当单击域时运行 否 是 OnDblClick JavaScript 当双击域时运行 是 是 OnFocus JavaScript 当输入光标进入该域 是 是 OnKeyDown JavaScript 当按下键时运行 否 是 OnKeyPress JavaScript 当按键时运行 否 是 OnKeyUp JavaScript 当释放键时运行 否 是 OnmouseDown JavaScript 当按下鼠标按钮时运行 否 是 OnmouseMove JavaScript 当移动鼠标时运行 否 是 OnmouseOut JavaScript 当鼠标移开对象时运行 否 是 OnmouseOver JavaScript 当鼠标移过对象时运行 否 是 OnmouseUp JavaScript 当释放鼠标按钮时运行 否 是 OnSelect JavaScript 当用户在文本域中选中文本时运行 是 否 (Options) JavaScript 适用于所有的脚本对象,并提供一定的说明(用途、 选项、常数、定义等) 是 否 LotusScript 否 (Declaration) 适用于所有的脚本对象,并确定了所有的全局变量 是 LotusScript 将光标出现在域中时 否 Entering 是 LotusScript 当光标离开域时 否 Exiting 是 Initialize LotusScript 当装载域时(例如,用户单击按钮) 是 否 Terminate LotusScrip 当关闭域时 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 34
  • 36.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 3)执行一般 Domino 任务过程中各事件的顺序 执行一般 Domino 任务过程中各事件的顺序描述 任 务 事 件 顺 序 打开数据库的一个视图 [可选]Script Library Initialize (视图) Globals Initialize (视图) Initialize (视图) Queryopen (视图) Querypostopen (视图) [可选] Script Library Initianlize (数据库) Initialize (数据库) Postopen 从一个视图中关闭数据库 Queryclose (视图) [可选]Script Library Terminate (视图) Queryclose (数据库) Terminate (数据库) 打开数据库 [可选]Script Library Terminate (数据库) [可选]Script Library Initialize Initialize 关闭数据库 Queryclose Terminate [可选]Script Library Terminate 打开视图 [可选] Script Library Initialize Globals Initialize Initialize Queryopen Querypostopen 刷新视图 Queryrecale 离开视图 Queryclose Terminate Globals Terminate 编写新文档 [可选] Script Library Terminate [可选] Script Library Initialize Globals Initialize Initianlize JS Header Queryopen WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 35
  • 37.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 任 务 事 件 顺 序 Initianlize (域) Postopen onLoad 编辑己有文档 QueryOpenDocument (视图) [可选]Script Library Initialize(表单) Globals Initianlize Initianlize (表单) JS Header Queryopen Initianlize (域) Postopen onLoad 更改文档模式(编辑/读) QueryModeChange (表单) PostModeChange 保存文档 Querysave (表单) Onsubmit Postsave 刷新文档 Postrecac (表单) 关闭文档 Queryclose (表单) onLoad Terminate (域) Terminate (表单) Globals Terminate [可选]Script Library Terminate 删除视图中的文档 Querydocumentdelete Postdocumentdelete 取消删除视图中的文档 Querydocumentundelete 运行代理 [可选]Script Library Initialize Initialize Terminate [可选]Script Library Terminate 输入域 Entering onChange Exiting onBlur WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 36
  • 38.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 6.2.3 公式语言 6.2.3.1 什么是公式语言 公式语言提供了语法和函数(包括命令),可以对常量和变量进行赋值计算, 并执行简单的逻辑运算。变量可以是 Notes 文档中的域或是只用于即时公式的临 时变量(也叫做临时域)。公式由一个或多个语句构成,每个语句都由一些成份所 构成。下面列出在公式语言规则中的一些概括性主题。 一.词法元素 1 .常量 在公式中,一般使用三种类型的常量。列表也可以指定为常量格式。 ( l )文本常量 文本常量是包含在引号中的字符,其中也包括空格、数字和特殊字符。下面 是使用文本常量的基本规则。 1 )不要在引号中输入变量名,否则变量名将作为文本处理。 2 )如果希望将数字作为文本处理,则应在引号中输入数字。 3 )如果要包含连续多个字符,例如空格,可以使用@ RePeat 。 4 )反斜杠在文本常量中作为转义字符使用。要在文本常量中嵌入引号,须 在每个嵌入的引号前加上一个反斜杠。要在文本常量中嵌人反斜杠, 则必须键人两个反斜杠。 ( 2 )数字常量 数字常量由数字和特殊字符构成,中间不加空格,输入数据的合法格式参见表 2-l 。下面是使用数字常量的基本规则。 l )整数:由字符 0-9 组成的不加空格的正整数。 2 )小数点:小数点可以放在数字字符的前面、后面或中间。 3 )正负号:数字的第一个字符可以是正号或负号。 4 )科学记数:数字带后缀 E ,正号(缺省)或负号,再加一个整数。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 37
  • 39.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 输入数据的合法格式 数字类型 常量 结果 整数 123 123 小数 .123 0.123 负数 -123.4 -123.4 科学记数 123E2, 123E-2 12300, 1.23 ( 3 ) 日期常量 时间-日期常量由时间和(或)日期构成,放在方括号中。下面是使用时间数字 常量的基本规则。 1 ) 12 小时制:时间格式为【 hh: mm :ss 】 ,后面跟着字符 AM 或 PM ,小 时的范围是 00 到 12, 秒的部分是可选的,缺省为 00 。 2 ) 24 小时制:时间格式为 【 hh: mm :ss 】 ,小时的范围是 00 到 23 , 秒的部分是可选的,缺省为 00 。 3 ) 日期:日期的格式为【 mm/dd/yy 】。其中年份是可选的,缺省情况下为当 年年份。使用 yy 来指定 20 世纪( yy 大于或等于 50 )或者 21 世纪( yy 小 于 50 )中的一个年份;使用 yyyy 指定任意一个年份。日期格式的有效性取决 于用户在操作系统控制面板选择的日期分隔符, Windows 、 UNIX 和 Macintosh 的缺省分隔符是斜杠( / )。 OS / 2 缺省分隔符是连字符 ( - )。 4 ) 时间和日期:时间和日期的格式为【 time date 】 或【 date time 】 如 果时间和日期值相减,所得的整数结果表示两者之间秒的差值。 表示时间一日期的输入格式(假设年份为 2001 年) 时间-日期格式 常量 12 小时制结果 24-小时制 【 1:20 】 01:20:00 AM 12-小时制 【 1:12 PM 】 01:20:00 PM 24-小时制 【 13:20 】 01:20:00 PM WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 38
  • 40.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 日期 【 1/15 】 01/15/00 日期 【 1/15/00 】 01/15/00 时间-日期 【 1/15 2:30 PM 】 01/15/00 02:30:00 PM 时间-日期 【 1:20 PM 2/15 】 02/15/00 01:20:00 PM 差值 【 1:30 PM-【 1:30 】】 43200 2 .变量 在公式中,一般使用两种类型的变量。 (l)域 公式可以访问正在处理的文档中的域。每个域的名称和类型都在数据库设计中 指定。域的数据类型必须符合正在执行的操作或函数的要求。否则,在使用之前 必须进行转换。与域相关的概念如下。 l )域值 域值是公式启动时在文档中指定的。如果没有存取控制的限制,公式可以对域 值进行修改。必须使用 FIELD 关键字来修改域,否则变量将被当作临时变量处理。 FIELD 关键字还可以用来在当前文档中创建新域。 2 )空域 空域等价于文本常量”” (空双引号)。因为””是一个文本常量,所以要避 免在非文本域中使用它。具体地说,可编辑的非文本域应该使用缺省公式以保证 该域包含正确类型的域值。 3)删除域 使用@ DeleteField 从文档中删除域。 4 ) 表单域 如果用来创建文档的表单没有保存在文档中,可以使用一个名为 Form 的域, 这里包含了表单的名称。如果表单保存在文档中,则可以使用名为$TITLE 、$ WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 39
  • 41.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Info 、$windowTitle (如果设计指定了一个窗口标题)和$Body 的域。其中 $TITLE 包含了表单的名称。可通过选择“文件” |“文档属性”,并选择“域” 来查看文档中包含哪些域,也可以通过删除$TITLE 、$Info 、 $ windowTitle 和$Body 来删除存储在文档中的表单。之后必须创建一个 Form 域来存放数据库 中的表单名称。 5 ) RTF 文本域 对 RTF 文本域的内容不能进行计算。但是可以访问该域的属性。 6 ) 列表 列表是包含多值的域。某些函数和运算符就是专门用来处理列表的。 ( 2 ) 临时变量 临时变量只存在于公式中。其作用范围就是所在公式,除了公式中赋予的属性 之外不再具有其他属性。 创建临时变量的语法是: variableName := Value 。 变量取等号右边值的类型。该值可以是域的任何类型或布尔型。布尔型数据类 型由特定的函数返回其值,该值或为真(计算文本值为 l ) ,或为假(计算文本 值为 0 )。 如果变量之前没有关键字 FIELD ,则在等号左边使用变量名将得到一个临时 变量。 关键字一般是语句中的第一个词。通常约定关键字用大写字母输入。可以输 入小写,但是在保存公式时将其转换为大写。公式语言包括一套执行特殊功能的 关键字。 下表描述了这些关键词的用法。 关键字语法 描述 DEFAULT fieldName : = 将一个值与域关联。如果域在正被处理的文档中已经存在,则 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 40
  • 42.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 ValUe 其当前值被使用。如果域不存在,则当作域已经存在来处理该 文档,并且使用 DEFAuLT 值 指定一个值为环境变量, 环境变量放置在用户的 NOTEs . INI 文 ENVIRONMENT variable : = 件中( windows 、 0512 、 UNIX )或 Notes Preforences 文 textValue 件中 ( Macintosh ) 将一个值指定给当前文档中的一个域。如果域不存在,则创建 FIELD fieldName := value 该域,如果已经存在,替换它的内容 在公式中加入注释而不影响它的功能 REM【”remarks”】 指定当前文档在视图选项、复制和代理公式中是否有效 SELECT logicalValue 4 .运算符 运算符用来赋值、修改值,还可以将现有的值合并到新值。 ( l )运算符和它们的优先级描述 下表列出了各种运算符和它们的优先级,数字 1 - 6 表示优先级依次降低。下 表中各种运算符和它们的优先级描述 运算符 操作 优先级 运算符 操作 括号 明确计算顺序 最高 := 赋值 NA = 等于 : 列表并置 1 *= 恒等于 + 正数 2 <> 不等于 - 负数 != 不等于 * 乘法 3 =! 不等于 ** 连乘 >< 不等于 / 除法 *<> 恒不等于 */ 连除 < 小于 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 41
  • 43.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 + 加法,并置 4 *< 恒小于 *+ 累加 > 大于 - 减法 *> 恒大于 *- 累减 <= 小于或等于 ! 逻辑非 6 *<= 恒小于或等于 & 逻辑与 >= 大于或等于 | 逻辑或 *>= 恒大于或等于 ( 2 ) 计算顺序 操作中涉及到的值必须属于同一数据类型。括号外的操作从优先级 1 开始按优 先级的顺序进行。相同优先级的操作按照从左到右的顺序计算。 ( 3 ) 运算符分类 1) 赋值运算符 赋值运算符(:= )将等号右边的值赋给左边的变量,右边值的类型即为变量 类型。变量之前可以加上关键字 DEFAULT 、 ENVIRONMENT 或 FIELD 。没有前 缀关键字的变量是临时变量。 2) 列表运算符 列表运算符(: )将值并置在一个列表中。这些值必须具有相同的类型。值可 以是常量、变量和表达式,也可包括其他列表。 因为列表并置具有最高优先级,所以列表元素中的表达式必须用括号表示。 3) 单目运算符 单目运算符(+和一)指出数字值的符号。一个无符号的数字值是正数。 4) 算术运算符 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 42
  • 44.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 算术运算符( * / +-)通过加、减、乘、除四种运算将两个数值合二为一。 5) 文本运算符 文本并置运算符( + )将两个文本值合并。 例如: CompanyName + , " Inc." ,的操作结果是变量 companvName 的值 的后面加上一个逗号、一个空格和“ Inc . ”。 6)比较运算符 比较运算符(=、<>、!=、><、<、>、<=和> = )用来比较相同 类型的数值,并产生一个逻辑结果(真或假)。 例如: “ London ” = “Lon” + “don”的运算结果的逻辑值是真。 7)逻辑运算符 逻辑运算符(!、&、和 l )计算逻辑值。逻辑运算的优先级本身就低于周 围的比较运算。 例如: 4 = 2 十 2 & 5 = 3 + 2 操作的结果值是真。 (4) 列表操作 列表操作有以下两种类型: 1)并列运算符:并列运算符对两个列表进行并列运算。如果一个列表的元素 数量少于另一个,则短一些的列表的最后一个元素将重复若干次以匹配长的列表。 如果列表 1 包含 A : B : C , 而列表 2 包含 1 : 2 ,则列表 2 将作为 1 : 2 : 2 参加运算。对于并列的比较运算,只要对应的列表元素中有一个匹配的情况即 返回真值或 1 。 2)交叉运算符:交叉运算符对两个列表进行排列组合。计算结果列表的每一 个元素对应于每一种排列组合的情况。 3)如果在一个列表和一个非列表值之间进行运算,非列表值和列表中的每一 个元素进行匹配计算。 下表显示了并列和交叉运算符 并列运算符 交叉运算符 含义 并列运算符 交叉运算符 含义 * ** 乘法 < *< 小于 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 43
  • 45.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 */ 除法 >= *= 大于或等于 / *+ 加法 <= *= 小于或等于 + *- 减法 = *= 等于 - *> 大于 != *!= 不等于 > 3.函数及函数类型 Notes 函数用于公式中。公式执行特定的计算并计算出一个返回值,并用该 值替换自身。使用函数时必须满足正确的数据类型。 函数由函数名后面紧随参数(如果有的话)构成,函数名的第一个字符总是 @。其通常的格式为: @ function - name ( argumentl; argument2; … argumentn ) 函数的参数要放在括号中。没有参数的函数可以省略括号。在多个参数情况 下,可使用分号分隔各个参数。函数的参数需要使用指定正确的数据类型。 有 些 函 数 的 参 数 为 关 键 字 参 数 , 例 如 @ Abstract 、 @ Command 、 @ PostedCommand 、@ DocMark 、@GetPortsList 、@PickList 、@Mailsend 、 @Name 和@Prompt 等函数,需要将关键字参数放在方括号中. 附加效果是在公式的直接影响范围之外产生的操作。例如,@PromPt 除了返 回一个值外还显示一个对话框。下表给出特殊函数产生的附加功能描述 函数 附加效果 @ Command 函数附加效果 执行 Notes 命令(例如打开一个数据库) @PostedCommand 访问另一个视图或数据库,并提取数据 @ DbColumn @ DbCommand @ DbLookup 初始化(或终止)一个 DDE 对话,或执行一条 DDE 语句 @ DDEInitiate @ DDEExecute WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 44
  • 46.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @ DDEPoke @ DETenninate 创建一个 Notes 邮件便笺,并转发给另一个用户或数据库 @ Mailsend 显示一个对话框,并可能返回数据 @ Prompt @ PickList @ DialogBox @Command 和@PostedCommand 函数执行一个 Notes 命令。由于这些函数数量 众多,地位待殊,因此构成了一个独立的分类称作@Command 。每个命令均以@ Command 或 @PostedCommand 的第一个参数命名,该参数是关键字参数。根据不 同的 Notes 命令,可能还需要其他参数。 @command 可以在便捷图标、按钮、热点和操作的公式中使用,也可以在运行 于当前文档上的代理公式中使用。多数@command 均模拟菜单命令,并且涉及计 算顺序和产生附加效果。 把 NoExernalApps 的环境变量设为 1 将使所有包含@Command 函数的公式无效, 但用户不会得到错误信息,只是公式不再执行。 Notes 的@Command 按从上到下、从左到右的顺序计算公式,完成一个语句之 后再进行下一个,而@PostedCommand 函数必须在其他所有函数执行完毕后才能 按顺序执行。公式语言中不包含分支或循环结构,只有几个函数具有控制逻辑功 能。对于在 Notes R3 和 R4 中运行的应用程序,必须使用@PostedCommand。 除了@command 以外,公式语言都是对后端 Notes 对象进行操作。例如:在 公式中命名的域指的就是存储器中的该域,要用 FIELD 关键字来修改保存的域。 @Command 在用户界面中运行,在此所做的改动只有在保存文档时才能在后端反 映出来。不能同时通过后端和用户界面访问同一个文档并取得正确的值。 2 .函数中通用的语法规则 在函数公式的应用中必须遵守以下通用语法规则。 (1) 语句分隔符 使用分号分隔多条语句。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 45
  • 47.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 (2)空格 在运算符、标点和值之间可以放置任意多个空格(也可以没有)。然而,描述 关键字至少需要一个空格,而且文本常量之间的空格也是很重要的。 (3) 大小写 除了在文本常量中,其他地方并不区分大小写。按约定,关键字(如 FIELD ) 要大写,函数和@command 名(如 ProperCase )可以大小写混合使用。键入时 可以不遵照本约定, Domino 会在保存公式时按照约定转换大小写。 (4)运算符和值 两个值之间应至少有一个运算符相隔。 (5)在公式中指定表单和视图的名称时。 l)不要包含名称中的快捷键字符,即下划线(如果有的话)。公式语言把下 划线作为下划线文字处理。 2)要包括级联字符(即反斜杠),需要转义字符,因此要输入两个反斜杠。 3 .编写公式 为了构建一个独立的公式,可以单击设计面板中的 Formula ,并输入公式。 为了将公式与简单活动结合起来,单击 simple action (s) ,然后单击 Add Action 。从 Action 列表中选择函数公式,并在编辑窗口中输入公式。 单击 Fields & Functions 以选择一个函数或域,然后将其粘贴到公式中。 单击@Commands , 以选择一个命令,并将其粘贴到公式中。 基于公式的代理按顺序对每个文档操作,并在处理下一个文档时,运行完整 的文档公式。 在代理接口指定要处理数据库中的哪些文档时,可以运用搜索标准。公式中 的 SELECT 说明限制了搜索。如果在公式中没有包含 SELECT 说明, Domino 将会 附加一个 SELECT@ALL 说明。除了 SELECT@ALL ,一个 SELECT 说明必须是公式中 的第一个有效说明。 4 .调试公式 公式语言不提供正规的调试机制。可以使用@PromPt 设置断点并检查变量。 在某些情况下(例如不在当前文档和选择公式上运行的代理) , @PromPt 不能工 作。在编写和运行公式时也不会接到警告,语句只是不执行。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 46
  • 48.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 为了解决这个问题,可以在便捷图标对象、操作或其他可以运行@PromPt 的 对象中编写公式。测试完指定的公式以后,删除调试语句,并将公式拷贝粘贴到 希望放置的对象中去。 另一种方法是在公式处理文档的表单中设计一个用于调试的域。该公式在测 试时加载调试域,打开处理的文档即可检测该域。测试完以后,从表单中删除调 试域并删除公式中的调试语句。 6.2.3.2 不同的应用范围 下面列出了在每个函数的适用范围。 X 表示该函数可以用于此环境中。空白 则表示该函数不能用于此环境中。 星号表示在某个特别的环境中使用该函数时需要特别注意。值得注意的是, 当公式运行于服务器上时,有些函数的返回值是不同的。 下表指出每个函数在环境 1 中的适用范围。其中,环境 1 包括下面内容:便 捷图标公式、按钮公式、选择公式、列公式、代理 1 (从菜单中手动执行)、代 理 2(当文档被邮寄、粘贴或者修改时执行)、代理 3(定时执行)、条件隐藏公 式和区段编辑公式等。 不同函数在环境 1 中适用范围 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 @ AbS X X X X X X X X X @ Abstract X X X X X @ Accessed X X X X X X X X @ Acos X X X X X X X X X @ Adjust X X X X X X X X X @ All X X X X X X X X X WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 47
  • 49.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 @ AllChildren X @ AllDescendants X @ Ascii X X X X X X X X X @ Asin X X X X X X X X X @ Atan X X X X X X X X X @ Atan2 X X X X X X X X X @ AttachmentLengths X X X X X X X X X @ AttachmentNames X X X X X X @ Attachments X X X X X X X @ Author X X X X X X X X X @ Begins X X X X X X X @ Certificate @ CheckAlarms X X X X X X X X @ Char X X X X X X X X X @ ClientType X X X X X X X X @ Command X X X X X X @ Contains X X X X X X X X X @ CoS X X X X X X X X X @ Created X X X X X X X @ Date X X X X X X X @ Day X X X X X X X @Dbcolumn(Notes 数据库) X X X X X X X @ DbColumn ( ODBC ) X X X X X @ DbCommand ( ODBC ) X X X X X X X @ DbExists X X X X X X @DbLookup(Notes 数据库) X X X X X X X @ DbLookup ( ODBC ) X X X X X @ DbManager X X X X X X X @ DbName X X X X X X X X X @ DbTitle X X X X X X X X X @ DDEExecute etal. X X X X X X X @ DDEInitiate X X X X X @ DDEPoke X X X X X @ DDETenllinate X X X X X 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 DEFAULT X X X X X X X X X @ DeleteDocument X X X @ DeleteField X X X X X X X @ DialogBox X X X X X X @ Do X X X X X X X @ DocChildren @ DocDescendants WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 48
  • 50.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @ DocFields X X X X X X X @ DocLength X X X X X X X X X @ DocLevel X @ DocMark X X X @ DocNumber X @ DocParentNumber X @ Docsiblings X @ DocumentUniqueID X X X X X X X X X @ Domain X X X X X X X X X @ EditECL X X X X X @ EditUserECL X X X X X @ Elements X X X X X X X X X @ EnableAlarms X X X X X @ Ends X X X X X X X X X @ Environment X X X X X X X ENVIRONMENT X X X X X X @ Error X X X X X X X X X @ Exp X X X X X X X X X @ Explode X X X X X X X X X @ Failure X X X @ False X X X X X X X X X FIELD X X X X X X @ GetDocField X X X X X X X @ GetPortsList X X X X X X X X X @ GetProfileField X X X X X @ Hour X X X X X X X X X @ If X X X X X X X X X @ Implode X X X X X X X X X @InheritedDocument X X X X X X X X X UniqueID @ Integer X X X X X X X X X @ lsAgentEnabled X X X X X X X @ IsAvailable X X X X X X X X X @ IsCategory X X X X @ IsDocBeingEdited X X X X @ IsDocBeingLoaded X @ IsDocBeingMailed X X X X @lsDocBeingRecalcu X X X X lated 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 @IsDocBeingSaved X X X X @IsDocTruncated X X X X X X X X X @IsError X X X X X X X X X @IsExpandable X @IsMember X X X X X X X X X @IsModalHelp X X X X X X X X X WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 49
  • 51.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @IsNewDoc X X X X @IsNotMember X X X X X X X X X @IsNumber X X X X X X X X X @IsResponseDoc X X X X X X X X X @IsText X X X X X X X X X @IsTime X X X X X X X X X @IsUnavailable X X X X X X X X X @IsValid X X X X X @Keywords X X X X X X X X X @Left X X X X X X X X X @LeftBack X X X X X X X X X @Length X X X X X X X X X @Like X X X X X X X X X @Ln X X X X X X X X X @Log X X X X X X X X X @LowerCase X X X X X X X X X @MailDbName X X X X X X X X X @MailEncryptSavedP X X X X X X X erence @MailEncryptSentPe X X X X X X X rence @MailSavedPerence X X X X X X X @MailSend X X X X X X X @MailSignPerference X X X X X X X @Matches X X X X X X X X X @Max X X X X X X X X X @Member X X X X X X X X X @Middle X X X X X X X X X @MiddleBack X X X X X X X X X @Min X X X X X X X X X @Minute X X X X X X X X X @Modified X X X X X X X X @Modulo X X X X X X X X X @Month X X X X X X X X X @Name X X X X X X X X X @NewLine X X X X X X @No X X X X X X X X X @NoteID X X X X X X X X X @Now X X X X X X X X X @OptimizeMailAddress X X X X X X X 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 @Password X X X X X X X X X @Pi X X X X X X X X X @PickList X X X X X X X X X @Platform X X X X X X X X X @PostedCommand X X X X X @Power X X X X X X X X X WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 50
  • 52.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @Prompt X X X X X @ProperCase X X X X X X X X X @Random X X X X X X X X X REM X X X X X X X X X @RefreshECL X X X X X @Repeat X X X X X X X X X @Replace X X X X X X X X X @ReplaceSubsting X X X X X X X X X @Return X X X X X X X X X @Right X X X X X X X X X @RightBack X X X X X X X X X @Round X X X X X X X X X @Second X X X X X X X X X @Select X X X X X X X X X SELECT X X X X @Set X X X X X X X X X @SetDocField X X X X X X X @SetEnvironment X X X X X X X @SetField X X X X X X @Sign X X X X X X X X X @Sin X X X X X X X X X @Soundex X @Sqrt X X X X X X X X X @Subset X X X X X X X X X @Success X X X X @Sum X X X X X X X X X @Tan X X X X X X X X X @Text X X X X X X X X X @TextToNumber X X X X X X X X X @TextToTime X X X X X X X X X @Time X X X X X X X X X @Today X X X X X X X X X @Tomorrow X X X X X X X X X @Trim X X X X X X X X X @True X X X X X X X X X @Unavailable X X X X X X @Unique X X X X X X X X X @UpperCase X X X X X X X X X 函数名称 便捷图标 按钮 选择 列 代理 1 代理 2 代理 3 条件隐藏 区段编辑 @URLGetHeader X X X X X @URLHistory X X X X X @URLOpen X X X X X X @UserAccess X X X X X X X X X @UserName X X X X X X X X X @UserPrivieges X X X X X X X X X @UserRoles X X X X X X X @V2If X X X X X X X X X WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 51
  • 53.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @V3UserName X X X X X X X X X @Version X X X X X X X X X @ViewTitle X X X X @Weekday X X X X X X X X X @Word X X X X X X X X X @Year X X X X X X X X X @Yes X X X X X X X X X @Yesterday X X X X X X X X X @Zone X X X X X X X X X 下表指出了每个函数在环境 2 中适用范围。其中,环境 2 包括下面内容:窗口标 题公式、热点公式 1(操作)、热点公式 2(弹出式文本)、域公式、表单操作公 式、视图操作公式、导航器和布局区域等环境中适用范围。 函数在环境 2 中适用范围 函数名称 窗口标题 热点 1 热点 2 域 表单 表单操作 视图操作 导航器 布局区域 @Abs × × × × × × × × × @Abstract × × × × × × × @Accessed × × × × × × × × @Acos × × × × × × × × × @Adjust × × × × × × × × × @All × × × × × × × × × @Ascii × × × × × × × × × @Asin × × × × × × × × × @Atan × × × × × × × × × @Atan2 × × × × × × × × × @AttachmentLengths × × × × × × × × @AttachmentNames × × × × × × × × @Attachments × × × × × × × × @Author × × × × × × × × × @Begins × × × × × × × × @Certificate × × @Char × × × × × × × × × @CheckAlarms × × × × × @ClienType × × × × × × × 函数名称 窗口标题 热点 1 热点 2 域 表单 表单操作 视图操作 导航器 布局区域 @Comrmand × × × × × × × @Contains × × × × × × × × × @Cos × × × × × × × × × @Created × × × × × × × × @Date × × × × × × × × × @Day × × × × × × × × × @DbColumn Notes数据库) ( × × × × × × × × × @DbColumn(ODBC) × × × × × × × × @DbCommand(ODBC) × × × × × × × × @DbExists × × × × × × × × @DbLookup Notes数据库) ( × × × × × × × × × @DbLookup(ODBC) × × × × × × × × × @DbManager × × × × × × × × @DbName WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 52
  • 54.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @DbTitle × × × × × × × × × @DDEExecute etal × × × × × × × × @DDEInitiate × × × × × × × × @DEFAULT × × × × × × × @DeleteField × × × × × × × × × @DialohBox × × × × × × × @Do × × × × × × × × × @DocChildren × × × × × × × × × @DocDescendants × @DocFields × @DocLength × × × × × × × × × @DocLevel × × × × × × × × × @DocNumber × @DocParentNumber × @DocSiblings @DocumentUniqueID @Domiain × × × × × × × @EditECL × × × × × × × @EditUserECL × × × × × × @Elements × × × × × × × × @Ends × × × × × × × × × @Environment × × × × × × × × × @ENVIRONMENT × × × × × × × × @Error × × × × × × × × @Exp × × × × × × × × @Explode × × × × × × × × × @Failure × × × × × × × × @Failure × @False × × × × × × × × @FIELD × × × × × × × × @GetDocField × × × × × × × × × × × × 函数名称 窗口标题 热点 1 热点 2 域 表单 表单操作 视图操作 导航器 布局区域 @GetPortsList × × × × × × × × × @GetProfileField × × × @Hour × × × × × × × × × @If × × × × × × × × × @Implode × × × × × × × × × @InheritedDocumentUn × × × × × × × × iqueID × × × × × × × × × @Integer × × × × × × × × × @IsAgentEnabled × × × × × × × @IsAvailabled × × × × × × @IsDocBeingEdited × × × × × @IsDocBeingLoaded × × × × × @IsDocBeingSaved × × × × × @IsDocTruncated × × × × × @IsError × × × × × × × × WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 53
  • 55.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @IsMember × × × × × × × × × @IsModalHelp × × × × × × × × × @IsNewDoc × × × × × × × × @IsNotMember × × × × × × × × @IsNumber × × × × × × × × × @IsResponseDoc × × × × × × × × @IsText × × × × × × × × × @IsTime × × × × × × × × × @IsUnavailable × × × × × × × @IsValid × × × × × × × × @Keywords × × × × × × × × @Left × × × × × × × × @LeftBack × × × × × × × × @Length × × × × × × × × × @Like × × × × × × × × × @Ln × × × × × × × × × @log × × × × × × × × × @LowerCase × × × × × × × × × @MailDbName × × × × × × × × × @MailEncyptSavePreferenc × × × × × × × × × e × × × × × × × × × @MailEncyptSentPreferenc × × × × × × × e × × × × × × × × × @MailSavePreference × × × × × × × × × @MailSend × × × × × × × × × @MailSignPreference × × × × × × × × @Matches × × × × × × × × × @Max × × × × × × × × × @Member × × × × × × × × × @Middle × × × × × × × × × 函数名称 窗口标题 热点 1 热点 2 域 表单 表单操作 视图操作 导航器 布局区域 @MiddleBack × × × × × × × × × @Min × × × × × × × × × @Minute × × × × × × × × × @Modified × × × × × × × × @Modulo × × × × × × × × × @Month × × × × × × × × × @Name × × × × × × × × × @NewLine × × × × × × × @No × × × × × × × × @NoteID × × × × × × × @Now × × × × × × × × × @OptimizeMailAddress × × × × × × × @Password × × × × × × × × × @Pi × × × × × × × × × @PickList × × × × × × @Platform × × × × × × × × × @PostedCommand × × × × × WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 54
  • 56.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @Power × × × × × × × × × @Prompt × × × × × × × × @ProperCase × × × × × × × × × @Random × × × × × × × × × @RefreshECL × × × REM × × × × × × × × × @Repeat × × × × × × × × × @Replace × × × × × × × × × @ReplaceSubsting × × × × × × × × × @Responses × @Return × × × × × × × × × @Right × × × × × × × × × @RightBack × × × × × × × × × @Round × × × × × × × × × @Second × × × × × × × × × @Select × × × × × × × × × SELECT × @Set × × × × × × × × × @SetDocField × × × × × × × @SetEnvironment × × × × × × × × @SetField × × × × × × @Sign × × × × × × × × × @Sin × × × × × × × × × @Sqrt × × × × × × × × × @Subset × × × × × × × × × @Success × @Sum × × × × × × × × × 函数名称 窗口标题 热点 1 热点 2 域 表单 表单操作 视图操作 导航器 布局区域 @Tan × × × × × × × × × @Text × × × × × × × × × @TextToNumber × × × × × × × × × @TextToTime × × × × × × × × @Time × × × × × × × × × @Today × × × × × × × × × @Tomorrow × × × × × × × × × @Trim × × × × × × × × @True × × × × × × × × @Unavailable × × × × × × @Unique × × × × × × × × × @UpperCase × × × × × × × × × @URLGetHeader × × × × × × @URLOpen × × × × × × @UserAccess × × × × × @UserName × × × × × × × × × @UserPrivileges × × × × × × × × × @UserRoles × × × × × × × × × @V2If × × × × × × × × × @V3UserName × × × × × × × × × WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 55
  • 57.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 @Version × × × × × × × × × @ViewTitle × × × × × × × × @Weekday × × × × × × × @word × × × × × × × × × @Year × × × × × × × × × @Yes × × × × × × × × × @Yesterday × × × × × × × × @Zone × × × × × × × × × 下表指出了受 ECL(执行控制列表)影响的函数在环境 3 中适用范围,这些函数不 在工作站上执行,除非标记 ECL 权限被授予公式的签名人。其中,环境 3 包括的 ECL 标志为下面内容:访问当前数据库、访问环境变量、访问非 Notes 数据库、访 问外部程序、发送邮件的能力、访问工作站安全性 ECL、读取其他数据库的能力。 函数在环境 3 中适用范围 函数名称 访问当前 访问环 访问非 Notes 访问外 发送邮件 访问工作站 读取其他数 数据库 境变量 数据库 部程序 的能力 安全性 ECL 据库的能力 @@DbColumn × @DbColumn(ODBC) × @Dbcommand × @DbLookup × @DbLookup(ODBC) × @DDEExecute × @DDEInitiate × @DDETerminate × @DeleteDocument × × @DeleteDocument × @DeleteField @EditECL × @EditUserECL × ENVIRONMENT × @@Environment × @GetProfileField × @MailSend × @@RefreshECL × @SetDocField × @@SetEnvironment × @SetProfileField × @Unavailable × @URLGetHeader × @URLOpen × 在下表中列出了受执行控制表(ECL)影响的命令。只有将表中所标记的 ECL 特权授予给公式的签名人,这些命令才能在工作站上执行。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 56
  • 58.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 命令在环境 3 中适用范围 命令名称 访问文件 访问当前 访问非 Notes 访问外 访问外 发送 引出 系统 数据库 数据库 部代码 部程序 邮件 数据 AdminSendMailTrace × AgentEnableDisable × AgentRun × AgentSetServerName × AgentTestRun × AttachmentDetachAll × AttachmentLaunch × DesignRefresh × EditClear × EditCopy × EditCut × EditDetach × EditInsetFileAttachment EditInsertObject EditOpenLink × EditPaste × 命令名称 访问文 访问当前 访问非 Notes 访问外 访问外 发送 引出 件系统 数据库 数据库 部代码 部程序 邮件 数据 EditPasteSpecial × EditUntruncate × EmptuTrash × ExchangeUnreadMarks × Execute × FileDatabaseCompact × FileExport × FileImport FileOpenDatabase × FileOpenDbRepID × FilePrint × FileSave × FileSaveNewVersion × Folder × FolderMove × FolderRename × MailForward × MailForwardAsAttachment × MailRequestCrossCert × MailRequestNewName × MailRequestNewPublicKey × MailSend × MailSendCertificateRequest × MailSendEncryptionKey × MailSendPublicKey × WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 57
  • 59.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 ObjectOpen × OpenDocument × RemoveFromFolder × ReplicatorReplicateHigh × ReplicatorReplicateNext × ReplicatorReplicateSelect × ReplicatorReplicateWith × ReplicatorSendMail × ReplicatorSendReceiveMail × ReplicatorStart × SerCurrenrLocation × ToolsCategorize × ToolsReplicate × ToolsRunBackgroundMacros × × ToolsRunMacro × × ToolsScanUnreadSelected × ViewRefreshUnread × 6.2.3.3 应用公式语言中的相关分析 函数引用相关文件描述 1 .邮件抬头文件( notehead . txt ) 邮件抬头文件是一个表示邮件标题单词的自由形态列表。如“ Subject ”、 “ From ”和“ To”等。为了使@Abstract 分段考虑邮件标题,则必须以这个 文件中指定的单词开始,随后接一个冒号和空格。如果要将一个邮件标题的重要 性提高,则在这个单词后边加上星号。例如: Subject * From * 2 .缩写字典( noteabbr . txt ) 文件的每一行必须包含两个单词:第一个是原单词,第二个词是它的缩写。 缩写的单词必须比其替换的词短。大小写问题按下面的方法解决(见表 2 - 11 )。 1)缩写不会转换成小写,但可能转换成大写。 2)如果缩写指定为大写字母,则它将始终以大写形式出现。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 58
  • 60.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 3)如果原单词以小写形式出现,则缩写后的单词将按简写字典中指定的那样显示。 4)如果原单词是大写或大小写混合的:如果要求匹配原单词中的第一个字母,则 缩写后文本的第一个小写字母将转化成大写;如果要求匹配原单词中第二个字母 的大小写,则缩写后文本的其余字母将转化成大写。 下表是缩写和大小写显示样例 3 .非关键词文件( notesig . txt ) 是不重要单词的自由形态列表。如“the”、“ and”和“ of”等。在计算 单词的重要性时,将忽略包含在这个列表中的所有单词。例如: the and of 4 .关健词文件(notesigl.txt ) 是重要单词的自由形态列表。如“urgent”或“immediately”等。在计算文 本的重要性时,将提高包含在此关键词列表中单词的重要性。例如: Client Boss chocolate WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 59
  • 61.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 文档级别和视图级别 1 . Windows 和 0S / 2 文件类型 (1) 文档级别 Ami Pro ANSI Metafile ASCll Text MicrosoftWOrd RTF TIFF 5 . 0 Image Word for Windows 6 . 0 WordPerfect 6 . 0 / 6 . 1 (2) 视图级别 Lotus l-2-3 Worksheet Structured Text Tabular Text 2. Macintosh 文件类型 Macintosh 不支持在文档级别引出 XTND 文件格式(Mac write II 和 Text) (l)文档级别 ANSI Metafile ASCll Text MicrosoftWord RTF TIFF 5.0 Image WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 60
  • 62.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 (2)视图级别 Lotus l-2-3 Worksheet Structured Text Tabular Text 3 . UNIX 文件类型 (l) 文档级别 Ami Pro ANSI Metafile ASCII Text Frame _ ( MIF ) Interleaf ASCII MicrosoftW6rd RTF TIFF 5.0 Image WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 61
  • 63.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 下表描述了部分样本匹配实例 l)要在当前数据库(执行公式计算的同一个数据库)内执行查找操作,可指 定””作为函数的全部参数。 在某一服务器上运行的代理只能对位于同一服务器中的数据库执行查找操 作,也就是说,””代表用户正在运行的本地 NoteslDomino 目录,并且倘若用 户碰巧有一个运行于服务器上的代理,那么该代理不能离开服务器执行查找操作。 2)要在本地数据库上执行查找操作,使用””作为服务器名并明确指定数据 库名,如”” :“DATABASE . NSF” 3)要在驻留于服务器上的 Notes / Domino 数据库中执行查找操作(从工作 站执行) 可将服务器的路径和文件名作为一个文本列表包括进来, “SERVER” , 如 : “ DATABASE.NSF”。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 62
  • 64.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 4)如果数据库有多个拷贝且位于不同的 Domino 服务器上,那么使用数据库 复本标识符同时替代服务器和数据库名,可以实现对数据库复制拷贝的访问,而 不必指定服务器名或数据库名。例如,如果使用“482569C4 :0006FF6B”(数据 库复本标识符,位于数据库属性框中)作为数据库名,那么 Notes/Domino 即可 使用复本获取所需信息。 为避免复本标识符的键人错误,选择“文件”|“数据库”|“设计摘要”, 再选择“复制”。然后从摘要里拷贝复本标识符,粘贴到公式中。 Notes / Domino 按以下顺序搜索复本,使用遇到的第一个复本。 1)工作台 如果工作台上有一个复本, Notes / Domino 将使用它。 如果工作台上有多个堆叠在一起的复本, Notes 使用最上面的复本。 如果工作台上有多个没有堆叠在一起的复本,Notes / Domino 将查找一个与 当前服务器匹配的图标并使用它。如果没有与当前服务器匹配的图标,那么 Notes/Domino 使用最先加人工作台的那个图标。 2)当前服务器 3)本地(硬盘) 一旦找到了一个复本,它将被加入到工作台中,以节省以后的查找时间。 注意:如果数据库位于 DOS 或 0S / 2 子目录下,例如 ASSEM DB . NSf , 那么在目录和数据库名之间加一个双斜杠,如“ASSEM DB . NSf ” , 这是因为公式把单斜杠当作转义字符。 启动非自动缓存 NoCache 采用 NoCache 是出于性能方面的考虑。强制 Notes / Domino 与数据库连接 以及反复检索相同的信息将花费大量时间,导致整体性能下降。但若期望较频繁 地更改数据,那么为确保信息更新而花费较多时间也是值得的。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 63
  • 65.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 如果希望确保 Notes / Domino 在每次查询时检索到的都是最新信息,即可 指定此选项。若不使用 NoCache ,查找结果将被缓存,但此时应指定 Cache 可读。 在每次查找时均能恢复上一次查找信息,即保存结果以备再次使用。每次对 同一场所(在同一 Notes / Domino 会话期且执行此查找操作的数据库保持打开) 的并发查找都会使用此信息。如果省略了 Nocache,查找结果会自动缓存。适合期 望较频繁地更改数据,确保信息更新情况。 使用函数时服务器代理及安全性 将包含函数的数据库看作源数据库,而被存取的数据库看作目标数据库。当 函数用在一个运行于服务器的代理中时,它只能存取和源数据库处在同一个服务 器上的目标数据库。源数据库必须对目标数据库至少有“读者”存取级别。如果 由于安全性原因,不能将“读者”或更高存取级别赋予“-Default-”群组,仍然 可以赋予函数宏从源数据库对目标数据库进行访问的权限。例如: l) 使用“文件” |“数据库” |“属性”,确定源数据库的复本标识符,例如: 482569C4: 0006FF6B。 2)使用“文件”|“数据库”|“存取控制”,为目标数据库的存取控制列表添加 一个新条目,条目名即为复本标识符本身,赋予此名称至少“读者”的存取级别。 在上面的功能中,用户添加了一个命名为 482569C4 :0006FF6B 的条目。这样做 特别为源数据库中的宏赋予了访问目标数据库的权限,即使“-Default-”是“不 能存取者”。 (2) 当在任何其他类型的公式或代理中使用函数时,该公式也可访问存放在用户 自己工作站上的任意目标数据库而不受限制。如果目标数据库存放在其他 Domino 服务器上,那么函数的存取由用户自己的存取级别(基于用户的 Notes 用 omino 标识符)决定。 (3) 层次名称 层次名称是由一系列部件组成,以表示全名、组织单元、组织和国家。使用 层次结构的名称可以保证每个用户和服务器都有一个独一无二的名字。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 64
  • 66.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 数据库的设计者需要确定输入用户名的方法以及它们在 Notes 应用程序中的 显示。为求简单,应该允许用户以缩写的格式输入名称,然后用@Name 将它扩展 为标准格式。也可以使用 @Name 将保存的标准格式的名称转换成缩写格式,以缩 写格式显示名称。 使用“名称”、“读者”或“作者”域时, Notes 自动地将层次名称转化成 适当的格式以显示并保存起来。如果用户键入了一个缩写的名称, Notes 会在保 存它时将其扩展成标准格式;而名称在表单中总是以缩写的格式显示。 在视图中显示层次结构名称域的内容时, Notes 不会自动进行转换,而是将 名称按标准格式显示出来。这时可以用@Name 将该名称转换为其缩写格式。 使用 DDE (l) 主要在域公式、代理、按钮和便捷图标中使用。此函数不能用在列公式 或选择公式中,也不适合于窗口标题或表单公式。 (2) 最多可同时运行 10 个 DDE 对话(在正常情况下,某一时刻只有一个对话运 行)。一旦执行完毕,应确保终止所有 DDE 对话,否则可能耗尽会话期,以至于 需要时却不能初始化更多对话。 (3) 如果用户 NOTES . INI 文件中包含如下语句: NoExternalApps = l ,那么 任何包含@DDE 函数的公式均无效,用户看不到任何错误消息,公式也不能执行。 (4) 不能在 Web 应用程序里使用此函数。 (5) 由于 Macintosh 不支持 DDE ,所以这些命令也不能用在 Macintosh 工作站 上。此外,DDE 命令的格式可能因平台或应用程序的不同而有所不同。 (6) DDE 初始化失败的原因: l) 工作站操作系统不支持 DDE ( Macintosh ) 2) 试图建立 DDE 对话的应用程序没有运行。指定文件没打开。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 65
  • 67.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 3) DDE 应用程序正在运行,但是指定主题没有打开,或者应用程序不支持@ DDEInitiate 指定主题。 4) DDE 应用程序正在运行,但是指定文件没打开。 5) 并行运行的 DDE 对话数目达到了最大值(最大值为 10 )。 与数循库相关概念 1 .惟一标识符 惟一标识数据库所有复本中的一个文档的 32 位干六讲制数。如果两个文 本共享同一个惟一的标识符,那么这两个文档互为复本。 惟一标识符是文档整个标识符数字的一部分。单击文档属性框的“信息” 附签即可看到文档标识符。“标识符”后的第一行就是惟一标识符,而其他 字符组成了文档标识符的其他部分。 一旦创建,文档的惟一标识符就不再更改,除非用户拷贝并粘贴此文档。 Notes / D omino 将粘贴文档看作是一个新创建的文档,并为它创建一个新 的惟一标识符。应用程序开发人员可以使用惟一标识符遍历文档的各个答复 层次。每个子文档都有一个特殊的域$Ref,此域包含了其父文档的惟一标识 符。这意味着可以为子文档写一个公式,通过将它的$Ref 域值和@ DocumentuniqueID 的返回值相比较,找到其父文档。 2 .指定视图或文件夹 可以使用视图全名或其同义词作为视图(或文件夹)参数。例如,如果 Last Name 视图是“查看”菜单内 By Author 的下级视图,并且具有同义词 LName,那么在视图属性框中显示的名称为: By Author\Last Name|LName 若引用此视图,那么只需使用同义词 LName (用引号括起来) : “LName” WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 66
  • 68.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 如果视图名没有同义词,由于视图 By Author 加上 Last Name 作为视图 名,并用引号括起来。由于视图名是在公式里使用,因此必须在“”的前面 再加上一个“”才能保证 Notes/Domino 的正确解释: “By Author Last Name” 3. 指定列号 要指定 columnNumber 参数,首先应从左到右计数视图中的列,最左列 的列号取为1,事实上, Notes / Domino 索引视图的方式决定了并不 对每一列都编号查找。 根据查找目的,使用下述方法计算列号: 1)从左向右计数视图里的列。在设计模式下查看视图,确保显示了所有的列, 包括用于排序或分类视图的列。 2)不计人所有显示常值的列,如“Submitted by :”或 32 。如果列中包含的公 式偶尔为每个文档返回相同的值,但此值并不是“常数”,那么计数应包含此列。 3)不计数由如下函数单独组成的所有列: @ DocChildren 、@ DocDescendants 、@ DocLevel 、@ DocNumber 、@ DocParentNumbel @ Docsiblings 、@ IsCategory 、@ lsExPandable 。 4)现在从左至右重新计数列。 5)修正后的列号就是在查找公式里指定的值。 6)如果指定了一个不存在的列,那么会得到一个非错误的空值。 4 .应用 ODBC 应注意的规则 (l)标识符 为避免在公式中存储标识符,可使用空串( " " )替代它们,需要时再给出 提示信息。若不希望其他设计者查看标识符,或在存取外部数据而要求输入用户 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 67
  • 69.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 自己的标识符时,使用这一功能非常有用。然而必须为自动运行(如代理)的公 式设置标识符和口令,因为这些公式不会显示提示信息。在每个 NoteslDomino 数 据库会话期间,只要数据库保持打开,存取数据源所需的用户标止符和口令则仅 只输入一次。如果打开另一个 Notes/Domino 数据库并执行存取同一个数据源的 工式,则需要再次输入用户标识符和口令。 (2) 口令参数 仅当指定了标识符参数,才需要使用口令参数。与标识符相同,口令既可存 储在公式中,也可使用空串代替,而在需要时给出提示。如果数据库的口令为空 串,则可从公式中省略。 例如,若要指定完整的标识符/口令,输入: ““;””(两个空串,用分号隔开)不指定标识符和口令,或在提示时输入。 “user _IDl”;“ passwordl” ”指定一个用户标识符和口令组合。 " user _ ID1 " : " user- ID2 " ; “ passwordl”:“password2”指 定两个用户标识符和口令沮合。 (3) 指定表格名 可以有选择地将表格所有者的名字包含进来以消除歧义。使用格式 owner _ “ name . table _ name”, 用一句点分隔所有者名和表格名。例如: admin . author” " 。 Table 也可引用被访问 DBMS 中的数据库视图。 (4) 指定命令字符串 command _ string 命令字符串可以由如下选项任意组合: l SQL 语句(必须使用后台 DBMS 能接受的 SQL 语法)。 l 一条使用后台 DBMS 命令语言的命令语句。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 68
  • 70.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 l 存在于后台 DBMS 里的过程名(过程包含一个或多个在@DbCommand 调 用此过程时激活的命令字串)。 时间-日期值必须按数据库的格式,而非 Domino 的格式输入。例如, DB2/2 在 里使用的格式为 2000-01-21-12 . 00 . 00,而不是 2000-01-21-12 : 00 : 00 。 (5) 指定空处理 一般情况下,空值将被忽略以缩短返回列表的长度(同以下描述的“Disoard” 选项相同)。 为了控制如何处理空值,指定下列选择之一,添加到 column 参数中,各个参 数间用冒号分隔 l “Fail” :如果数据列包含任何空值,将会生成错误消息(此消息不返 回任何数据) : “发现空值-取消@Db 功能” l “ Discard " :去掉空值,缩短返回值列表。若执行@DbColumn 公式时 删掉了一个或多个值,状态条中就会显示此消息:“警告:空值从@Db 列 表中删除” l “Replacement value” :指定空值的替代值。替代值必须是一个用引号 括起来的字串,但如果列是数字或日期-时间列,那么字串必须能够转化 成相应类型。 如果公式中包含排序关键字,则返回值列表在插人替代值之前排序。排序时, 按升序排列的列表中,空值位于表首,反之则在表尾。排序完成后才进行替换。 这可能导致列表的某些值错排。例如,如果指定“zzz”作为替换值,那么即使按 升序排序列表,所有的“zzz”值仍将出现在表头。 若执行公式时替换了一个或多个值,状态条中就会显示:“警告:用用户定 义值取代@Db 列表中空值”。一般说来,替换值应该是那些不作为有效数据出现 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 69
  • 71.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 在列表中的值。例如,若是文本列,替换值可以是***,这样能方便地在 NoteslDomino 中找到它们。 样例 使用域来获取 CGI 变量 当域和 CGI 变量具有相同的名称时,Domino 会从 CGI 环境中拷贝域值,并将 它放在域中。应该注意两点: l 如果域是可编辑的,不必指定公式。 l 当编辑预览或编辑时,将域隐藏起来。 例如,可以创建一个名为 HTTP _ USER _ AGENT 的域。这个域主要获取有关 用户所使用的浏览器的信息。可使用这个域来查看用户浏览器是否支持应用程序 的属性。 HTTP _ USER _ AGENT 变量的一般格式是软件/版本库/版本。最左边的 11 个字符主要说明了浏览器的版本。你可以在公式中评价它,并在此基础上显示不 同的信息。例如: @If (@Left ( HTTP _ USER _ AGENT ;11)=" Mozilla 3.0 " ; " Netscape Navigator " ; @Left( HTTP _ USER_AGENT ; 11)= "MSIE 2.0 "; "Hicrosoft Internet Explorer " ; " " 表 2-14 描述了 HTTP _ USER _ AGENT 返回的值。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 70
  • 72.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 基于公式的代理 1.传递文档 当文档没有附件时,遵循下列步骤: l) 在 Agent Builder 窗口中,单击 Formula 选项。 2)在程序员面板中输入下列公式: @lf (@Attachments > 0@Return (“”) ; @Mai1Send ( “ Gina”; “”;””; Subject ; " Please handle this " + @Newline ; " Body " ; " " ) ) ; 2 .使用@ URLOpen 命令来呼叫代理 @ URLOPen 函数允许在公式中引用代理。你可以将公式与按钮联系起来,这样 可以击活 Web 浏览器的代理。当用户单击按钮时,可以运行这些代理。下面这个 例子说明了如何击活名为 WebDelete 的代理。注意这个代理是作为一个参数传递 到文档的 UNID 的。 UNID: = @Text(@DocumentUniqueID ) ; @URLOpen ( " / +@Rep ; aceSubstring(@ DbName;-1 ); " " ; " +" ) + " / WebDelete ? openAqent &"+ UNID ) 定制搜索和结果表单 可以通过在搜索输入和输出表单中增加设计元素来定制搜索。一个定制的搜索 表单必须以 $ $ Search 命名,或者作为实名,或者作为别名。当用户单击链接 打开搜索表单时,Domino 在当前数据库或在搜索数据库中寻找与这个名称匹配的 表单。如果这个表单存在, Domino 打开它。 则 如果这个表单不存在, Domino 使 则 用在 Domino 服务器的标签目录中的默认 search . htm 文件。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 71
  • 73.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 1 .创建一个新的搜索表单可以通过定制 search . htm 文件来创建一个新的搜 索表单,也可以拷贝和粘贴由 Search Site 数据库提供的搜索表单。 Search Site 在 数据库中有两种 We b 搜索表单: l Web Search Simple。用于简单搜索。它包括与 web search Advanced 表单 的链接。 l " Web Search Advaneed 。这种表单允许用户创建更高级的搜索。 完成表单设计后开始在 Search Site 数据库中进行工作。为了使用数据库中视 图级搜索表单,必须更改$$ Return 域中的公式。具体操作步骤为: l) 将 Web Search SimPle 表单拷贝到要使用的数据库中。 2) 在设计状态下打开表单。修改$ $ Return 域。原来$ $ Return 域公式的 开始部分为: DBName :=@Subset(@ DbName; -1); "【【/ " + DBName +" ? SearchSite & Query=” + Query + " & Searchorder=" +@Text ( Sort ) + " & SearchMax="+@Text ( MaxResults ) + " & SearchWV=" + @lf(ExactMatch=" "; " TRUE";"FALSE") + " & SearchThesaurus="+@If ( UseThesaurus="" ;" FALSE";"TRUE ") + " 】】" 将?Searchsite 改成?SearchView ,并在 DBName 后面增加视图名。新公式 的开始如下: DSName : = @Subset(@DbName;-l ); "[ [/ " + DBName + " / ViewNam e / ? SearchView & Query="十 Query + " + … ViewName 是数据库中的视图名。公式的其他部分不变。既然创建了 URL ,视 图名必须以淦江( l )开始和结束,视图名中的空格必须以加号( + )代替。 如果需要在数据库中包含高级搜索,则在 Web Search Adanced 表单中也要进 行相同的修改。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 72
  • 74.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 2 .创建 TeamRoom 搜索下面将要创建一个使用简单的定制搜索表单。这个表 单允许用户构建一个自由文本的搜索或者使用事先定义好的值来创建查询。这个 表单也使得用户将文档数设置成返回值。基于用) 的选择,表单生成搜索视图 URL , 并返回找到的文档列表。 为了避免强迫用户学习,创建如下的查询语法: (< FreeText >)AND ( FIELD Remotewe_User=Jane woody ) AND ( FIELD Subject = < Documentsubject > ) & Searchorder = < Value > & Start =< Value > &Count= < Value > & Searcht wv = < Boolean > & SearchTheSaurus =<boolead > 可以创建一个使用简单的接口进行复杂查询。 在这个数据库 TeamRoom 中假定已经创建了一些文档。我们想要用户搜索文档, 在这些文书中,search 表单的 Appointment 域的 subjec 域是可用的,而且搜索文 档包含了 search For FreeText 域的值(如果值是可输入的)。 l) 以创建一个新的表单开始,并赋予别名$ $ Search。 2) 创建非隐藏域。 l Name Name 域设置当前用户名,用于查找角户文档。 选择 Field 类型为“文本和可计算的”,并在设计窗格中(默认值)输 入下列公式: @Name(【 CN 】;@UseName ); l FreeText FreeText 是一个用户可以输入搜索字符串的域。 l Appointment Appointment 域是一个包含下列值的关键词域。 Customer meeting 、 Internal meeting 、 Team meeting 、 Reminded 、 Untitled 。 2)创建隐藏域。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 73
  • 75.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Query 域是可计算的。它用于生成查询。在此域中输入以下公式: user:=" FIELD RemO Remote_User= " + Name ; app:=" FIELD Subject = " + Appointment; user 十@If( FreeText!=" " ; "AND ("+FreeText+" ) " ; " " ) +@If ( Appointment!=" " ; " AND (" + app + " )";" " ) 变量 user 得到" FIELD Remote _ user =" + Name 域,它是当前用户的名 字。变量 app 得到" FIELD subject = "十 Appnintment ,这用于确定搜索查询。 @ lf 函数的其他部分查找用户输入的部分。如两个域的值都是空的.则 Domino 只使用 Name 域来创建搜索查询。 l 使用可计算的$$ Return 域,来生成搜索 URL ,并将浏览器立刻返回查询 结果。为了返回 URL , $ $ Return 域必须在括号中指定 URL。 DBName:=@subset(@DbName;-1 ) ; " [ [ / " + DBName + " / openview / ? Searchview & Query = " + Query + " ] ] " 当用户在表单中输入数据时,类似域搜索表单,Domino 通常会认可的。为了 拒绝$ $ Return 域输入的值,并直接返回结果页面,我们关闭双括号中的 URL。 l 一般当 Web 用户提交表单时,Domino 将会在数据库中创建一个文档。在 本书中,我们不想创建有查询表单的文档。为了避免这些事情,我们使用 名为 saveOptions 的特殊 Notes 域。如果 saveOptions 的域值是“0 " , 则 Domino 不会保存文档。 现在用户可以通过构建自由文本的查询和简单点击,在数据库中构建复杂查 询,而不必担心需要纠正语法错误。 注意:这里使用 Open view 视图来显示所有用 Search 查询搜索到的数据库文档。 4) 从我们的 web 站点增加一个链接,使用 URL 来打开定值的搜索表单。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 74
  • 76.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 [ < / < database > / < view > / $ $ Search > ] 5) 为了增强搜索表单,可以增加一些域,以使表单具有下列搜索 arguments l SearchMax 这个域决定了你能返回的最大文档数。 语法是: searchMax = [ n ] l Start 这个域决定了第一次显示的结果列表中的文档。 语法是: start = [ n ] l Count 这个域指定了每一页显示的结果数,直到达到 searchMax 的 限制。 语法是:Count= [ n ] l SerchFuzzy 这是一个关键词域,用于指定是否只返回与当前词完全 匹配的文档。语法是: searchFuzzy = TRUE, FALSE] 默认值是 FALSE [ , l Searchwv 这是一个关键词域,它用于发现与辞典定义的词汇的不同 之处。 语法是: searchwv= [TRUE,FALSE ] ,默认值是 TRUE 。 l Searchorder Sort 域决定了返回的文档的顺序 语法是: Searchorder = [ 1 , 2 , 3] l 表示" sort by relevance " ; 2 表示“sort by date ascending" ; 3 表示“sort by date descending" ,默认值是 l 。 6)定制搜索结果表单 为了定制搜索结果页面,创建一个表单,并赋予它一个表单名,取如 下之一: l $ $ SearchTemplate for < viewname > WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 75
  • 77.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 将表单与指定的视图联系起来。表单名包括< viewname > ,它是视图的别 名,或者如果不存在别名,则是视图名。 l $ $ SearchTemplateDefault 这个表单作为所有未指定表单的 web 搜索的默认搜索结果表单。 这两个表单都要求在表单中有$ $ ViewBody 域。域值被 Domino 忽视了,但 是在搜索结果表单中必须有这个域。 注意,下列由 Domino 在默认搜索结果表单中提供的特征不能构建搜索结果页面: l 找到的文档数。 l 重新查询的能力。 l 允许用户重新设置搜索结果的搜索条 6.2.4 JAVASCRIPT JavaScript 在 DOMINO 的 B/S 开发中是一个非常重要的实现方式,主要的作用 体现在如下几点: 1)和 XML 结合形成 AJAX 体系以完成异步数据处理,比如在选择人员的同时 想快速获取其相关职务而不是所有的相关信息时。 2)对表单数字域合法性校验时,经由 HTML 首页内容调用外部文件、或存在 于表单的 JSHEAD 以及表单内置 HTML 中,如: function CheckValue() { var obj=document.all; if(obj.Subject.value==""){ alert("标题不能为空!!!"); obj.Subject.focus(); return false; } WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 76
  • 78.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 if(obj.sDate.value>obj.eDate.value){ alert("结束时间不能小于开始时间!!!"); obj.eDate.focus(); return false; } return true; } 3) 对表单上的热点操作进行模拟点击时。 以上是 JavaScript 在 DOMINO 的 B/S 开发中所起的主要作用, 接着我们一起 看下其本质和语言的主要特点及实现方式。 首先从本质上来说 JavaScript 是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与 HTML 超文本标记语言、 Java 脚本语言(Java 小程序)一起实现在一个 Web 页面中链接多个对象,与 Web 客户交互作用。 从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的 HTML 语言 中实现的。它的出现弥补了 HTML 语言的缺陷,它是 Java 与 HTML 折衷的选择,具 有以下几个基本特点: 1)是一种脚本编写语言 JavaScript 是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本 语言一样,JavaScript 同样已是一种解释性语言,它提供了一个易的开发过程。 它的基本结构形式与 C、C++、VB、Delphi 十分类似。但它不像这些语言一样, 需要先编译,而是在程序运行过程中被逐行地解释。它与 HTML 标识结合在一起, 从而方便用户的使用操作。 2)基于对象的语言。 JavaScript 是一种基于对象的语言,同时以可以看作一种面向对象的。这意 味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象 的方法与脚本的相互作用。 简单性-JavaScript 的简单性主要体现在:首先它是一种基于 Java 基本语句 和控制流之上的简单而紧凑的设计, 从而对于学习 Java 是一种非常好的过渡。其 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 77
  • 79.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 次它的变量类型是采用弱类型,并未使用严格的数据类型。 安全性-JavaScript 是一种安全性语言,它不允许访问本地的硬盘,并不能将 数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现 信息浏览或动态交互。从而有效地防止数据的丢失。 动态性的-JavaScript 是动态的,它可以直接对用户或客户输入做出响应,无 须经过 Web 服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。 所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称 为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当 事件发生后,可能会引起相应的事件响应。 跨平台性-JavaScript 是依赖于浏览器本身,与操作环境无关,只要能运行浏 览器的计算机,并支持 JavaScript 的浏览器就可正确执行。从而实现了“编写一 次,走遍天下”的梦想。 实际上 JavaScript 最杰出之处在于可以用很小的程序做大量的事。无须有高 性能的电脑,软件仅需一个字处理软件及一浏览器,无须 WEB 服务器通道,通过 自己的电脑即可完成所有的事情。 综合所述 JavaScript 是一种新的描述语言,它可以被集成到 HTML 的文件之 中。 JavaScript 语言可以做到回应使用者的需求事件 (如: form 的输入) ,而 不用任何的网路来回传输资料,所以当一位使用者输入一项资料时,它不用经过 传给伺服端 (server)处理,再传回来的过程,而直接可以被客户端 (client) 的 应用程式所处理。 JavaScript 和 Java 很类似,但到底并不一样! Java 是一种比 JavaScript 更复杂许多的程式语言, JavaScript 则是相当容易了解的语言。 而 JavaScript 创 作者可以不那麽注重程式技巧,所以许多 Java 的特性在 Java Script 中并 不支援。 因此接着我们看看 JavaScript 和 Java 的区别: 虽然 JavaScript 与 Java 有紧密的联系,但却是两个公司开发的不同的两个 产品。Java 是 SUN 公司推出的新一代面向对象的程序设计语言,特别适合于 Internet 应用程序开发;而 JavaScript 是 Netscape 公司的产品,其目的是为了 扩展 Netscape Navigator 功能,而开发的一种可以嵌入 Web 页面中的基于对象和 事件驱动的解释性语言, 它的前身是 Live Script;而 Java 的前身是 Oak 语言。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 78
  • 80.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 下面对两种语言间的异同作如下比较: 1)基于对象和面向对象 Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。 JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用 的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver) 的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。 2)解释和编译 两种语言在其浏览器中所执行的方式不一样。Java 的源代码在传递到客户端 执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器, 它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。 JavaScript 是一种解释性编程语言,其源代码在发往客户端执行之前不需经 过编译,而是将文本格式的字符代码发送给客户编由浏览器解释执行。 3)强变量和弱变量 两种语言所采取的变量是不一样的。 Java 采用强类型变量检查,即所有变量在编译之前必须作声明。如: Integer x; String y; x=1234; x=4321; 其中 X=1234 说明是一个整数,Y=4321 说明是一个字符串。 JavaScript 中变量声明,采用其弱类型。即变量在使用前不需作声明,而是 解释器在运行时检查其数据类型,如: x=1234; y="4321"; 前者说明 x 为其数值型变量,而后者说明 y 为字符型变量。 4)代码格式不一样 Java 是一种与 HTML 无关的格式,必须通过像 HTML 中引用外媒体那么进行装 载,其代码以字节代码的形式保存在独立的文档中。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 79
  • 81.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 JavaScript 的代码是一种文本字符格式,可以直接嵌入 HTML 文档中,并且可 动态装载。编写 HTML 文档就像编辑文本文件一样方便。 5)嵌入方式不一样 在 HTML 文 档 中 , 两 种 编 程 语 言 的 标 识 不 同 , JavaScript 使 用 <Script>...</Script>来标识,而 Java 使用<applet>...</applet>来标识。 静态联编和动态联编 Java 采用静态联编, Java 的对象引用必须在编译时的进行, 即 以使编译器能 够实现强类型检查。JavaScript 采用动态联编, JavaScript 的对象引用在运行 即 时进行检查,如不经编译则就无法实现对象引用的检查。 最后我们再一起回顾下 JS 和 DOMINO 应用开发结合的总结: JavaScript 在浏览器中执行,Notes 客户机提供了简单有效的方法为用户界 面编程。可以将 JavaScript 代码放入特殊的 JavaScript 事件中,对于仅 Web 适 用的应用程序也可以放入 HTML 中。Domino Designer 对象与标准JavaScript 对 象模型有关。 JavaScript 事件 以下 Domino 对象有 JavaScript 事件处理程序:表单、子表单、页面、域、 (4) 操作、按钮和操作热点。在 编程窗格中,可将代码附加到这些事件处理程序中。 当事件在支持事件的浏览器中和 Notes 客户机(受到限制)中发生时,此代码才 执行。 JavaScript 事件表 下表列出了 Domino Designer 中的 JavaScript 事件处理程序。“只适用于浏览 器”表示事件处理程序只能用于支持它的浏览器。“浏览器和 Notes 客户机”表 示事件处理程序用于支持它的浏览器和 Notes 客户机。 事件 表单、子表单、页面 域 操作、按钮、热点 JSHeader 浏览器和 Notes 客户机 对于表单、 子表单或页面 使用 JSHeader onBlur NA 浏览器和 Notes 客户机 只适用于浏览器 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 80
  • 82.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 事件 表单、子表单、页面 域 操作、按钮、热点 onChange NA 只适用于浏览器 NA onClick 只适用于浏览器 只适用于浏览器 浏览器和 Notes 客户机 onDblClick 只适用于浏览器 只适用于浏览器 只适用于浏览器 onFocus NA 浏览器和 Notes 客户机 只适用于浏览器 onHelp 只适用于浏览器 NA 只适用于浏览器 onKeyDown 只适用于浏览器 只适用于浏览器 只适用于浏览器 onKeyPress 只适用于浏览器 只适用于浏览器 只适用于浏览器 onKeyUp 只适用于浏览器 只适用于浏览器 只适用于浏览器 onLoad 浏览器和 Notes 客户机 NA NA onMouseDown 只适用于浏览器 只适用于浏览器 只适用于浏览器 onMouseMove 只适用于浏览器 只适用于浏览器 只适用于浏览器 onMouseOut 只适用于浏览器 只适用于浏览器 只适用于浏览器 onMouseOver 只适用于浏览器 只适用于浏览器 只适用于浏览器 onMouseUp 只适用于浏览器 只适用于浏览器 只适用于浏览器 onReset 只适用于浏览器,只适用 NA NA 于表单 onSelect NA 只适用于浏览器 NA onSubmit 浏览器和 Notes 客户机 NA NA onUnload 浏览器和 Notes 客户机 NA NA 用于浏览器和 Notes 客户机的事件 必须用于浏览器和 Notes 客户机的代码限于以下事件: • 对于文档预处理和后处理,使用 onLoad、onUnload 和 onSubmit。 • 对于进入和退出域的处理,使用 onFocus 和 onBlur。 • 对于操作、按钮或操作热点,使用 onClick。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 81
  • 83.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 JSHeader 事件 JSHeader 是一个特殊的事件处理程序,可装载对象中所有事件都可访问的诸 如函数和全局变量声明的代码。该代码位于 Domino 生成的 HTML 中的 <HEAD> 标 记下。 onSubmit 事件 执行 FileSave @command 时,在浏览器和 Notes 客户机中发生 onSubmit 事 件。要在浏览器中模拟提交文档,可先执行 FileSave 再执行 FileClose @command。在浏览器中,仅执行 FileClose 不能触发 onSubmit。在 Notes 客户 机中,仅执行 FileClose 能够触发 onSubmit,并使系统询问“希望保存这个新 文档吗?”。从 onSubmit 事件返回错误以终止保存操作。 在 Notes 客户机中启用 JavaScript 要在 Notes 客户机中运行 JavaScript,用户必须在“文件”“惯用选项” “用户惯用选项”中“其他选项”下面选中“启用 JavaScript”。要扩展或限制 安全性,用户必须选择“安全性选项”,然后选择“JavaScript 安全性”。 HTML 中的 JavaScript 通过使用如下所示的标准 SCRIPT LANGUAGE 标记,可在可以放置 HTML 的任何地 方使用 JavaScript。此代码只在支持 JavaScript 的浏览器中执行。 <SCRIPT LANGUAGE="JavaScript"> code goes here </SCRIPT> 如果引用域,JavaScript 代码必须在表单的域之后。 可以在表单、子表单或页面上的 HTML 文本中嵌入计算域和计算文本。 在 Notes 客户机中,HTML 文本显示为纯文本。可以使用以下“公式为真时隐藏 段落”的公式隐藏它: @ClientType = "Notes" WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 82
  • 84.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 可以使用“javaScript”协议将 JavaScript 置于 URL 中,例如: <A HREF="javaScript:code goes here">prompt</A> 通过使用打印语句将 JavaScript 作为 HTML 发送到浏览器中,可以从代理运行 JavaScript。例如,在 LotusScript 中: Print "<SCRIPT LANGUAGE=JavaScript>" Print "code goes here" Print "</SCRIPT>" 要从 JavaScript 运行代理,可以将位置对象的 href 属性设置为 URL 以用于打 开代理。URL 可以是相对于当前主机的 URL。例如: location.href = "/dbname.nsf/agentname?OpenAgent&arg1=val JavaScript 对象模型 Domino 支持标准 JavaScript 对象模型。关于 JavaScript 对象模型的详细信息, 请参阅 http://developer.netscape.com/tech/javaScript、 http://developer.netscape.com/docs/manuals/js/client/jsguide 和 http://msdn.microsoft.com/scripting。 对象模型的浏览器执行方式取决于浏览器。Notes 客户机可执行对象模型,但有 些例外。关于 Notes 执行方式的信息,请参阅 notes.net/notesua.nsf 中的 《Notes R5.0 Client DOM》。 导航器 浏览器对象应用于当前打开的表单、页面、视图或帧结构集。无论基本 Domino Designer 对象是什么,appName、appCodeName、appVersion、platform 和 userAgent 属性都可用来调用浏览器或客户机并返回相同的信息。 窗口 窗口对象适用于当前打开的表单、页面、视图,对于帧结构集,适用于焦点 所在的帧结构。假设设计两个页面(分别命名为“Page One”和“Page Two”) 以及一个具有两个帧结构(分别命名为“High” “Low” 的帧结构集, “High” 和 ) 其中 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 83
  • 85.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 打开“Page One”,“Low”打开“Page Two”。如果单独打开“Page One”,则 window.status 是指“Page One”的状态属性。如果打开了帧结构集,则当焦点 位于“High”上时,window.status 是指“Page One”,而当焦点位于“Low”上 时,window.status 是指“Page Two”。 帧结构 可以使用名称并通过帧结构数组访问 Domino 帧结构。在“帧结构属性”框 中指定名称。使用“top”属性访问表示帧结构集的窗口。例如,如果帧结构集有 两个名为“High” “Low” 和 的帧结构,可以将第一个帧结构作为 window.top.High 或 window.top.frames[0] 引用,而第二个作为 window.top.Low 或 window.top.frames[1] 引用。 名称属性开头包含 Domino 帧结构名称,如果窗口不表示 Domino 帧结构, 则为空。嵌套的帧结构表示嵌套的 Domino 帧结构集。例如,如果“Low”帧结构 包含另一个帧结构集,而该帧结构集有两个名为“Left”和“Right”的帧结构, 则可以将“Left”引用为 window.top.Low.Left、window.top.frames[1].frames[0] 或名称和帧结构元素的某种组合方式。 使用“parent”属性访问帧结构的父窗口。如果焦点位于上例中的“Right” 帧结构,则 window.parent 是指 window.top.Low,而 window.parent.Left 是 指相邻的 window.top.Low.Left。 历史记录和位置 这些对象适用于父窗口适用的所有项目。 文档对象 文档对象表示当前打开的 Domino 表单、页面或视图的内容。文档对象包含以 下内容: • 小程序数组包括 Domino 操作条、视图和 RTF 文本小程序以及引入的小程序。 小程序由 HTML 中的 <APPLET> 标记表示。请参阅《Application Development (8) with Domino Designer》 “ 添加小程序” 如果在 中的 。 “小程序属性” HTML 的 标记下指定了一个名称,则可以使用名称引用小程序,例如: WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 84
  • 86.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 document.AppletName。 • 链接数组包括 Domino 操作、链接热点和操作热点,在 HTML 中由 <A> 标记 表示。如果在“热点属性”框的 HTML 标记下指定了一个名称,则可以使用 名称引用操作热点,例如:document.HotspotName。 Domino 链接热点不包含事件处理程序。然而,可以在“热点属性”框的 <HTML> 标记下的“其他”中指定一个处理程序。 • 图像数组包括 Domino 附件、图像资源和图片,在 HTML 中由 <IMG> 标记表 示。如果在“图片属性”框的 HTML 标记下指定了一个名称,则可以使用名 称引用图片,例如:document.PictureName。 可通过以下方式引用 Domino 图像资源:使用指定数据库名称或复本标识符 的 URL,后面跟着图像资源的名称,例如:/Web+Test.nsf/newdam.gif。 • 表单数组一般有一个元素,document.forms[0] named _DominoForm,在 HTML 中由 <FORM> 标记表示。它有指定元素的数组,包含任何类型的对象,如 Button、Text、Textarea、Password、Select、Radio、Checkbox、Hidden 和 FileUpload。 • Button 对象表示 Domino 按钮,在 HTML 中由 <INPUT TYPE=button> 标记 表示。如果在“按钮属性”框的 HTML 标记下指定了一个名称,则可以使用 名称引用按钮,例如:document.forms[0].ButtonName。 • Text 对象表示类型为文本、日期/时间、数字、名称、作者和读者的 Domino 域,它们在 HTML 中由 <INPUT> 标记表示。可以使用 Text 对象的 Domino 域 名称引用它们,例如:document.forms[0].FieldName。 • TextArea 对象表示 RTF 文本类型的 Domino 域。它在 HTML 中由 <TEXTAREA> 标记表示。可以使用 TextArea 对象的 Domino 域名称引用它们,例如: document.forms[0].FieldName。 • Password 对象表示口令类型的 Domino 域,在 HTML 中由 <INPUT TYPE=password> 标记表示。可以使用 Password 对象的 Domino 域名称引用 它们,例如:document.forms[0].FieldName。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 85
  • 87.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 • Select 对象表示对话框列表、列表框和组合框类型的 Domino 域, HTML 中 在 由 <SELECT> 标记表示。可以使用 Select 对象的 Domino 域名称引用它们, 例如:document.forms[0].FieldName。 • Radio 对象表示单选按钮类型的 Domino 域,在 HTML 中由 <INPUT TYPE=radio> 标记表示。可以使用 Radio 对象的 Domino 域名称引用它们, 例如:document.forms[0].FieldName。 • Checkbox 对象表示复选框类型的 Domino 域,在 HTML 中由 <INPUT TYPE=checkbox> 标记表示。可以使用 Checkbox 对象的 Domino 域名称引用 它们,例如:document.forms[0].FieldName。 • Hidden 对象表示选择了“当文档为下列情况时隐藏段落”的 Domino 域。无 论是何种类型的域,如果在“表单属性”框中选择了“产生所有域的 HTML” 选项,隐藏域在 HTML 中都由 <INPUT TYPE=hidden> 标记表示。否则,隐藏 域对于浏览器中的 JavaScript 是不可访问的;在 Notes 客户机中 JavaScript 永远都不能访问隐藏域。可以使用 Hidden 对象的 Domino 域名 称引用它们,例如:document.forms[0].FieldName。 • FileUpload 对象没有直接的表示方式表示为 Domino 域类型。通过创建一个 域(如文本类型)并在 HTML 标记下的“其他”中指定“INPUT TYPE=file”, 可以生成这种对象。在 Notes 客户机中不能访问 FileUpload 对象。 在“编辑”模式下,Domino 域对于浏览器和 Notes 客户机中的 JavaScript 是 可访问的,但对于隐藏域有一些限制(如上所示)。在“阅读”模式下,Domino 域 对于浏览器中的 JavaScript 是不可访问的,除非在“表单属性”框中选择了“产 生所有域的 HTML”。在“阅读”模式下,Domino 域对于 Notes 客户机中的 JavaScript 是永不可访问的。 Domino 对象 可使用 JavaScript 访问通过 Java 和 CORBA 可获得的 Domino 对象。 执行以下步骤: (11) 1. 在将包含 JavaScript 代码的表单或页面上,创建扩展 AppletBase 的小 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 86
  • 88.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 程序。关于编码这种小程序的信息, 小程序可以执行所有操作。它的作用就 是通往 Domino 对象的网关。 2. 在“Java 小程序属性”框中,选中“小程序使用 Notes CORBA 类”。 3. 对于 Notes 客户机上的部署, “用户惯用选项” 可在 框中选中“从 JavaScript 启用 Java 进行存取”。还可选择“安全性选项”按钮,然后选择“Java 小 程序安全性”单选按钮,并确保对于相应的用户选择了“访问 Notes Java 类”。 4. 要通过 CORBA 访问类,确保“Domino 目录”中的“服务器”记录在“安全 性”附签下的“IIOP 限制”区段中正确记录了允许“运行受限制的 Java/JavaScript”和“运行无限制的 Java/JavaScript”的用户。 5. 在 JavaScript 代码中,引用小程序以访问 Domino 对象的类和方法。首先 需要调用 AppletBase.openSession( ) 或 AppletBase.openSession("username", "password") 以获取 Session 对象。 例如,如果扩展 AppletBase 的小程序是表单或页面上的第一个小程序,且 不需要用户名和口令,则以下代码起作用: session = document.applets[0].openSession() 然后可以使用返回的 Session 对象以获取其他 Domino 对象。 在 Notes 客户机中,可以调用 AppletBase.getContext(Session) 以获取 NotesAppletContext 对象。该对象包含以下方法:getServer( ) 返回包含工作 站的小程序或空字符串的服务器名称;getDatabase( ) 返回包含小程序的数据库 的文件路径和名称;getDocument( ) 返回包含小程序或空值(如果文档还未保存) 的文档的通用标识符。 6.2.5 HTML&CSS HTML&CSS 在 DOMINO 的 B/S 开发中是一个非常重要的实现方式,他们的互相配 合才保证了我们的 B/S 应用界面的丰富多彩。在开发之中 HTML 往往写在内置 HTML 部分。而 CSS 则可由 HTML 首页内容调用外部文件、或存在于表单对象的 HTML 属 性以及内置的 CSS 对象中。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 87
  • 89.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 接着我们还是先看下 CSS 的本质分析: CSS(Cascading Style Sheets) 中文翻译为 层叠样式表单,简称样式单。 1998 年 5 月 12 日,Cascading Style Sheets,level 2 成为了 W3C 的新标准。同 时,”W3C CoreStyles "和 CSS2 Validation Service" 以及“CSS Test Suite" 宣 布成立。它是一组样式,样式中的属性在 HTML 元素中依次出现,并显示在浏览器 中。样式可以定义在 HTML 文档的标志(TAG)里,也可以在外部附加文档作为外 加文档。此时,一个样式表单可以作用于多个页面---甚至整个站点,因此具有更 好的易用性和扩展性。我个人认为 CSS 好比是 HTML 语言的 PLUSIN(插件) ,插件 的功能大家应该知道,就是壮大原有的功能。你可以精确的控制主页里的每一个 元素,比如一个字,用 CSS 你可以给它控制它的前景色、背景色、背景图片、在 页面的精确位置,四周加入边框等。 具体效果我们看下如下的示例: 如果是在表单或页面插入一个图片,我们一般会用<img src="flower1.jpg" >,得到如下效果: 而采用 CSS 做模糊化修饰之后,描述代码变为<img src="flower1.jpg" style ="filter:blur(strength=50)"> WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 88
  • 90.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 模糊效果处理后的图片,哪个更漂亮,你觉得呢!而以前如果要实现类似效 果,肯定需要借助于 Photoshop 之类的图象软件。 6.2.6 Java 6.2.6.1 什么是JAVA JAVA 是由 Sun Microsystems 公司出品和维护的程序语言,它面向对象、可 移植、多线程、支持网络。 Java 是事实上的标准化语言。虽然 Sun 公司最终控制了 Java ,但其很强的 适应性,使它对许多创意和目的来说都成为一种标准。从而 Sun 公司允许集团开 发者通过 java 集团化的开发过程来更好地控制 Java 的演化。 java 程序由称为“Javavirtual Machine (或 JavavM ,即 Java 虚拟机)” 的程序来运行,而不是由操作系统(Windows95 / 98 / NT UNIX 等)来运行。在 效果上看,为 javavm 是一个操作系统中的操作系统,其中 Java 程序可以执行。 不考虑 Java 程序开发所需要的平台,Java 程序是被编写成在 JavavM 中所使用 的一般的 API , 只要 Java 能用于任何一个特定的操作系统,那么 Java 程序(理 论上)应该不用修改就能运行。 这个技术是 Java 口号“一旦编写成,就可在任何地方运行”的基础,最著名 的 JavaVM 的例子是在浏览器(如 IE XN )中编写的 Java 程序。 Java 程序通常在浏览器中按小程序(小应用程序)运行。作为一个小程序, Java 程序与 W eb 页结合,并且它会自动地随着所在的 W eb 页下载到计算机上。 Java 程序也可作为单独的应用程序运行,就像在 web 应用程序中执行服务器端过 程的“Servlets””一样〔 与 Domino 代理相似)。 Java 程序(特别是小程序)一般不允许向它们运行所在系统的硬盘进行读和 写。从 web 应用程序的前景来说,存在于一个 Domino 环境中 Java 的最明显特性 是其作为一个 defacto 标准的开放性,以及它在客户端(浏览器)和服务器端执 行的能力。与之相比,只被 Lotus 产品和 Web 支持的 LotusScript 就只能处理服 务器端的任务而不能处理浏览器中的任务。Java 是一种特别有前景的技术,并且 事实上得到几乎所有的大公司支持。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 89
  • 91.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Java 小程序与 HTML 相比提供了更活跃的、交互式的用户界面,这是因为小程 序是一个可在浏览窗口中执行的实际程序,并且可以对键盘和鼠标操作作出响应。 作为对 JAVA 小程序段能力的检验,Domino 的设计器可以允许用户为特定的对象— 视图、大纲、操作栏和多信息文本域设置属性,Java 小程序的这个属性使得它们 比 HTML 更优秀。 6.2.6.2 是否应该立即在Domino中应用Java呢? 1) 在单位的其他领域也使用 Java 吗?这是不是向前发展时的战略性技术呢?; 2)是在集团内部拥有 Java 专家,还是将外出寻找专家呢? 3)是否在 LotusScript 编程方面进行了投资(如编程者或代码行本身)?用户 考虑过重新设置和转变代码(如果有必要的费用)? 4 )Domino Designer IDE 没有包含一个 Java 资源调试程序,即可以一步步操做 JAVA 程序,从而能寻找出错误的程序。虽然 Domino Designer IDE 确实给了 用户编写 Java 类的能力,并且提供语法检查,然而,实际上,用户必须使用 第三部份的 IDE(Borland Builder Symanteccaf 6 )编写和修改 Java 中心, 然后将代码输入到设计器中。 5)Notes 客户的 UI 类只能通过 LotusScript 或 Java 小程序编写。 6) LotusScript 不同, 与 Java 可远程利用 CORBA 从一个浏览器中操作 Domino 服务器的对象。 6.2.6.3 DOMINO对象模型对JAVA的支持 Domino 对象模型包括数据库、视图和文档,通过 Java 语言中的一个特殊的类 或包提供给了 Java 编程。 为了说明 Java 和 Domino 的交互,我们将集中讨论使用 Java 来进行 Domino 编程。这是一个进入该主题的很好的切入点,特别是已经有一点用 LotusScript 编写代理的经验。首先用下面的步骤在数据库中创建一个新的代理。 (1)使用 Domino Designer,在设计域中选择数据库,并单击“代理”设计组件; (2)单击出现在工作域左边的代理按钮。 (3)在编程域中选择 Java 的“运行”选项。Designer 会自动通过在域的脚本区域 中插入一些基本的 JAVA 代码,给用户提供入手点,当选择 Java 作为代理“运 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 90
  • 92.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 行”选项时,Designer 会立即在编程域中放入一些基本的“启动“代码。 Domino 类库被作为一个 Java 包对待,这个包可以通过下列语句输入到程序 中;“IMPORTLOTUS。DOMINO.*; 从这一点看,实际上可以编写 Java 代码来实现所需要的功能。为了提供帮助 ,编程域包括了列出所有的 Java 类和接口程序,以及对用户有用的方法和属性指 示栏,它们将被分成“核心 Java ",“Notes Java”和“Third-Party Java” ,可 以在“参考”标签下的下拉菜单中选择 Java 类型。下图显示了 JAVA 类和接口程 序出现在列表中的例子。 通过将鼠标放在正确的插入点并双击参考标签下面的项,就可以在编程域的 脚本区插入对象、方法和属性。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 91
  • 93.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 由于在 Java 程序中所有的东西都必须在类中,并且一个程序由几个类组成, IDE 允许用户通过单击窗口底部的新类的按钮来简单地创建一些新的类。根据定 义的新类,它们会自动地被加到一个能组织和管理 Java 代码的项目上。 下面是一个简单的在当前创建的数据库中打印一个日期的 Java 代理 Import lotus.domino.*; Public class javatest extends agentbase{ Public void notesmain0{ Try{ Session s= getsession0; AgentContext ac = s . getAgentContextO ; Database db = ac . qetCurrentDatabaseo ; DataTime dt = db . get Createdo ; String It 一 dt . getLocalTime ( ) ; system . Out . printin ( " Database " ”十 db . getTitleO + ' , ; " was created on " +it+”.”); } catch ( Exceptione ) { e . printStdckTrace ( ) ; } } } 虽然这个代码例子实际上能够工作,但我们的目的是想告诉用户,内核 Domino 对象 session 和 Database 是如何被实例化的。一旦能够掌握这些对象, 许多其他 Domino 对象就很容易掌握,记住所有的包含规则(在 Domino 对象的 层次结构中)都是强制的。一进入 IDE “中的 Java 程序,就可以通过按窗口左 下角的编辑按纽对其进行编辑,所有编辑时的错误(例如语法错误)都将被提示。 如果用户想测试这个代理,可以用 Domino 设计和 Notes 代理中的 Java 调 “ 试控制台来完成,为了调用“ Java 调试控制台”,可按以下步骤进行操作: ( l )选择“文件”一“工具” ? “显示 Java 控制台” ,一个新的标题为“ Java 控制的窗口将出现。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 92
  • 94.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 ( 2 )返回 DominoDesigner 或 Notes 中。 ( 3 )从操作菜单中选择 Java 代理,如上面的例子,将选择“操作“-”JAVA “测试 ( 4 )返回到 Java 控制台窗口来查看代理的输出。 6.2.7 JavaServerLet Servlet 是 Domino Web 服务器在对浏览器请求作出响应时运行的 Java 程 序。它为向 Web 应用程序添加强大功能提供了一种简便易行的方法。在某些方面, 服务器小程序类似 CGI(公用网关接口)程序,但是 servlet 与服务器集成得更 为紧密并且可利用特殊的 Java 类。例如:在对 Web 浏览器请求作出响应时, servlet 可以连接到关系数据库或企业系统来获取数据。 Domino 对用于 Web 应用程序的 Java servlet 和 Java 小程序均提供支持。 这两种类型的 Java 程序最重要的区别是二者运行方式的不同。Servlet 是“服 务器端”程序;装入并运行服务器小程序的 Java 类完全在 Domino 服务器内进 行,servlet 运行的结果(通常是 HTML 页面)返回给浏览器。 相比之下,小程序是“客户端”程序;小程序的 Java 类下载到浏览器并且 由浏览器来运行。因此,小程序要求浏览器支持 Java,而 servlet 则没有此要 求 。 用 于 Domino 的 servlet 必 须 符 合 Java Servlet API 规 范 ( 由 Sun Microsystems, Inc. 发布的开放标准) 。 在 Domino 中运行 servlet 涉及到编写 servlet、启用 Domino 对 servlet 的支持以及必要情况下设置 servlet 属性等方面的内容。 接着我们再一起看看 servlet 和代理以及 CGI 程序的比较, 首先代理、servlet 和 CGI 程序都允许对 Domino Web 应用程序的功能进行扩展。代理可以通过表单 WebQueryOpen 和 WebQuerySave 事件与 Web 应用程序紧密集成。Servlet 通过 Servlet API 类可以获得一些特殊功能,如会话和 Cookie 管理。由于 Java 日 益受到人们的青睐,现今使用 servlet 而不是 CGI 程序来开发新产品已成为大 势所趋。但是,许多现有的 CGI 程序仍在使用。 如果正在编写自己的应用程序并需要为服务器上的某些功能编程,则需对使 用哪种类型的程序的选项作出选择。每种类型的程序均有各自的优点而且可能成 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 93
  • 95.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 为特定情形下的最佳选择。以下是对每种程序类型的使用建议: 程序类型 最佳用途 代理 读取或邮寄文档时执行 Domino 操作的程序。 需要按预定时 间或当数据库操作发生(如新邮件到来)时运行的程序。 Servlet 使用标准 Java 接口(如 JDBC)的程序。 使用 HTTP 会话维 护或 Cookie 的程序。复杂或资源密集型 Java 程序。 CGI 程序 需要对系统资源进行低级别访问的程序。 通过非 Java API 与 其他产品连接的程序。 以下对这些程序的属性所作的比较对程序的选用很有帮助。接着我们再看下 这些程序可使用哪种语言进行编写? 1)代理: Java、LotusScript 或 Notes 公式语言。这些语言本身均可跨平台使用。 2)Servlet: Java。本身可以跨平台使用。 3) CGI 程序: 平台脚本语言,即任何能够编译为可执行文件的语言或跨平台的语言(如 Java 或 Perl)。 程序存储在什么位置? 1)代理:存储在 Domino 数据库中,这意味着代理可以利用数据库复制和群 集服务器的功能。 2)Servlet:存储在文件系统中,通常是 dominoservlet 目录。 3)CGI 程序:存储在文件系统中,通常是 dominocgi-bin 目录。 程序以什么方式被 Web 用户调用? 1)代理: 由 WebQueryOpen 或 WebQuerySave 事件自动调用,或者由 OpenAgent URL (如“http://acme.com/sales.nsf/results?OpenAgent”)直接调用。代理还可 由服务器事件(如新邮件的到来)或预先的定时安排来触发。 2)Servlet: WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 94
  • 96.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 直接由 URL 调用。Domino 可识别两种类型的 servlet 的 URL。第一种类型 通过名称指定 servlet(例如:“http://acme.com/servlet/SQLDatabaseQue ry?month=june”。第二种类型指定一个 Domino 管理员已经映射到 servlet 的 ) 文件扩展名(例如:“http://acme.com/sqlquery.esp?month=june”。 ) 3)CGI 程序:直接由 URL 调用(例如: “http://acme.com/cgi-bin/filesearch? string=widget”。 ) 服务器何时将程序载入或卸载? 1)代理:每次调用时装入,执行完毕后卸载。 2)Servlet:一次性装入;HTTP 任务关闭或重新启动时卸载。与代理或 CGI 程 序相比,这一性能使 servlet 具有很大的优越性。但是,这也意味着可以通过多 个请求同时访问 servlet 类,因此必须保证 servlet 代码的线程安全性。 3)CGI 程序:每次调用时装入,执行完毕后卸载。 程序与 Domino 的交互方式 1)代理:LotusScript 和 Java 代理可使用 Domino 对象类。公式代理可使 用大多数 @function。 2)Servlet:可通过 CORBA (Common Object Request Broker Architecture) 接口访问 Domino。 3)CGI 程序:可通过 CORBA 接口或通过 Domino C 或 C++ API 访问 Domino。 程序可获得哪些安全性保障? 1)代理:要调用代理,Web 用户必须对包含该代理的数据库具有“存放者” 或更高存取级别。代理可以以其创建者或用户的身份运行。Domino 的所有安全特 性均适用于由代理执行的操作。 2)Servlet:对服务器小程序的访问可由“Domino 目录”中的文件保护文档 来控制。如果小程序通过 CORBA 接口访问 Domino,则可以指定一个 Domino 用 户名和 Internet 口令。Domino 的安全性适用于所有 CORBA 操作。 3)CGI 程序:对该程序的访问可由“Domino 目录”中的文件保护文档来控制。 如果程序通过 C API 来访问 Domino,则会使用服务器标识符。如果程序使用 CORBA 接口,则可以指定用户名和 Internet 口令。两种情况下,均可应用 Domino 的安全性。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 95
  • 97.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 2.编写 servlet 的前提 要编写 servlet,需要一个 Java 编译器和 servlet 的 API。二者均可从 Sun Microsystem 的网站 http://java.sun.com 上获得。可下载 Java Development Kit (JDK)(其中包含编译器和其他基本工具)和 Java Servlet Development Kit (JSDK)(其中包含 servlet API 的规范、servlet 的 .JAR 文件 (jsdk.jar) 和 样例服务器小程序)。Sun 站点还提供到 Web 上其他 servlet 资源的链接。 还可以使用各种流行的 Java 开发环境来编写 servlet。为了提供方便, Domino 服务器和 Designer 安装程序中包含 jsdk.jar 文件的拷贝。这与 Sun 的 JSDK 提供的文件是完全一样的。 Sun 定期更新 JDK 和 JSDK。Domino 5.0 支持 JDK 1.1.6 和 JSDK 2.0。Domino 的季度维护版 (QMR) 经常会结合 Sun 的升级内容,因此应该检查 QMR 的版本注 释以检验被支持的 JDK 和 JSDK 版本。 3.启用 Domino 支持的 servlet Servlet 是由 Domino Java Servlet Manager(HTTP 服务器任务的一部分) 来装入和调用的。Java 支持 servlet 的运行时间是由 Domino Java Virtual Machine (JVM) 提供的。HTTP 任务启动时,可以自动启动服务器小程序管理者并 装入 JVM。HTTP 任务将把这些操作的状态信息写入服务器控制台和日志文件中。 Servlet 管理者是由“Domino 目录”的“服务器”文档中的设置来控制的。 此设置位于“服务器”文档的“Internet 协议” “Domino Web 引擎”附签上。设 置内容如下: 设置 选项 Java servlet 支持 无:(缺省)HTTP 任务不装入服务器小程序管理者或 JVM。 Domino servlet 管理器:HTTP 任务同时装入 JVM 和 servlet 管理器。 第三方 Servlet 支持:HTTP 任务装入 JVM,但不装入 Domino servlet 管理器。这允许使用第三方 servlet 管理器,如 IBM 公 司的 WebSphere Application Server。 Servlet URL 路径 URL 中的路径,通知 Domino 此 URL 指向一个 servlet。缺 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 96
  • 98.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 省路径为 /servlet。 类路径 一个或多个路径的列表,servlet 管理器类加载程序将搜索 此列表来查找 servlet 及其相关类。此设置允许添加其他路径。 可以指定目录、JAR 文件和 ZIP 文件。路径可以是绝对路径也可 以是 Domino 数据目录的相对路径。缺省为 dominoservlet。 样例: 相对目录路径: dominoservlet 绝对目录路径: c:appsMyServlets JAR 文件:c:javamailmail.jar ZIP 文件:dominoservletsql.zip Servlet 文件扩充 URL 文 件 扩 展 的 列 表 , 示 意 Domino 某 个 URL 引 用 了 servlet。列表中的每个扩充必须通过 servlets.properties 文 件中的指令映射到单一的 servlet。缺省为无扩充。 以 下 设 置 控制 Java Servlet API HttpSession 接 口 的 Domino Servlet Manager 的运行时间支持。不使用此接口的服务器小程序不受这些设置的影响。 其中 HttpSession 接口支持与 Domino 中的“HTTP 会话验证”功能是完全独 立的。 设置 选项 会话状态跟踪 启用: (缺省)servlet 管理器定期检查所有 HttpSession 实 例的用户活动。给定时间段内空闲的会话将被自动终止。servlet 管 理器 调用实 例的 HttpSession.invalidate() 成 员 函数 通知 servlet 该会话已被终止。 禁用:不检查会话的活动状态。 空闲超时时间 等待用户不执行操作的分钟数,此后将终止会话。缺省为 30 分钟。 最大活动会话 允许同时进行的活动的会话数。缺省为 1,000 个会话。达到 此限制时,空闲时间最长的会话将被终止。 会话持续 启用:退出 HTTP 任务时,servlet 管理器将把会话数据保存 到 Domino 数据目录中一个名为 sessdata.ser 的磁盘文件中。会 话数据将在 HTTP 任务再次启动时重新载入。Servlet 已经固定在 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 97
  • 99.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 会话中的对象如果执行 java.io.Serializable 接口,则该对象 也将被保存。 禁用: (缺省)退出 HTTP 任务时放弃所有会话数据。 用 JVM 加载程序装入 servlet 类 servlet 管理器类加载程序不会装入使用自身代码、创建定制类加载程序或 执行其他某些受限制的操作的类。如果 servlet 所要求的类不能通过 servlet 管 理器装入,可以试用 Domino JVM 类加载程序进行装入。 JVM 加载程序通常用于从与 Domino 一起安装的 Java 归档系统(特别是 java.* 和 lotus.* 软件包)中装入类。通过将 servlet 从 Servlet 管理者类 路径移到 JVM 类路径,可以强制使用 JVM 加载程序而不使用 servlet 管理器加 载程序来装入服务器小程序。 JVM 类路径由 NOTES.INI 变量 JavaUserClasses 指定。 设置 servlet 的属性 单个 servlet 的 特 殊 属 性 可 以 在 位 于 Domino 数 据 目 录 中 名 为 servlets.properties 的文本文件中指定。可以指定以下属性: (1)别名 (2)初始化参数 (3)URL 映射扩展 (4)servlet 管理器启动时装载 这些属性是由 servlets.properties 文件中的指令来指定的。指令的通用语 法是: servlet(s).<name>.<property>=<value(s)> 指令是区分大小写的。servlets.properties 文件还可以包含空行和以“#” 号开头的注释行。servlets.properties 文件不是必须进行设置的。Servlet 的缺 省属性是:无别名、无初始化参数、无映射扩展并按需要装入 Servlet。 Servlet 别名 别名指令的语法是: servlet.<alias-name>.code=<class-name> 例如: WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 98
  • 100.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 servlet.SQLQuery.code=sql.database.query.Servlet 出于安全性的考虑,Domino 不允许 servlet 名包含将要在 servlet URL 中 使用的周期。这样能够防止恶意用户通过 servlet 管理器任意加载 Java 包和类。 如果服务器小程序有一个包名,则必须为其指定一个别名。以上的例子允许 sql.database.query.Servlet servlet 被诸如 “http://acme.com/servlet /SQLQuery?month=june”等 URL 调用。别名在将 servlet 的实际名称对用户隐 藏方面也很有用。 可以为 servlet 指定多个别名。servlet 管理器在收到第一个指向所有别名 的 URL 时会创建 servlet 的一个新实例。新实例创建时,servlet 管理器将调 用 servlet 的 init() 成员函数。由于别名可用在属性文件的其他指令中,因此 实例可以被赋予不同的属性。例如:可以为每个别名指定相互独立的初始化参数。 同样,由于即使创建了多个实例,servlet 类也只装入一次,因此 servlet 的实 例可以通过使用静态类变量来共享数据。 为安全起见,如果给 servlet 指定了别名,则该 servlet 在 URL 中就不能 通过类名来引用。这样可以隐藏 servlet 的真名。 初始化参数 可 以 在 属 性 文 件 中 指 定 为 servlet 指 定 初 始 数 据 。 Servlet 可 使 用 ServletConfig.getInitParameter 成员函数来访问这些数据。初始化指令的语法 是: servlet.<alias or class name>.initArgs=<name1=value1> ,<name2=value2>,... 可以指定多个参数并以逗号进行分隔。例如: servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30 URL 映射扩展 URL 映射扩展指令的语法是: servlet.<alias or class name>.extension=<extension> <extension> ... 可以给 servlet 指定多个扩展,相互之间以空格分隔。所有扩展都必须包含 在“服务器”记录的“Servlet file extensions”设置中。例如:无论何时 URL 指定扩展“sql”或“sq” 都能使 Domino 调用 SQLQuery servlet,请将“sql,sq” , WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 99
  • 101.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 添加到服务器设置中,并将这一指令添加到属性文件中: servlet.SQLQuery.extension=sql sq 这允许用户调用含有类似以下 URL 的 servlet: http://acme.com/query.sql?month=june 启动时装入 缺省情况下,servlet 管理器在第一次接收到引用某个 servlet 的 URL 时 将此 servlet 的类文件装入内存。但是,可以指定 servlet 管理器启动时就同时 装入一个或多个 servlet。这样可以防止用户在 URL 首次要求装入小程序时被延 误。启动指令的语法如下: servlets.startup=<alias or class> <alias or class> ... 请注意“servlets”(服务器小程序)是复数形式,servlet 的名称必须使用 空格分开。 如果给小程序指定了一个或多个别名,则可以在启动指令中包含这些别名。 这样会使 servlet 管理器装入小程序类然后为每个别名创建一个实例。 servlet 管理器装入 servlet 类之后,只要不是 Domino HTTP 任务由控制 台命令 "tell http quit" 终止或由控制台命令 "tell http restart" 重新启动, 这些类将一直驻留在内存中。卸载服务器小程序之前,servlet 管理器将为 servlet 的每个实例调用 destroy() 成员函数,以使其有机会清理资源。 由 JVM 类加载程序装入的类在 HTTP 任务终止之前将一直保持加载状态。 “tell http restart”命令不会将类卸载。 属性文件样例 以下是 servlets.properties 文件的样例: # Properties for the sql servlet servlet.SQLQuery.code=sql.database.query.Servlet servlet.SQLQuery.initArgs=cache=30 servlet.SQLQuery.extension=sql # Properties for the mail servlet servlet.MailServlet.initArgs=mime=enabled,smime=disabled # Both servlets should be loaded at startup WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 100
  • 102.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 servlets.startup=SQLQuery MailServlet # end of file 样例:Java servlet 此 servlet 样例返回一个 HTML 页面,上面显示浏览器与 服务器小程序请求一起发送的所有 HTTP 标头。 import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ExampleServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); ServletOutputStream out = response.getOutputStream(); out.println("<HTML><B>Headers sent with the request:</B><BR>"); for (Enumeration headers = request.getHeaderNames(); headers.hasMoreElements();) { String headerName = (String) headers.nextElement(); out.println("<BR>" + headerName + ": " + request.getHeader(headerName)); } } // end of method } // end of class 编 好 此 代 码 后 , 请 将 ExampleServlet.class 文 件 拷 贝 到 服 务 器 的 dominoservlet 中 。 由 于 此 文 件 不 需 要 特 殊 属 性 , 因 此 不 必 创 建 servlets.properties 文件。输入下面的 URL(请使用自己的服务器名)即可从 浏览器运行小程序: WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 101
  • 103.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 http://www.yourserver.com/servlet/ExampleServlet 由 服 务 器 小 程 序 返 回 的 页 面 上 的 信 息 是由 浏 览 器 决 定 的 。 以 下 是 使 用 Netscape 浏览器返回的 HTML 页面: <HTML><B>Headers received with the request:</B><BR> <BR>ACCEPT-LANGUAGE: en <BR>CONNECTION: Keep-Alive <BR>ACCEPT: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* <BR>USER-AGENT: Mozilla/4.05 [en] (Win95; U ;Nav) <BR>ACCEPT-CHARSET: iso-8859-1,*,utf-8 <BR>HOST: test1 6.2.8 LOTUS/DOMINO-API 使用 Lotus C API for Lotus Notes/Domino 常常使人想起一把方便好用的 老式瑞士军刀:一个时髦的小工具箱,包含许多没有书面文档的(undocumented) 有用部件!以下笔者将重点介绍 Lotus C API for Lotus Notes/Domino 的一些 功能,帮助大家重新发现其无限的潜在用途。对 Lotus Notes/Domino 有基本的 了解并熟悉编程语言就足以应付以下内容。C 编程语言的应用知识可以帮助您更 好地理解我们讨论的一些概念。 Lotus C API toolkit 简介 首先如果要获取的话可以通过访问 Toolkits & Drivers page 下载 Lotus C API toolkit for Lotus Notes/Domino。在将下载的档案文件中的这些文件解压 缩之后,就可以获得文档、头文件、库文件、已编译的 OBJ 文件、示例程序和示 例中使用的数据库。 文档中包括一个用户指导和一个参考指导,它们都是以单独 Notes 数据库的 形式出现的。您可以从文档中获得许多信息。同时,用户指导中包含可以使用该 工具箱完成哪些任务以及如何完成这些任务的介绍,而参考指导记录了所有可用 功能。请仔细考虑一下这些数据库中包含的大量信息,这对为数据库创建全文 (full-text)索引很有用,这样就可以快速准确地进行查找。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 102
  • 104.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 头文件通常可以在 Include 文件夹中找到。它们包含用于所有可作为该工具 箱的一部分的常数、结构、宏、公共函数的定义。您需要根据程序中使用的 API 调 用在源代码中包含相应的头文件。库文件和已编译的 OBJ 文件通常可以在不同操 作系统的特定文件夹下的 Lib 文件夹中找到。因为 LIB 文件是需要链接到 API 程 序的 DLL 导入库,所以 OBJ 文件是使用 NotesMain 入口点的程序或完成插件服 务器任务所需的引导程序对象。 在示例文件夹中提供了一个详尽的示例程序列表。notedata 文件夹通常包含 示例程序中用到的所有数据库。参考指导中描绘了每个函数或符号值,它们至少 可以被一个示例程序引用,通过查看该参考指导,我们将了解如何在实际程序中 使用即将检查的函数。 在明白了我们必须做什么之后,继续研究该工具箱的最好办法就是钻研一个 实际的程序。 6.2.9 DOMINO-WEBSERVICES Web 服务是可以通过在 Internet 上发送消息来调用的远程操作的档案。Web 服务供应商发布用于查询和使用的 Web 服务,而 Web 服务消费者调用来自这些 服 务的 操 作 。Web 服务 供 应 商提 供 了定 义 服务 接 口 的 WSDL ( Web Services Description Language,Web 服务描述语言)文档。WSDL 文档是 XML 格式的。 接口的底层由供应商实现,但大多数供应商将接口映射为支持的编程语言的过程 调用。来自消费者的入站请求传递给底层代码,然后结果返回给消费者。 Lotus Domino 将 WSDL 接口映射为可以用 LotusScript 或 Java 编码的类 似代理的 Web 服务设计元素。要被使用,Web 服务必须位于启用 HTTP 的 Domino 服务器上。(我们可以通过 Notes 客户机预览中的 HTTP 会话测试 Web 服务。 ) 通过下列 Domino URL 命令之一进行访问: • ?OpenWebService 调用 Web 服务以响应通过 HTTP POST 发送的 SOAP 编 码消息。HTTP GET(例如,浏览器查询)返回服务的名称及其操作。 • ?WSDL 返回 WSDL 文档以响应 HTTP GET。 在 Domino Designer 中创建 Web 服务设计元素有多种可行方法。可以完全 用 LotusScript 或 Java 来编码。在这种情况下,保存设计元素会生成反映 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 103
  • 105.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 LotusScript 或 Java 代码的 WSDL 文档。或者可以导入现有的 WSDL 文档。在 这种情况下,在导入的 WSDL 中会生成反映操作的 LotusScript 或 Java 代码。 Web 服务设计元素保存 WSDL 文档以及代码。如果公共接口未更改,则 WSDL 文 档保持不变。如果在编码中更改了影响公共接口的部分,则会生成新的 WSDL。 6.2.10 XML Domino 目前可支持扩展置标语言(或被称为 XML) 。与描述数据外观的超文 本置标语言 (HTML) 不同,XML 描述数据的结构。这与将数据存储在结构化文档 中而与其显示方式分开的 Domino 是一致的。通过使用 XML 标准(使用与显示方 式分开的数据),立刻可以生成更强大的 Domino 应用程序。 Domino 数据的 XML 表示法被称为 DXL。DXL 描述了 Domino 特定的数据和 设计元素,如嵌入视图、表单和文档。由于 XML 成了交换信息的标准基础,所以 DXL 提供了向 Domino 应用程序引入和从中引出数据的 XML 表示法的基础。 在 Java 成员函数中使用 XML Domino Designer 和 Server 产品中包括了 XML4J Parser 和 LotusXSL Processor 可用于解析并转换 XML 数据,而不必单独下载。通过 Java 后端类中 的下列属性和成员函数,可以访问对象的 XML 表示法、解析并转换 XML 数据并 生成文档的 XML 表示法: Document 中的 generateXML 成员函数 EmbeddedObject 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和 transformXML 成员函数 Item 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和 transformXML 成员函数 MIMEEntity 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和 transformXML 成员函数 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 104
  • 106.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 RichTextItem 中的 InputSource、InputStream 和 Reader 属性以及 parseXML 和 transformXML 成员函数 对于独立的应用程序,应该在 lotus.domino 类的类路径中包含 NCSO.JAR 或 NOTES.JAR 文件。还应该在类路径中包含 XML4J.JAR 文件以使用 XML 解析器, 包含 LotusXSL.JAR 文件以使用 XSL 处理器。 注释 即使只需要使用 transformXML 成员函数,也必须在类路径中包含 XML4J.JAR 文件。 对于在浏览器中运行的小程序,应该随小程序自身包含 XML4J.JAR 和/或 XML4J.CAB 文件以使用 XML 解析器。要使用 XSL 处理器,应该随小程序包含 XML4J.JAR 和/或 XML4J.CAB 文件以及 LotusXSL.JAR 和/或 LotusXSL.CAB 文件。 关于 XML4J 解析器和 LotusXSL 处理器的进一步详细信息,请访问 Alphaworks Web 站点 www.alphaworks.ibm.com。 在 Domino DTD 中使用 XML Domino 文档类型定义 (DTD) 描述 DXL 的结构。DTD 存储 XML 标记的定义, 转换外部 XML 数据到 Domino 数据库中时,可使用这些标记来校验 XML 文档, 从而确保所有文档保持统一的结构。 下面是两个 Domino DTD: View DTD 表示 Domino 数据库中视图的结构。要生成符合 View DTD 的 XML 表 示法,可使用 ReadViewEntries URL 命令。 Document DTD 表示 Domino 数据库中文档的结构。要生成符合 Document DTD 的 XML 表示法,可使用 Document 中的 generateXML 成员函数。 Domino DTD 定义如下内容: • 元素以及允许的内容 • 元素的属性列表 • 使 DTD 更加模块化的实体 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 105
  • 107.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 ( • 使 DTD 更易于理解的 注释 关于 DTD 中各种声明的完整列表和说明,请参阅 XML Standard Recommendations Web 站点 http://www.w3.org/TR/REC-xml。 元素 一个元素就是一个标记,其定义如下: <!ELEMENT tagname ( content-model ) > 其中 tagname 是标记的名称。 标记名称是区分大小写的。 内容模型是一个表达式, 陈述可显示在元素中的内容。它也可以包含嵌套的标记。元素用于开始和结束标 记之间。例如:Domino View DTD 中的 viewentry 元素如此定义: <!ELEMENT viewentry ( entrydata* ) > 此元素用于 XML 输出中,如下所示: <viewentry children="3"> <entrydata columnnumber="1"> <text> Joe Smith </text> </entrydata> </viewentry> 内容模型中可用的操作符有: • OR ( | ) 表示选择 • 逗号 ( , ) 表示连续 • 星号 ( * ) 表示 0 或更多 • 加号 ( * ) 意思是 1 或更多 • 问号 ( ? ) 表示 0 或 1 • 圆括号 ( () ) 表示分组。 以下样例说明内容模型中操作符的使用: <!ELEMENT document(noteinfo?, item*)> 在此例中,<document> 元素可包含可选的 <noteinfo> 元素,并且可包含一些 <item> 元素。 操作符的另一个样例是: <!ELEMENT text ( #PCDATA | button | rule )* > 此处的 <text> 元素只能包含纯文本、<button> 元素或 <rule> 元素,它们可以 任何顺序出现。#PCDATA 表示纯文本(字符内容),并且它必须是选项序列的第 一项,此处将整个选项组括起来并带有一个星号。 属性 任何元素的属性以如下方式声明: WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 106
  • 108.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 <!ATTLIST tagname attr1 type1 usage1 attr2 type2 usage2 ... 其中 tagname 是要定义其属性列表的元素,该元素的所有属性随同它们的类型和 用法都被列出。 例如: <!ATTLIST book title CDATA #REQUIRED isbn CDATA #IMPLIED cover (hard|paper) #IMPLIED format ( bound|looseleaf|scroll|parchment ) "bound" 此样例为 <book> 定义了四个允许的属性:title、isbn、cover 和 format。如 果 <book> 没有其他 ATTLIST 声明,那么这些就是唯一允许的属性。任何其他属 性都是非法的。title 属性可包含任何值,而且必须出现。根据此 DTD,没有 title 属性的 <book> 元素是无效的。isbn 属性可包含任何值,但可以忽略。cover 属 性可取两值之一:“hard”或“paper”。任何其他值都是非法的,但该属性可以 被完全忽略。format 属性可以是四个可能值之一,并且如果该属性被忽略,校验 解析器将提供“bound”作为它的值,就象在 XML 内容中实际出现了 format="bound"。 所有属性基本上都是字符串,如此表中所示: 属性值 意义 CDATA 任何字符串值(无限制) NMTOKEN 单个名称记号 NMTOKENS 名称记号列表 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 107
  • 109.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 属性值 意义 ( a | b | c ) “a”、“b”或“c”。用法指定属性是可选、必需、缺省还是常量。 #IMPLIED 可选。 #REQUIRED 必需出现在元素中,并且没有缺省值。 'literal' 可选的,但如果它不出现,解析器将为其提供缺省值,就象指定了属 性一样。 #FIXED 'literal' 它只可以采用此值,如果它没有出现在 XML 中,解析器将为它提供 值,就象指定的一样。 ATTLIST 声明中属性的顺序是不相关的(就象它在 XML 数据中),且可使用空格 以使 DTD 更加易读。 实体 实体是按如下方式声明的宏: <!ENTITY macroname "macrocontent" > 例如: <!ENTITY % string "CDATA" > <!ENTITY % book.formats "bound|looseleaf|scroll|parchment" > <!ENTITY % book.covers "hard|paper" > 定义实体时,“%”符号是必需的。上面的实体按如下方式使用: <!ATTLIST book title %string; #REQUIRED isbn %string; #IMPLIED cover ( %book.covers; ) #IMPLIED format ( %book.formats; ) "bound" 此处的实体名称位于百分号和分号之间,并且与 C 语言的宏一样插入内容。 注释 DTD 中的注释按如下方式括起来: <!-- comment text, anything except two dashes. --> 公共元素和实体 Domino View DTD 和 Document DTD 使用它们共同具有的元素和实体。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 108
  • 110.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 实体 以下为公共实体: <!ENTITY % boolean "( true | false )"> 表示布尔型 <!ENTITY % integer "CDATA"> Represents an integer <!ENTITY % noteid "CDATA"> NoteID 是 4 至 8 个十六进制字符 <!ENTITY % unid "CDATA"> 文档的 32 个字符的十六进制标识符 <!ENTITY % string "CDATA"> 不能被转换为其他自然语言的字符串 DateTime 元素及其属性 以下元素及其属性是 View 和 Document DTD 共同具有的。 <!ELEMENT datetime ( #PCDATA )> 此元素表示视图中某列或文档中某项的日期和/或时间数据。Domino TIMEDATES 按 ISO8601 基本格式表示。 <!ATTLIST datetimedst %boolean; "false" dst datetime 元素的属性。布尔值。如果记录此时间时实行夏时制,则为真。 缺省为假。 定义的实体下面定义的实体在 View 和 Document DTD 中都能使用。 <!ENTITY % simple.types "text | number | datetime | textlist | numberlist | datetimelist"> 其中 元素 表示 <!ELEMENT text ( #PCDATA )> 视图中某列或文档中某项的单一文本数据。 <!ELEMENT number ( #PCDATA )> 视图中某列或文档中某项的单一数字数据。 <!ELEMENT textlist ( text* )> 视图中某列或文档中某项的多文本数据。 <!ELEMENT numberlist ( number* )> 视图中某列或文档中某项的多数字数据。 <!ELEMENT datetimelist ( datetime*, 视图中某列或文档中某项中的多 datetime 和 datetimepair* )> datetimepair 数据。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 109
  • 111.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 6.3 如何优化我们的编码 6.3.1 公式语言的优化 1.使用@ClientType 代替@UserRoles 来检查客户端类型 不使用@UserRoles 中的$$WebClient 来检查客户端是否使用浏览器,直接使用 @ClientType 比较快。 2.使用简单的公式隐藏条件比较快 以下三种写隐藏的选择,性能递减。可以利用第一个,不要写判断@ClientTy pe 的公式;可以利用编辑模式,不要写判断@isdocbeingedited 的公式 a.根据客户端程序类型 b.根据编辑模式 c.根据公式隐藏 3.在@dblookup 和@dbcolumn 公式中使用列号比使用域名快 使用域名需要在域列表中对比,但直接使用列号会带来维护的困难。 4.打开@dblookup 和@dbcolumn 的 cache 开关 cache 不但可以使这个公式执行更加快,而且可以使‘同一个数据库’ ‘同 中, 样公式’的另一个 lookup 运行更快。cache 是基于数据库的,不同数据库的相同 lookup 不能利用相同的 cache。注意:无论是否打开 cache,LotusScript 调用 e valuate 的 lookup 都不能利用 cache。 5.根据 4,如果公式和 LotusScript 都要利用相同的 lookup 结果,可以将信息放 到 profile 文档中。 6.要 lookup 一个包含很多文档的视图时,创建一个隐藏视图,仅包含必要的列。 视图越小,越快。 7.如果要取视图中的几个列,分别取的话,每个 lookup 都要花时间。将几个列 组合成一个列,用特别的字符分隔,一次取出来,然后分析出几个域。 8.一段公式中,数次利用同一个结果集,用临时变量保存,而不是每次重新取 9.使用不同的搜索方法,如果处理的文档集较小(例如少于数据库中所有文档的 15%),用 LotusScript 比公式快,如使用 getview , search, ftsearch 等方法。 10.使用‘显示时计算’域来避免不必要的重复计算。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 110
  • 112.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 注意两点: 1.使用 check box 和 radio box,一打开文档,公式总要计算,即使仅仅打算阅 读而不是修改文档,看起来是合理的,因为需要计算出各个项目供阅读嘛 2.已经有数据的,使用对话框格式的编辑域,打开时候也要重新计算,这个就不 太合理了。 当使用复杂的@dblookup 时,性能有很大影响。隐藏公式域没有作用,因为仍 然会发生计算。按照下面方法解决 1)创建一个隐藏的多值‘显示时计算’域:kwDataHidden,计算公式是原来的@d blookup 公式,但仍然要做如下处理,值公式写成这样: rem "Do not run formula during doc save"; @if (@IsDocBeingSaved; @Return("");""); rem "Only run if doc is in edit mode"; @if (@IsDocBeingEdited;@DBColumn(............);"") 2)在表单的 PostModeChange 中,写:@If(@IsDocBeingEdited;@Command([ViewR efreshFields]);""),(实际上,如果觉得公式的值的修改频率不是太快的话, 这里也可以不写) 3)真正操作那个域的公式写:kwDataHidden;并且该域属性选择‘刷新文档时刷 新选项’。 6.3.2 脚本语言优化 1.使用 For loop,不使用 Do loop 或者 while loop 的循环 前者比后者快 60%(不计算循环内部时间的情况下) 2.引用数组元素的时候,使用 Forall 比 for 快 一维数组,前者快 75%,二维以上,也可以快 50% 3.简化 if 语句 LotusScript 不会象 c 那样进行逻辑语句优化,所以 If a=x and b=y then 应该写成 If a=x then WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 111
  • 113.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 if b=y then 后者快 40% 4.避免混合变量类型(计算)(也就是不要隐式造型) dim a as single dim z as long z = 3 a = 1.0 z = z+a 上面这一段使用了 implied casting,z=z+(long)a 会比较快 1.对整数结果,使用整数除法:z& = x& y& 比 z& = x& / y& 快 60% 2.仅在有必要的时候才使用 variant 类型,lotus 使用更多的时间处理 variant 3.读取文件的时候,一次读取一块,而不是一行,下面的例子 A 比 B 快接近 5 倍! 而且读取的文件越大,越明显。 example A Open fName$ for input as #fNum buff$ = Input$(Lof(fNum),fNum) stPos = 1 lineNo = 1 eoFile = false While Not eoFile nlPos = Instr(stPos,buff$,Chr$(13)) If (nlPos) > 0) then fData$(lineNo) = Mid$(buff$,stPos,nlPos - stPos) stPos = nlPos + 1 else fData$(lineNo) = Mid$(buff$,stPos) eoFile = true end if lineNo = LineNo + 1 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 112
  • 114.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 wend close #fNum example B Open fName$ for Input as #fNum lineNo = 1 while Not Eof(fNum) Line Input #fNum , fData$(lineNo) lineNo = lineNo + 1 wend close #fNum 注意,R4.6 以及之前的版本,string 变量有 64k 的限制,所以一上例子 a 需要 再增加一些东西(不能一次读取,而是要分次读取文件),但块读取的好处仍然 是显而易见的。 开始, R5 string 变量可以最大达到 2G,足够读取非常大的文件了。 例子 A 虽然增加了代码量,但是可以大大加快速度,某些场合非常有用 5.避免无谓地使用数组,下面例子 A 比例子 B 快两倍 Example A For i = 1 to 100 sum = sum + x(i) Next t(1)=sum Example B For i = 1 to 100 t(1) = t(1) + x(i) Next Domino R5 引入了新的数组处理函数:ArrayAppend , ArrayGetIndex , ArrayReplace , FullTrim,使用这些函数比自己写相同的功能快 6.有一个不使用字符串数组的替代方法 把所有数组中的字符串元素构造成一个字符串,用特殊分隔符分开(例如回 车符),然后用 Instr 来取各个元素 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 113
  • 115.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 7.优化字符串的处理 字符串的处理非常消耗资源,例如下面这句很常见 X$= X$ & "a" 这个语句非常消耗资源(java 中有类似现象,因为涉及到重新生成字符串),下 面这句缩短字符串也是很消耗资源的 x$ = Right$(x$ , currentLength% - lengthStrippeddOff%) 8.创建一个新的字符串有时候更加快 下面例子 A 比 B 快 25% A str$ = stringA$ & stringB$ B str$ = stringA$ str$ = str$ & stringB$ 9.反复处理字符串时,记住处理位置 比不断修改字符串长度快(其实是不断生成新的字符串),下面例子 A 比 B 快 85% A strPiece$ = Mid$(str$ , startPos% , pieceLength%) startPos% = startPos% + pieceLength% B strPiece$ = Left$(str$ , pieceLength) strLength% = strLength% - pieceLength% str$ = Right$(str$ , strLength%) 10.谨慎是用 redim 命令 可以理解,每次 redim 是内存堆数据的乾坤大挪移,所以尽可能事先决定数组 大小。实在没有办法,也千万不要在循环中 redim。以下例子 A 比 B 快 20% A For i = 1 to 10000 If ( i> iMax) then WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 114
  • 116.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 iMax = iMax + 100 redim Preserve sArray(1 to iMax) end if sArray(i) = "" Next B For i = 1 to 10000 Redim Preserve sArray(1 to i) sArray(i)="" Next 以上实际是减少 redim 的次数,每次增加多些,循环后可能还需要一次 redim,让 数组空间和实际一致 11.在多维数组中循环 应使用正确的顺序。在外循环中操作后面的维数,在内循环中操作前面的维 数,下面的例子 A 比例子 B 快 400%! A For y = 0 to 2 for q = 0 to 5000 z = z + x(q,y) Next Next B For q = 0 to 5000 For y = 0 to 2 z = z + x(q,y) next next 12.比较整数,而不是比较字符串 下面的例子 A 比例子 B 快 50%,例子 C 比例子 D 快 30% WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 115
  • 117.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 A If(Asc(x$) = Asc("A")) then B If(Left$(X$,1) = "A") then C If(Asc(Mid$(x$ , 1, 1) = "A") then D If(Mid$(x,1,1) = "A") then 下面比较空串的例子 E 也比例子 F 快 30% E If (Len(x$) = 0) then F If (x$="") then 13.将数字转为字符串的时候使用自动造型,不用手工转换 例如 s2$ = "Text" & iNum 比 s2$="Text & Cstr(iNum%) 稍微快一点,不过 不明显。 14.重要:避免过多使用环境变量 环境变量要读取 notes. 文件, ini 对性能造成影响,替代办法是使用 profile。 如果一定要使用环境变量,将多个环境变量合并成一个,用特殊符号分隔,取出 来后再分析成多个。取 10 个单独的环境变量要比取一个长的环境变量多花 10 倍 时间! 6.3.3 Java & JavaScriptino应用程序优化 Java 需要装入 JVM,client 端第一次运行的时候装入,server 端,随着 http 装入的时候装入(所以不用 http 就不要装入了,估计慢也是受到 jvm 影响 :) ) 有关 java 没有什么好说,就说两点。 1.将需要的 java 类,尽可能放在类列表前面,尽可能接近 base 类,可以加快搜 索速度; 2.周期性调用回收函数,java 本身是自动进行垃圾收集的,但是该书的意思似乎 说 java 的垃圾回收,不能回收相关 lotus objects 用掉的内存; 3.JavaScript,没有什么好说的,用于 web 页面,域校验,和输入转换,可以避 免 browser 和 web server 来回交换数据,减少网络流量; WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 116
  • 118.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 6.3.4 DOMINO对象模型优化 利用后期初始化和对象重用技术来最大限度地利用资源 1.后期初始化(lazy initialization)。学习到一定地步的 lotus 程序员,为 了程序结果清晰,往往喜欢事先将一些对象如 db , view , doc 等初始化,然后 每个函数都可以使用。从提高效率的角度,可以改进为使用后期初始化(自己翻 译的,不知道是否准确,应用期初始化?),下面是后期初始化的方法 ' *** Globals ' *** Declare the global data we share Public gDb As NotesDatabase Public gVwCustomerType As NotesView '*** Functions '*** Get the customer type view (lazy initialization) '*** Do account validation Sub Initialize '*** Set up the database (NOT lazy) Dim ss As New NotesSession Set gDb = ss.CurrentDatabase End Sub Function GetCustomerTypeView() As NotesView '*** Only get it the 1st time it is used If (gVwCustomerType Is Nothing) Then Set gVwCustomerType = gDb.GetView("Customer Type") End If Set GetCustomerTypeView = gVwCustomerType End Function Function ValidateAccount(custName As String, _ accountType As String) As Integer '*** Return True if account is valid WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 117
  • 119.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Dim vw As NotesView Dim doc As NotesDocument Dim aKeys(0 To 1) As String Select Case AccountType Case “New” '*** New accounts are always valid ValidateAccount% = True Case Else '*** Is customer allowed the specified account type? Set vw = GetCustomerTypeView() aKeys(0) = custName$ aKeys(1) = accountType$ Set doc = vw.GetDocumentByKey(aKeys, True) If (doc Is Nothing) Then ValidateAccount% = False Else ValidateAccount% = True End If End Select End Function 以上 GetCustomerTypeView 函数中使用了 lazy initialization 方法,当该 函数第一次被调用,它调用 getview 取得视图,以后只要直接取 public 的 vw 即 可,其他程序的结构不会受到影响(如果将全局变量的 vw 封装在 class 中,则更 加符合面向对象的规则) 6.3.5 最大限度重用对象 1.打开数据库时的动作 a.创建数据库,涉及到内存分配和初始化 b.定位数据库,涉及到目录查找,或者存取其他服务器 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 118
  • 120.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 c.初始化对象属性,需要从数据库读取 ACL 等属性 由于打开数据库如此耗费资源,所以应该尽量重复利用打开的 db,作为参数传递, 或者全局变量(或者类变量)而不是在每个函数中重新打开。 2.使用已有对象,比较下面,A 比 B 快 A dbTitle$ = doc.ParentDatabase.Title B set session = new NotesSession set db = session.CurrentDatabase dbTitle = db.Title 3.使用 back-end 类,比用 front-end 类快,并且 back-end 类可以添加任何数据 类型和新域 4.使用 NotesUIDocument 类时,如果需要大量修改文档域,禁止 AutoReload 属 性 修改前:source.AutoReload = false 修改后:source.AutoReload = true source.Reload 5.如果从视图存取文档,使用 ColumnValues 访问域,比直接访问要快,但只有 从视图存取文档才能利用这点,还有就是要注意 columnNumber 这个列数的计算, 不是视图上的每个列都算在里面 A var = doc.ColumnValues(columnNumber%) x = var(0) B x =doc.fieldname 6. 如何在不同应用中选择合适的编码语言 4 在具体的开发过程中,根据需求性质,DOMINO 可以有多种编码语言的选择。 主要有公式、LotusScript、java、javaScript 等语言: 其中 javaScript 是跨平台面向对象的描述性语言,可以附加到诸如 ONCLICK WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 119
  • 121.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 的特定事件或被附加到诸如 ONCLICK 的特定事件上,但不能在代理中编写; LotusScript 则是完全面向对象的,通过他我们可以访问系列 DOMINO 服务; 而 JAVA 方面, 系统内置 20 多个 JAVA 与 DOMINO 的接口是通过预定义的 DOMINO JAVA 类实现,在代理方面的使用方法类似于 LotusScript,但不能附加到 DOMINOUI 的事件中。 比较起来,特别简单的功能和逻辑,用公式实现比较快;复杂的功能和逻辑, 用 LotusScript 比较快。 而 java 语言可以实现多线程,完全面向对象,处理大量文档时,如果程序利 用到多线程,比不能利用多线程的 LotusScript 快。 另外针对于底层开发,LOTUS 还有专门的 Toolkits 支持,按 Lotus 产品系列 来分,Lotus 提供下列产品的工具包: Notes/Domino 、Sametime 、QuickPlace 、 Discovery Server 、Other。其中,Notes/Domino 和 Sametime 的工具包比较多, C、C++、Java 语言的都有,其他产品的则很少。从这个角度,也可以看出文档数 据处理、协同工作是 Lotus 系列产品的核心价值所在。其中,Notes/Domino 的工 具包有: Lotus C API toolkit Lotus C++ API toolkit Lotus Domino Toolkit for Java/CORBA Lotus and Notes Toolkit for COM Lotus Domino Driver for JDBC (简称 LDDJ) NotesSQL Lotus XML Toolkit(简称 DXL) Custom Tag Converion kit(简称 DCT) LotusScript Extensions toolkit(简称 LSX) 在 Domino/Notes 的 Toolkit 中,C API 的功能最为强大:可以操纵 notes 数据 库中几乎所有的数据对象:数据库及 ACL、文档和域、表单、视图和文件夹、代理、 可以为 Notes 客户端的增加附加菜单、可以用来创建附加的 Domino 服务任务、可 以用来扩展 Domino/Notes 的事件管理。而其主要限制如下:不能修改已有的 Domino/Notes 软件,不能去除其已有的功能、特性,或者改变其工作机理、不能 修改安全特性、不能修改用户活动记录。 支持的操作系统:WindowsNT/2000, Linux, Solaris SPARC/Intel, HP-UX, MacOS, AIX, AS/400, S/390 等。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 120
  • 122.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 6.4.1 使用公式和LOTUSSCRIPT的前提 一般,公式最好用于用户当前处理的对象(如返回域的默认值)或者确定视 图的选择标准。脚本最好用于访问已存在的对象,如基于其他文档的值来修改这 个文档的值。脚本提供了公式没有的功能,如操作 RichText 域的能力。在一些 情况下,公式提供了更好的效率,而且比小应用程序更方便。 可以使用 LotusScript 中的 Evaluate 函数将公式语言与 LotusScript 结 合起来。这样在完成相同任务的情况下,函数比 LotusScript 使用更少的行数。 通过使用同一表单的不同部分,可以在应用程序中将 LotusScript 和公式结合起 来。在脚本中包含公式可以使脚本更容易编写,但不能提高效率。 除了直接与 Notes 用户界面相互作用的函数外, 你可以使用 Evaluate 包 含任何函数,例如@Prompt 、@DialogBox 、@PickList 和@Command 。下面是与 LotusScript 结合的特别有用的函数: l ) @ Name :允许你操作层级名。 2 ) @ RePlace :从文本列表中取值,而不需要像 LotusScript 要求的循环 3 ) @ Unique :从文本列表中删除复本。 4 ) @ subset :从左到右读取列表。 当两者都用时,对于一个给定的任务,究竟使用 LotusScript 还是 Domino 公 式语言,主要取决于任务的复杂性。当做决策时,考虑以下几个问题: l )需要处理大量数据吗? 如果一个公式通过函数需要涉及多个数据库或文档,那么必须依赖于 Notes 用户界面来访问每个文档,然而 LotusScript 可以更有效更快地访问文档。 例如,LotusScript 是一个创建代理的好工具,它可以查看工作台上所有的 文档,并返回诸如数据库大小、已使用空间、文档数等的信息。 LotusScript 是 在多个文档中运行全文本搜索的好工具,并可以利用搜索结果执行活动。 2 )使用 Domino 对象模型 front 一 end 或 back 一 end 吗? Domino 对象模型( front 一 end 类)与相对应的@ commands 有相同的 Domino 代码,因此当使用这些类时, LotusScript 不可能比公式语言更好。然 而数据库( Back 一 end 类)使用不同的代码,所以比相对应的函数更好。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 121
  • 123.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 例如,执行修改多个域时,避免使用 NotesuIDocument Front 一 end 类。 NotesDocument Back - end 类更快,并允许赋予数据类型(包括 rich text ) , 以及增加新(隐藏)域。 Front 一 end 类只允许你修改表单中已存在的域,并 允许你在域中增加文本,就像@ command ( [ EditlnsertText]) 一样。 另外, Front 一 end 类不能在由服务器运行的计划代理中工作,只能在由 用户工作台运行的代理中有效(如从菜单中)。 3 )使用 CoRBA applets 吗? Domino 对象模型( Back 一 end )支持 CORBA 小应用程序。如果你打算利 用 COBRA 小应用程序开发 Web 应用程序,用于向浏览器用户显示信息。 4 )需要操作当前选中的对象吗? 使用公式语言,而不是 LotusScript 5 )需要在 Action 栏上编写按钮吗? 考虑使用公式语言,而不是 LotusScript 。按钮活动一般比较简单,而且直 接通过 Notes 用户界面完成任务,例如保存或关闭文档. 6 )需要返回域的默认值吗? 使用公式语言,而不是 LotusScript 7 )需要返回窗口标题吗? 使用公式语言,而不是 LotusScript 8 )需要从表单控制工作流程吗? LOTUSSCRIPT 是用表单事件控制工作流的最好选择,特别是 Query Save 事件, 因为它能处理更复杂的任务,如循环和设置多个变量。 例如,你可以通过操作输入和退出域事件,来事先确定的顺序,并要求用户 按照此顺序填写表单中的域。或者你可以防止用户打开、保存或编辑文档,直到 满足一定的条件。 9 )在一个公式中是否包含了太多的函数? 如果一个公式中包含了许多函数,尝试将公式转换成 LotusScript 。然而, 在只需要一个函数的公式情况下,例如@ Command [ FilePrint ] ,采用公式比 采用脚本更有效。 10 )需要使用大量 if - then 一 else 或 for 一和 while 一循环吗? WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 122
  • 124.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 使用 LOTUSSCRIPT 而不是公式语言,因为这样易于维护代码。而且,公式不支 持循环。 6.4.2 执行LOTUSSCRIPT和公式顺序分析 ( l )在单一表单中 LotusScript 和 Domino 公式在一系列活动中的执行顺序 如果你的应用程序包含了 LotusScript 和公式语言的结合体,这将有助于了 解表单中的事件和公式执行的顺序。 下面这个样例列出了在单一表单中 LotusScript 和 Domino 公式在一系列活 动中的执行顺序。这个列表是通过内嵌信息框命令或将@ prompt 公式嵌人各种 事件和公式生成的,这些事件和公式在一张包含各种不同域类型的表单中。这张 表单并不包含所有域的类型或评价结合体。然而,通过了解这个例子中的结果, 你也许能更好的理解应用程序表单中的执行顺序。假定测试表单包含 5 个域,从 高到低顺序如下: subject : Editable / Text 域(缺省值、输入转换、输入合法值校验公式) From :创建时计算/“作者”域(值计算公式) Counter :计算。数字域(值计算公式) DisplayNum :显示时/数字域(值计算公式) Body :可编辑/RTF 域(缺省值公式) l ) 表 l 一 11 说明 了 各 种 不 同的 活 动( 如 编写 文 档)以 及 每个 活 动中 LotusScript 事件和 Domino 公式的执行顺序。 编写文档活动执行顺序 对象 公式或事件 表单 Initialize 事件 表单 Window Title 表单 Query Open 事件/WebQuery Open 事件 Subject 域 Default Value 公式 Subject 域 Initialize 事件 From 域 Value 公式 From 域 Initialize 事件 Counter 域 Value 公式 Counter 域 Initialize 事件 Body 域 Value 公式 Body 域 Initialize 事件 Subject 域 Entering 事件 表单 PostOpen 事件 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 123
  • 125.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 2)使用@Command([FileSave])或者文件-保存来保存文档(见下表) 保存文档活动的执行顺序 对象 公式或事件 表单 Query Save 事件 Subject 域 Input Translation 公式 Counter 域 Value 公式 DisplayNum 域 Value 公式 Subject 域 Input Validation 公式 3 )使用@ Command ( [ FileClosewindow ] )或者文件一关闭来关闭窗口(见 表 l 一 13) 对象 公式或事件 表单 QueryClose 事件/WebQueryClose 事件 表单 Terminate 事件 Subject 域 Terminate 事件 From 域 Terminate 事件 Counter 域 Terminate 事件 DisplayNum 域 Terminate 事件 Subject 域 Terminate 事件 4)在只读状态下再次打开文档(见表 l 一 14 ) 。 表 1 一 14 在只读状态下再次打开文档活动的执行顺序 对象 公式或事件 表单 Initialize 事件 表单 Window Title 公式 表单 Query Open 事件/Query Open 事件 Subject 域 Initialize 事件 From 域 Initialize 事件 Counter 域 Initialize 事件 DisplayMum 域 Value 公式 DisplayMum 域 Initialize 事件 Body 域 Initialize 事件 表单 Postopen 事件 5)当打开文档时,由只读状态转换到编辑状态(见表 1-15) 表 1-15 在编辑文档活动的执行顺序 对象 公式或事件 表单 QueryModeChange 事件 Subject 域 Entering 事件(决定于光标) 表单 PostModeChange 事件 6)当打开文档时,由编辑状态转换到只读状态(未修改) ,见表 1-16 表 1-16 在由编辑状态转换到只读状态(未修改)活动的执行顺序 对象 公式或事件 表单 QueryModeChange 事件 表单 PostModeChange 事件 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 124
  • 126.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 7)当打开文档时,有编辑状态转换到只读状态(保存修改),见表 1-17 表 1-17 在由编辑状态转换到只读状态活动(保存修改)的执行顺序 对象 公式或事件 表单 QueryModeChange 事件 与保存文档顺序相同 表单 PostModeChange 事件 表单 QueryClose 事件/QueryClose 事件 与关闭文档顺序相同 与在只读状态下再次打开文档顺序相同 8)将光标从一个可编辑域移到另一个可编辑域,见表 1-18 表 1-18 在编辑状态光标移动时的执行顺序 对象 公式或事件 First 域 Exiting 事件 Second 域 Entering 事件 9)在编辑状态下刷新域(F9),见表 1-19 表 1-19 在编辑状态刷新域时的执行顺序 对象 公式或事件 Subject 域 Input Translation 公式 Counter 域 Value 公式 DisplayNum 域 Value 公式 Subject 域 Input Translation 公式 表单 PostRecalc 事件 ( 2 )在复杂例子中的事件顺序图显示了在包含子表单的表单中的事件顺序。 全局 1 Initialize 17 Terminate 表单 2 Initialize 3 Query Open 9 Post Open 11 QueryClose 13 Terminate 域1 4 Initialize 8 Entering 14 Terminate 子表单 5 Initialize 6 Query Open 10 Postopen 12 QueryClose 15 Terminate 域2 7 Initialize 16 Terminate WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 125
  • 127.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 打开文档时的事件顺序如下: l )全局的 Initialize 。 2 )表单的 Initialize 。 3 )表单的 Queryopen 。 4 )域 l 的 Initialize (包含在表单中) 。 5 )子表单的 Initialize 。 6 )子表单的 Queryopen 。 7 )域 2 的 Initialize (包含在子表单中) 。 8 )域 2 的 Entering 。 9 )表单的 Postopen 。 10 )子表单的 Postopen 。 关闭文档时的事件列表: 1 ) Queryclose 表单。 2 ) Queryclose 子表单。 3 ) Terminate 表单。 4 ) Terminate 域 l 。 5 ) Terminate 子表单。 6 ) Terminate 域 2 。 7 ) Terminat 全局。 6.5 DOMION和其他数据库的开发区别 目前的客户项目中集成性质的越来越多,而且因为 LOTUS 开发人员很多都是 从其他平台转移过来或身兼多职,因此清晰的认识 DOMINO 平台和其他数据库的开 发就变得相当重要了,首先我们看看类似的方面: (1)Notes 是一个文档型数据库,它的数据是以文档的形式存放的。Access 是一个 关系型数据库,它的数据是以记录的形式存放。 (2)我们已经知道在每一个文档中有很多域组成,相同结构的文档,它用的是同一 张表单。在 Access 中有很多记录,相同数量和类型的字段组成了 Access 中的 表。说得通俗一些,同一张表单中的域的数量是相同的,不同表单的域的数量 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 126
  • 128.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 是不同的。就相当于在 Access 中同一张表的字段数量和类型是相同的,但不 同表之间的字段数量和类型是不同的。 (3)表单中的域相当于 Access 中的字段。数据库的文档相当于 Access 中的记录。 区别:一是我们在 Notes 中通过视图查看文档,只是看到视图中显示了文档的 部分域,但不表示文档中的其它域不存在或丢失了这个道理,只是文档的一种 显示方法,这和 Access 不同,Access 将所有的字段都显示不来。但 Notes 只 是显示你需要的一些字段,其它的域仍然在文档中,只是你暂时不需要用到这 些域! 二是我们知道在 Access 中我们建了多少字段就是多少不会多也不会少, 但在 Notes 是不一样的。在一张表单保存后系统会自动添加一些系统域,这些 域是每个表单都会存在的,可以说有些是便于查询工作的:比如 Form,这个 域用来区别是那一张表单还有些其它的系统域,有“$”开头的一些。除了一 些能直看到的系统域以外,还有一些隐藏的内容,比如文档的唯一标识,这是 每个文档必须有的,如果你知道这个文档的标识符,你就能找到这个文档,就 象我们的身份证一样,用来区别不同文档,这是系统自动产生不会重复。 三是在 Access 中输入数据后直接关闭,系统能够自动保存,但在 Notes 中是不可以的,你输入数据关闭时系统会提示你是否保存新文档。如果你按不, 那你所建立的数据将会全部丢失! 四是在 notes 中我们可以建立多个视图进行查看数据, Access 不可以。 可 五是 Access 缺省是查看所有字段。但 Notes 缺省是个(无标题)视图,我 们习惯把它称为($All)视图,它是不可以进行删除的。它的缺省列为在在视图 中的编号。 六是在域中只有对域的类型进行规定,没有规定长度(除域是数字类型以 外)。在 Access 中对各种域的类型长度进行明确规定。 (4)关系和链接 关系型数据库中有关系,在表和表之间可以建立对应的关系,甚至可以 保证表之间的强制一致性关联。保证不会有垃圾的记录。 NOTES 中文档与文 档之间可以通过链接来表示。但是只是松散的链接,如果链接端的文档被删除, 只能出错。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 127
  • 129.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 (5)视图/索引 相同的是 Notes 中的视图来建立文档的索引, 关系型数据库中其实也有 View 用于建立记录的索引,Access 里没有 View,不过有 Query。它们都用来展现具体 的文档/记录,NOTES 可以通过视图来删除文档就象在某些 Query 中删除记录一样。 不同点:因为没有关系的概念,NOTES 中的视图索引,建立的是一份文档, Query 则可以针对多表来建立) 。 (6)表单 表单只是一张纸,用来填写数据(数据包括 Access 中的记录和 Notes 中的文 档)的工具或窗口,说它是一张纸针对 Notes 来讲更贴切。因为一方面可以做规 定好栏目的表格,用来填写规定的字段(Notes 和 Access 相同);在 Notes 表单这 张纸上还可以“乱涂乱画”(用 RTF 域),Access 中其实也可以做一些乱涂乱画的 事情了,不过要另外拿一张纸(用 MEMO 域嵌 OLE 对象) Notes 因为要支持冲突 。 的问题,所以即使是表单,也要保存;而 Access 的表单中可以有 DataSource,这 样在添加记录内容后可以自动保存,其实如果 DataSource 为空,一样要通过程序 去 Save。 (7)记录/文档 虽然可以在表单中规定域类型,但是这只是这张纸上的规定,其实 Notes 下的文档中的域类型是可以随意变换的(同时也是随意增删的),并且 Notes 文档中的域支持多值,这个与 Access 大不相同。所以在编写程序的时候, 一定要有出错处理,HasItem,IsNumeric 等函数的应用会比 Access 大得多。 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 128
  • 130.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 13.DOMINO-B/S 模式下常见应用功能 开发指南及分析(例程参见随书附赠 的 CHINALOTUSVIPFTP) 13.3 DOMINO与EXECL交互的多种方式 在 DOMINO 的日常应用中,将数据导出为 EXECL 以便再处理是经常遇见的需求, 那么接着我们就一起看看具体的实现方式有哪些。 1)LS+VBA 以前在 windows Domino 环境中的 B/S 应用操作 EXCEL,相对来说,比较简单, 只要操作系统上装了 Office 套件,利用 LS+VBA 就可以了。大致代码如下: Dim obj As Variant Dim apli As Variant Set obj = CreateObject("Excel.Application") Set apli = obj.Application apli.Visible=True Dim workb As Variant Dim works As Variant Set workb= apli.Workbooks.Add() Set works = workb.Worksheets(1) Call workb.Activate WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 129
  • 131.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Call works.Activate With works .Cells(1,1).Formula="=SUMA(E1:E2)" End With 但是如果在 AIX 上操作的话,没法安装 office 套件,就没有 Excel.Application,不能创建相应的对象。 1) html+print 的方法 利用用 html+print 的方法可以将输出的信息转化为 excel 文件。 Print {Content-type:application/vnd.ms-excel} Print {Content-Disposition:attachment;filename=excelData.xls} Print "Hello, this is the LotusScript web agent. I've been triggered by the form's WebQuerySave event.<BR>Now the UNID is <P>" Print "<TABLE border=1><TR><TD>测试 1 /TD><TD>测试 1</TD></TR>" Print "<TR><TD>测试 1</TD><TD>测试 1</TD></TR></TABLE><P>" 这样就可以直接产生 excel 格式文件。但是在使用的过程中发现 EXCEL 的字符 集选项有时候会有变化,所以需要在代码中将字符集给固定下来。只需要增加一 句就好了。如下: Print {Content-type:application/vnd.ms-excel} Print {Content-Disposition:attachment;filename=excelData.xls} Print {<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312">} WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 130
  • 132.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Print "Hello, this is the LotusScript web agent. I've been triggered by the form's WebQuerySave event.<BR>Now the UNID is <P>" Print "<TABLE border=1><TR><TD>测试 1 /TD><TD>测试 1</TD></TR>" Print "<TR><TD>测试 1</TD><TD>测试 1</TD></TR></TABLE><P>" 3)通过 js,FSO 去操作本地的文件系统 var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.createtextfile("c:myjstest.xls",true"); 4)通过 OFFICE 自带的 excel 控件处理,但受制于 EXECL 的版本 考虑到性能和目前大多数客户的实际环境,我们接着还是以 LS+VBA 为例子分 析看下我们的 DOMINO 数据是如何跑到 NSF 里去的。 1) 设计一个后台代理,让它定期自动运行,例如一个礼拜运行一 次,将这个 礼拜当中新添加的文档的摘要内容取出来放到一个 Excel 文件里面,然 后对这个报表进行单元格的自动对齐等操作,最后将这个 Excel 文件以电 子邮件附件的形式发送到特定的若干地址当中去。 运行这样 的程序, 必须在机器上安装 Excel,这样 LotusScript 才可以操作 Excel。这里,Notes 数据库只需要在一台机器(服务器)上运行即可,也就是说, 只需要在服务器上面装上 Excel 程序就可以了。 要打开一个 Excel 对象,需要用到 LotusScript 里面的 CreateObject 方 法,这个方法打开一个 OLE 对象,我们可以在方法调用的时候指定对象类型: xlApp As Variant '创建一个新的 Excel 应用实例,对应一个 Excel 文件 Set xlApp = CreateObject("Excel.application") '在这个 Excel 文件当中添加一个 Sheet xlApp.Workbooks.Add xlApp.Visible = True LotusScript 是一种语法比较松散的脚本语言,类似于 VB,为了避免代码的 逻辑混乱,我们可以利用 LotusScript 里面的面向对象的特性,将处理 Excel 操 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 131
  • 133.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 作的代码统一写到一个类里面,这样既便于维护,也可以最大程度的避免代码冗 余,提高代码的重用性。 一 般的 , 我 们用 Script 库 共 享代 码 的方 式 来实 现 一个 类 :在 Domino Designer 的 “Script 库” 里面点击“新建 LotusScript 库”就可以新建一个 空的共享脚本,我们定名字为 “ExcelUtil”,希望在里面存放所有需要的 Excel 操作代码;然后,我们在(Declarations)方法里面写下全局的类定义如下: Class ExcelReport Private xlApp As Variant '其他变量…… Sub new() '创建一个新的 Excel 应用实例,对应一个 Excel 文件 Set xlApp = CreateObject("Excel.application") '在这个 Excel 文件当中添加一个 Sheet xlApp.Workbooks.Add xlApp.Visible = True End Sub '其他方法可以往下继续添加…… End Class 我们可以用类似 Java 的语言思想来看待这段类定义的代码:这个类的名称 叫做 ExcelReport,意为一个类的实例对应于一个 Excel 文件,其中私有的变量 xlApp 对应 Excel 文件,构造函数 new() 则实现了 Excel 对象和 Sheet 的初 始化。我们以后更多的操作方法可以追加在后面,实现更多的功能。 有了这个共享的类,我们就可以考虑实现业务逻辑了。在 Domino Designer 的“代理”里面,按照本文 前面提到的 方式,我们创建一个简单的 代理 “ReportGenerator”,然后,在(Options)方法里面,我们引入那个共享的类: Use "ExcelUtil" 这 样就 可 以 在这 个 代理 里 面使 用 共 享的 ExcelReport 类了 。 随后, 我 们在 Initialize 方法里面通过 ExcelUtil 里面的类定义并初始化一个 Excel 对象: '定义 ExcelReport 类的实例,表示一个 Excel 对象 Dim report As ExcelReport '调用构造函数,初始化 Set report = New ExcelReport 操作 Excel 对象 对 Excel 对象的 简 单操作 主要是 通 过调用上 述 ExcelReport 类当 中的 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 132
  • 134.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 xlApp 变量的特定方法来实现的。 我们都知道,Excel 文件的基本数据单元就是一个个的“单元格”,由于所 有单元格默认都是为空且存在的,所以对单元格没有“添加”和“删除”操作(要 删除一个单元格的内容,只要写入一个空字符串即可)。所以,简单说来,操作 Excel 文件,就是对单元格的定位与读写,而不是“增删改”模式。要定位一个 单元格,只要知道 “sheet”、“row” 和 “column” 三个参数就可以了;而 简单说来,单元格的内容可以统一认为是一个字符串。下面的函数实现了对一个 单元格的读写: Function insertData(intSheet As Integer,row As Integer,column As Integer,value As String) '1.定位单元格,在第一个 Excel 文件的第 intSheet 个(从 1 开始) ' sheet 里面的行列号为 row 和 column 的单元格 '2.用字符串 value 来填充单元格 xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row , column ).Value = value End Function Function getData( intSheet As Integer , row As Integer , column As Integer ) As String '得到第一个 Excel 文件的第 intSheet 个(从 1 开始)sheet 里面的行列号 为 row 和 column 的单元格的值 getData = xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row , column ).Value End Function 上述代码很简单,仅仅调用了一句 xlApp 对应 OLE 对象的方法就实现了定 位与读写。当然,我们还需要对以上方法添加错误处理代码,具体关于错误处理 的内容介绍超出了本文的范围,请参考 LotusScript 的相关资料。 此外,我们应该注意到,通过上述方法创建的 Excel 对象还是在内存当中的, 并没有保存为文件,我们需要添加一个保存文件的方法 “saveFile” 来保存它。 最后,我们还应该为这个 ExcelReport 类实现一个退出的方法 “doQuit”,用 来关闭和释放 Excel 对象的资源。 这样,我们就得到了如下完整的 ExcelReport 类: Class ExcelReport Private xlApp As Variant Sub new() '创建一个新的 Excel 应用实例,对应一个 Excel 文件 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 133
  • 135.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Set xlApp = CreateObject("Excel.application") '在这个 Excel 文件当中添加一个 Sheet xlApp.Workbooks.Add xlApp.Visible = True End Sub Function saveFile(strFilePath As String) '保存 Excel 文件到硬盘指定位置 xlApp.ActiveWorkbook.SaveAs( strFilePath ) End Function Function insertData(intSheet As Integer,row As Integer,column As Integer,value As String) On Error Goto err_hdl '1.定位单元格,在第一个 Excel 文件的第 intSheet 个(从 1 开始) sheet 里面的 ' 行列号为 row 和 column 的单元格 '2.用字符串 value 来填充单元格 xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row , column ).Value = value Exit Function err_hdl: Print Error$ + "in cls: ExcelReport , method: insertData , at line " + Cstr( Erl ) Exit Function End Function Function getData( intSheet As Integer , row As Integer , column As Integer ) As String On Error Goto err_hdl '得到第一个 Excel 文件的第 intSheet 个(从 1 开始)sheet 里面 的行列号为 row 和 column 的单元格的值 getData = xlApp.Workbooks(1).Worksheets( intSheet ).Cells( row , column ).Value Exit Function err_hdl: Print Error$ + "in cls: ExcelReport , method: getData , at line " + Cstr( Erl ) getData = "" Exit Function End Function Function doQuit '关闭资源 xlApp.Quit '资源释放 Set xlApp = Nothing End Function WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 134
  • 136.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 End Class 业务逻辑实现 在业务逻辑方面,首先,我们需要在这个 Notes 数据库里面新建一个视图 (NotesView) ,名为 “byTime”,按照文档的创建时间从晚到早的排序所有的文 档,这个视图的创建很简单,不用任何代码;随后,我们可以借助这个视图来得 到按照创建时间排序的文档(NotesDocument),从最近的文件开始遍历,对所有 一周以内创建的文档进行处理,将它们的内容写入新建好的 Excel 对象的对应单 元格;完成以后将这个文件保存在硬盘,然后发送给指定的地址列表当中;最后 在 本地 删 除 这个 文 件。 这 个简 单 业 务逻 辑的代 码 如 下( 关 于 NotesView 和 NotesDocument 的概念和具体用法请参考相关资料): Sub Initialize '定义 ExcelReport 类的实例,表示一个 Excel 对象 Dim report As ExcelReport Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim iRow As Integer Dim author As String '调用构造函数,初始化 Set report = New ExcelReport '写入 Excel 标题行(第一行) Call report.insertData(1,1,1,"创建时间") Call report.insertData(1,1,2,"题目") Call report.insertData(1,1,3,"作者") '得到按照日期排序的视图 Set db = session.CurrentDatabase Set view = db.GetView("byTime") Set doc = view.GetFirstDocument iRow = 2 While Not(doc Is Nothing) '按照创建日期排序,处理一周以内的所有文档 If (doc.Created > Today-7 ) Then '用 Cstr 函数转换时间到字符串 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 135
  • 137.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Call report.insertData(1,iRow,1,Cstr(doc.Created)) 'GetItemValue 返回的是一个字符串数组,我们要其中的第 一个 Call report.insertData(1,iRow,2,doc.GetItemValue("Subject")(0)) '从 From 当中得到作者名字,然后转成简称 author = doc.GetItemValue("From")(0) Call report.insertData(1,iRow,3,session.CreateName(author).Abbreviated) '找到下一个文档 Set doc = view.GetNextDocument(doc) iRow = iRow + 1 Else '发现不是本周内的文档,退出循环 Goto BreakLoop End If Set doc = view.GetNextDocument(doc) Wend BreakLoop: '保存文件 Call report.saveFile ("C:Docs Report This Week.xls") '释放资源 Call report.doQuit '发送邮件 Call SendMail("Rui R Hu/China/IBM","C:Docs Report This Week.xls") '还可以发送更多地址...... '删除本地文件 Kill "C:Docs Report This Week.xls" End Sub 用邮件发送报表 其中,代码用到了一个自定义的方法 “SendMail”,它可以向一个地址发送 一封带附件的邮件,两个参数分别是收件人地址和附件文件地址。代码如下 Sub SendMail(target As String,attachment As String) Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim ritme As NotesRichTextItem Set db = session.CurrentDatabase Set doc = New NotesDocument( db ) WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 136
  • 138.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 doc.Form = "Memo" doc.SendTo = target doc.Subject = "Here's the document you wanted" Set ritem = doc.CreateRichTextItem("Attachment") ritem.EmbedObject EMBED_ATTACHMENT, "", attachment Call doc.Send( False ) End Sub 设置自动运行 写好了代码,我们就可以让这个代理运行了,不同于本文前面提到的简单例 子,这里,我们希望让这个代理在每周五下午运行,生成一周的报表发送给一些 收件人,设置如下图所示: 这样,每周五下午,相关收件人就会收到一封信,其中的附件就是一个 Excel 报 表,如下图所示: 用 Excel 宏取得更多操作代码 读者一定对上图当中的 Excel 报告很不满意,因为这个 Excel 报表格式很 难看,需要读者手工在每一列的分界处双击一下,来对齐单元格内容。有没有办 法可以自动实现这个烦人的操作呢? 答案当然是肯定的,而且我们可以不用参考任何书籍或者资料就开发出需要 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 137
  • 139.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 的代码。 一般地,关于 Excel 报表的更多操作,我们可以通过翻阅参考资料来 学习更多功能代码的实现方法,就如同其他技术的学习一样。不过,现在我们有 另一种更加方便、巧妙和快速的方法可以得到我们需要的操作代码,那就是利用 Excel 的宏。在相关参考资料不太充足的情况下,这个方法尤为有用。 我们就拿当前需要的“对齐单元格”的需求为例子,看看如何用宏来取得代码。 如下图所示: 首先,我们打开 Excel 程序,新建一个文件,点击“工具”-“宏”-“录制 新宏”,开始录制新的宏。 然后,我们只要简单的在 B 列和 C 列中间双击一下对其单元格,就可以按 “停止录制”的按钮以停止录制了。 最后,我们打开“工具”-“宏”-“Visual Basic 编辑器”,见到在“模块 1”当中,有一个 VBA 的函数。这个函数正是我们刚才录制的宏操作,当中只有 一句代码,就是对其单元格的代码。 这样,我们就取得了这个操作的 VBA 代码。在 “ExcelReport” 类当中, 我们“照葫芦画瓢”地添加这个功能的方法如下: '对齐单元格,col 表示列名称,接受 “A” “B” 等列名 Function autoFit(intSheet As Integer, col As String) xlApp.Workbooks(1).Worksheets(intSheet).Columns(col+":"+col). EntireColumn.AutoFit End Function WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 138
  • 140.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 在业务逻辑代码里面,我们在数据全部填好以后,加上以下三句话,就可以自动 对齐单元格了: Call report.autoFit(1,"A") Call report.autoFit(1,"B") Call report.autoFit(1,"C") 这样,我们就可以得到格式整齐的 Excel 报表了。更重要的是,我们也了解 了,如果我们想要在我们的代码当中实现一个 Excel 的高级功能,只要简单地用 宏来录制相关操作,得到相应的 VBA 代码,就可以快速地在 “ExcelReport” 类 里面添加相应的方法了。 调试代码 有了宏的录制,我们就可以“挖掘”更加丰富的 Excel 高级功能了,不过, 这种“照葫芦画瓢”的代码生成方式也不是非常的可靠,可能出错,这时,代码 的调试就可以发挥作用了。 同很多语言开发平台一样,Lotus Domino Designer 也支持 LotusScript 等 语言的调试功能。调试的具体用法很简单:首先,在 Lotus Notes 当中将“文 件”-“工具”-“调试 LotusScript” 勾上,开始调试模式。然后,在 Notes 当 中执行任何 LotusScript 代码都会进入调试模式。在调试模式当中,我们可以单 步前进、用双击的方法设置断点、观察变量等等。一切调试功能都类似于一般的 高级语言一样,主要的区别就在于,调试一定是从运行的第一句代码开始停顿, 断点只能在调试模式才可以设置。 2)以上是后台定期导出的例子,接着我们看看如何在前台执行一个操作时间将指 定视图数据导为一个标准的 EXECL 文件,后续的如格式处理等操作仍可参考例一 WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 139
  • 141.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 具体例程如下: Sub Initialize On Error Goto ErrorRoutine Dim doc As notesdocument Dim cdoc As notesdocument Dim view As notesview Dim session As New notessession Dim db As notesdatabase Dim Num As Integer Dim NewNum As Integer Dim exapp As Variant Dim workbook As Variant Dim worksheet As Variant Dim Readerstr As String Dim Stautsstr As String Dim bodyitem As NotesRichTextItem Dim ReCommenditem As NotesRichTextItem Set db=session.currentdatabase Set cdoc=session.documentcontext Forall v In cdoc.Reader Readerstr =Readerstr+v+" " End Forall WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 140
  • 142.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 If cdoc.Stauts(0) = "1" Then Stautsstr = "已完成" Else Stautsstr = "未完成" End If Set bodyitem = cdoc.GetFirstItem("station") Set ReCommenditem = cdoc.GetFirstItem("ReCommend") Dim tempstr As String 'tempstr = ReCommenditem.text 'Print ReCommenditem.text '%REM Dim temp As String Dim bodystr As String Dim i As Double temp = ReCommenditem.GetFormattedText(False,0) bodystr=temp '/替换 chr$(13) i=1 While i>0 i=Instr(i+1,temp,Chr$(13),5) If i>0 Then bodystr=Left$(temp,i-1)+"," bodystr=bodystr+Right$(temp,Len(temp)-i) temp=bodystr WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 141
  • 143.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 End If Wend '/替换 chr$(10) i=1 While i>0 i=Instr(i+1,temp,Chr$(10),5) If i>0 Then bodystr=Left$(temp,i-1)+"," bodystr=bodystr+Right$(temp,Len(temp)-i) temp=bodystr End If Wend '%END REM '/定义 excel 变量 Print |<script>| Print |var exapp = new ActiveXObject("Excel.Application");| Print |if (exapp!=null){| Print |exapp.statusbar ="正在创建工作表,请稍等……";| Print |exapp.visible=true;| Print |exapp.ScreenUpdating=true;| Print |var workbook=exapp.workbooks.add;| Print |var worksheet =exapp.workbooks(1).worksheets(1);| Print |exapp.caption ="正在将当前日程安排导出为EXCEL表" | WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 142
  • 144.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Print |exapp.cells(1,1)="主题";| Print |exapp.cells(1,2)="| +cdoc.Subject(0)+ |";| Print |exapp.cells(2,1)="任务参与者";| Print |exapp.cells(2,2)="| +Readerstr+ |";| Print |exapp.cells(3,1)="任务安排者";| Print |exapp.cells(3,2)="| +cdoc.AddName(0)+ |";| Print |exapp.cells(4,1)="时间";| Print |exapp.cells(4,2)="| +cdoc.sDate(0)+|--|+cdoc.eDate(0)+ |";| Print |exapp.cells(5,1)="状态";| Print |exapp.cells(5,2)="| +Stautsstr+ |";| Print |exapp.cells(6,1)="安排描述";| Print |exapp.cells(6,2)="| +bodyitem.GetFormattedText(False,0)+ |";| Print |exapp.cells(7,1)="备注";| 'Print |exapp.cells(7,2)="| +ReCommenditem.GetFormattedText(True,0)+ |";| Print |exapp.cells(7,2)="| +bodystr+ |";| Print | exapp.worksheets(1).pagesetup.orientation =2;| WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 143
  • 145.
    IBM 官方推荐用书-CHINALOTUS 之DOMINO7 开发大百科 Print | exapp.worksheets(1).pagesetup.centerheader ="report_confidential";| Print | exapp.worksheets(1).pagesetup.rightfooter ="page&P"|&Chr$(13)&|"Date:&D";| Print | exapp.worksheets(1).pagesetup.centerFooter="";| Print | exapp.statusbar ="数据导入成功";| Print | }</script>| 'Print "["+db.FilePath+"/0/"+cdoc.UniversalID+"?OpenDocument]" Exit Sub ErrorRoutine: Msgbox "Error:" & Str(Erl) & " " & Error End Sub WebSite:www.chinalotus.com E-mail:cndragonws@hotmail.com TEL:86-0731-5817822 FAX:5159795-608 144