lotus发邮件附加批量改文件名时提示批量改文件名名太长或批量改文件名名的语法无效而无法创建。如何解决。win7系统。

附件文件名过长导致下载时不能直接打开,这个怎么解决?
[问题点数:100分,结帖人hywink]
本版专家分:32
结帖率 100%
CSDN今日推荐
本版专家分:94519
2006年 总版技术专家分年内排行榜第七
2006年11月 总版技术专家分月排行榜第二
2006年11月 .NET技术大版内专家分月排行榜第二2006年9月 .NET技术大版内专家分月排行榜第二
2006年8月 .NET技术大版内专家分月排行榜第三2006年7月 .NET技术大版内专家分月排行榜第三2006年6月 .NET技术大版内专家分月排行榜第三
本版专家分:32
结帖率 100%
本版专家分:20292
本版专家分:3588
本版专家分:4228
本版专家分:831
本版专家分:30426
本版专家分:32
结帖率 100%
本版专家分:32
结帖率 100%
本版专家分:32
结帖率 100%
本版专家分:888
本版专家分:32
结帖率 100%
本版专家分:32
结帖率 100%
本版专家分:24787
本版专家分:816296
2012年 荣获名人称号
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
2011年3月 总版技术专家分月排行榜第一2011年2月 总版技术专家分月排行榜第一2011年1月 总版技术专家分月排行榜第一2010年12月 总版技术专家分月排行榜第一2010年11月 总版技术专家分月排行榜第一2010年10月 总版技术专家分月排行榜第一2010年9月 总版技术专家分月排行榜第一2010年8月 总版技术专家分月排行榜第一2010年7月 总版技术专家分月排行榜第一2010年6月 总版技术专家分月排行榜第一2010年5月 总版技术专家分月排行榜第一2010年3月 总版技术专家分月排行榜第一2010年4月 总版技术专家分月排行榜第一2010年2月 总版技术专家分月排行榜第一2010年1月 总版技术专家分月排行榜第一2009年12月 总版技术专家分月排行榜第一2009年11月 总版技术专家分月排行榜第一2009年10月 总版技术专家分月排行榜第一2009年8月 总版技术专家分月排行榜第一2009年7月 总版技术专家分月排行榜第一2009年6月 总版技术专家分月排行榜第一
本版专家分:32
结帖率 100%
本版专家分:32
结帖率 100%
本版专家分:32
结帖率 100%
匿名用户不能发表回复!|
CSDN今日推荐当前位置: >>
Lotus Domino 程序设计
第3章 Lotus Domino 6.5 程序设计编程概述 .......................................................................................................................................... 1 3.1.1 编程语言 .............................................................................................................................. 1 3.1.2 Domino 可编程对象 ............................................................................................................ 2 3.2 公式语言简介 ................................................................................................................................ 10 3.2.1 使用语法规则 .....................................................................................................................11 3.2.2 使用运算符 ........................................................................................................................ 13 3.2.3 使用 @function ................................................................................................................. 14 3.2.4 公式语句的计算顺序 ........................................................................................................ 15 3.2.5 其它规则 ............................................................................................................................ 16 3.3 公式在表单、域和操作中的应用 ................................................................................................ 17 3.3.1 公式在域中的应用 ............................................................................................................ 17 3.3.2 公式在操作中的应用 ........................................................................................................ 18 3.3.3 公式在表单中的应用 ........................................................................................................ 20 3.4 公式在视图中的应用 .................................................................................................................... 21 3.4.1 视图选择条件 .................................................................................................................... 21 3.4.2 视图的列 ............................................................................................................................ 22 3.4.3 视图操作 ............................................................................................................................ 23 3.5 公式在代理中的应用 .................................................................................................................... 24 3.6 公式的其他用途 ............................................................................................................................ 25 3.6.1 通过公式访问用户环境 .................................................................................................... 25 3.6.2 访问当前数据库和视图 .................................................................................................... 25 3.6.3 通过公式访问当前文档 .................................................................................................... 26 3.6.4 访问当前数据库之外的数据 ............................................................................................ 27 3.7 LotusScript 编程简介 .................................................................................................................... 28 3.8 Domino 对象模型 .......................................................................................................................... 29 3.8.1 前端用户接口类 ................................................................................................................ 29 3.8.2 后端类 ................................................................................................................................ 29 3.8.3 对象层次结构 .................................................................................................................... 30 3.8.4 事件类型和顺序 ................................................................................................................ 31 3.8.5 使用 LotusScript 编程的提示和建议................................................................................ 33 3.9 使用 LotusScript 访问数据库 ....................................................................................................... 33 3.10 使用 LotusScript 访问视图和文件夹 ....................................................................................... 36 3.11 使用 LotusScript 访问文档 ........................................................................................................... 38 3.12 LotusScript 在代理中的应用 ........................................................................................................ 40 3.13.1 编程概述3.1.1 编程语言公式、LotusScript、Java 和 JavaScript 代码为 Domino 设计者提供了完整的编程界面。可以根据 需要将代码附加到多个对象。例如:如果在表单中创建一个计算域,则可附加公式来计算此域的值。也 可向域的 onFocus 事件附加 JavaScript 代码,此代码将在用户将焦点放置在域上的任何时候执行。还 可以决定创建一个公式代理、LotusScript 代理或 Java 代理来自动定期更新数据库中的所有文档。 Domino 为支持 COM 和 OLE 的开发环境提供编程界面。Domino 还提供了一个用于 Java 应用 程序和小程序的编程界面。Java 应用程序和小程序可以通过访问已安装的 Domino 软件在本地操作, 也可以通过使用 CORBA 与 IIOP 协议连接到一个 Domino 服务器进行远程操作。 在何处使用 script 和公式 在编写代码之前, 要确保简单操作不能执行此任务。 可使用不需要编程的表单或视图中的简单操作 来设计一些对象。 在编程界面中进行选择时,请考虑以下准则: ? 公式是具有类似编程语言特征的表达式。例如:可将值赋予变量,并且使用限制的控制逻辑。 公式语言通过调用 @functions(函数) 和 @commands(命令) 与 Domino Designer 接口。 ? 通常情况下,对用户当前正在处理的对象,最好使用使用公式编程,例如:返回域的缺省值或 确定视图的选择条件。此外,公式在某些场合提供更好的性能,并且对简单应用程序来说比较 方便。 ? JavaScript 是跨平台、面向对象的描述性语言。通过从 Objects 附签中选择 JS Header,可在 编程窗格中编写 Header script, 并且在 Script 区键入 script。 Script 也可被附加到诸如 onClick 的特定事件上,或者被附加到诸如按钮的对象上。不能在代理中编写 JavaScript。Domino 监 控用户 script 的编译和加载。但是不将 JavaScript 存储在已编译的表单中。 JavaScript 最好用于 Web 应用程序, 或者单个应用程序被同时用于 Notes 和 Web 环境 时。 ? LotusScript 是完全面向对象的编程语言。它通过预定义的类与 Domino 接口。Domino 监控 用户代码的编译和加载,并且自动包含 Domino 的类定义。 LotusScript 最好用于编程逻辑比较复杂的地方。LotusScript 擅长访问存储的数据库数据 (后端) LotusScript 提供了一些公式没有的功能, 。 例如: 操作数据库存取控制列表 (ACL) 的 能力。LotusScript 的 UI(前端)能力受到限制。 ? Java 是一种完全面向对象的编程语言,它与 Domino 的接口是通过预定义的类实现的。在代 理方面它可与 LotusScript 相比, 但是它不能附加到 Domino UI 中的事件中。 Domino 监控用 户的代理代码的编译和载入,代码可以自己写也可以引入。 Java 可以用在代理、Java 应用程序和小程序中,可以在 Domino 以外编写和编译,并 且可以通过类接口访问 Domino。3.1.2 Domino 可编程对象下表概括了 Domino 中的可编程对象。它指定了对象的范围,以及对象是否支持简单操作、公式、 LotusScript、Java 或 JavaScript。图表 1 Domino 可编程对象范围 工作台 数据库Domino 对象 便捷图标* 复制公式 代理 事件支持 公式 公式 公式,简单操作,LotusScript,Java LotusScript ,公式 LotusScript,公式,简单操作 公式 公式,简单操作 公式,简单操作,域 公式,简单操作,LotusScript,JavaScript导航器设计热点视图或文件夹设 表单公式 计 选择公式 列公式 操作 隐藏操作公式 事件 表单设计 窗口标题公式 区段标题公式 区段存取公式 插入子表单公式 隐藏段落公式 操作 隐藏操作公式 事件 热点(按钮或操作) 热点(链接或公式弹出) 表单中的布局区 热点(操作) 域设计 表单中的域设计 缺省值公式 输入转换公式 输入校验公式 计算域的值公式 关键字域公式 事件 文档 (编辑模式) 区段标题公式 RTF 文本域 隐藏段落公式 热点(按钮或操作) 热点(链接或弹出公式)公式 公式,LotusScript 公式 公式,文本 公式 公式 公式 公式,简单操作,LotusScript,JavaScript 公式 公式,LotusScript,JavaScript 公式,简单操作,LotusScript,JavaScript 公式 公式,简单操作,LotusScript,JavaScript 公式 公式 公式 公式 公式 LotusScript,JavaScript 公式,文本 公式 公式,简单操作,LotusScript,JavaScript 公式下面对主要的几个编程对象作一个介绍。 1.代理 代理是可通过许多机制触发的用户过程。代理运行在: ? 用户的工作站。如代理的触发器是: “手动”或“当文档已被粘贴时执行” 。 ? 包含此代理的服务器或工作站。如代理的触发器是: “在新邮件到达之前”“新邮件到达后” 、 、 “创建或修改文档后执行”或“按时执行” 。 可以用公式语言、LotusScript 和 Java 来编写代理,也可以使用 Domino 提供的代理。因此在编 写代理之前,请查看一下 Domino 提供的代理是否可以做此工作。 基于公式的代理可巡回地在数据库文档上运行。 可以通过代理接口应用搜索条件来指定哪些文档将 被处理。公式中的 SELECT 语句更好地限制了搜索。如果公式中没有包含一个 SELECT 语句,则 Domino Designer 添加一个 SELECT @All 语句( SELECT @All 语句除外) 。SELECT 语句必须是公 式中的第一个有效语句。 LotusScript 和 Java 代理只能运行一次。 可以通过语言结构提供搜索标准和巡回方式, 通过代理接 口应用的搜索标准只能通过 NotesDatabase (LotusScript) 中的 UnprocessedDocuments 或 AgentContext (Java) 中的 getUnprocessedDocuments 实现。 下面是代理示例: 以下公式根据“TotalSales”域的值,为选定的文档的“Category”域写入值。如果语句中不包含 “SELECT @All”语句,则 SELECT 语句必须出现在公式中的应用语句之前。 SELECT TotalSales &= 200000; FIELD Category := &Above Quota& 图表 2 创建代理图表 3使用操作公式调用代理 2.操作 操作是与视图或表单相关联的定制处理过程。当打开视图或打开使用该表单创建的文档时,操作 将显示在“操作”菜单命令中或者出现在操作条的按钮中,供用户使用,一般在表单或者视图的上方。 可以使用“公式条件为真时隐藏操作”公式,有条件地限制在菜单中或操作条中操作使用。 操作在用户的工作站上运行。如果在浏览器中使用,操作运行在服务器上。 如:做一个保存文档的操作:@command([filesave]);图表 4 保存操作图表 5 操作分别在 Notes 和浏览器中的显示 3.热点 在表单设计、导航器设计、布局区域设计和 RTF 文本域中,可以创建热点。热点在选中时激活, 它可能是以下几种类型: ? 链接热点跳转到其他对象。由设计者提供链接。 ? 弹出式文本显示文本。设计者提供文本。 ? 按钮执行某一操作。设计者提供简单操作、公式、LotusScript 或 JavaScript 代码。 ? 弹出式公式基于公式的结果显示弹出式文本。由设计者提供公式。 ? 操作热点执行某一操作。由设计者提供简单操作、公式、LotusScript 或 JavaScript 代码。 除了按钮显示为按钮,操作热点显示为高亮文本外,按钮和操作热点是相同的。 在 Notes 中使用程序,热点运行在用户的工作站上。在 Web 中,根据热点类型运行在浏览器或者 服务器上。图表 6 在页面中使用热点 4.表单公式 表单公式确定在不同的条件下,使用哪个表单填写和显示文档。 表单公式是可选的。Domino Designer 按以下优先次序选择表单: 1) 存储在文档中的表单。 2) 表单公式中指定的表单。 3) 文档创建时使用的表单。 4) 数据库的缺省表单。 表单公式必须返回表单名。要输入表单公式: 1) 在 Designer 中打开视图。 2) 单击“对象”附签中的“表单公式”对象。 3) 在 Script 区域输入公式。 表单公式将重设使用公式或 LotusScript 创建文档的视图操作调用的表单。图表 7 视图的表单公式例如:一个视图具有如下表单公式: @If(@IsResponseD&Response&;&MainTopic&) 此表单公式指出,视图中的文档如果是答复文档则使用“答复”表单显示,否则将使用 MainTopic 表单显示。然而,如果用户试图使用其它表单(如“Phone Number” )构造一个新文档(从 Notes 菜单 中选择“创建” “Phone Number”,则用户将看到 MainTopic 表单而不是 Phone Number 表单。使用公 ) 式或 LotusScript 构造新文档的视图操作的结果也一样。 要避免出现此问题,请在表单公式中添加下面的内容。 @If(@IsNewD @Return(Form); &&) 5.选择公式 选择公式选择显示在视图中的文档。 选择公式必须以 SELECT 语句结束。如果公式中的最后一个语句是逻辑表达式,Domino 添加关 键字 SELECT 来将它转换成 SELECT 语句。图表 8 视图的选择公式6.列公式 列公式用来确定在视图的列中显示的内容。列公式必须返回一个文本字符串。RTF 文本域不能用 在列公式中图表 9 视图的列公式7.窗口标题公式 窗口标题公式针对那些使用该表单创建的文档, 生成显示在标题条中的文字。 此公式必须返回一个 数字或文本值,或者是一个单独的允许类型的域。 RTF 文本域不能用在窗口标题公式中。图表 10 窗口标题公式8.隐藏段落公式 如果相关公式值为真,则表单中的段落、域等将被隐藏(不显示出来) 。图表 11 段落隐藏公式9.事件 关联在某个对象上,有一定的触发条件。 图表 12 表单事件代码10.域设计公式 作为域设计过程的一部分,可以编写下列公式: ? 缺省值公式,域的初始值。 ? 输入转换公式 ? 输入校验公式 ? 计算域的值公式 ? 关键字域的公式图表 13 域的事件图表 14 域的选型公式3.2 公式语言简介公式语言提供了语法和 @function,可以对常量和变量进行赋值计算,并执行简单的逻辑运算。变 量可以是 Notes 文档中的域或是只用于即时公式的临时变量(也叫做临时域) 。 R6 增加了循环语句。@for,@while,@dowhile。 3.2.1 使用语法规则公式由一个或多个语句构成,每个语句都由以下成分构成: ? 变量 ? 常量 ? 运算符 ? @Function ? 关键字 一个值可以是变量、 常量、 函数的结果, 或者是由上述任意元素与运算符组合而成的表达式的结果。 1.域变量 变量有两种类型,域和临时变量。 公式可以访问正在处理的文档中的域。每个域的名称和类型都在数据库设计中指定。 数据类型 数据类型必须符合正在执行的操作或函数的要求。例如:如果 TotalValue 是一个数字域,则不能 用 @Prompt 直接显示它,因为 @Prompt 要求一个文本参数。必须首先用 @Text 来转换该参数: @Prompt([OK]; &Value of MyNumber&; @Text(TotalValue)); 列表 列表是包含多值的域。某些函数和运算符就是专门用来处理列表的。例如:如果 Locations 是一个 允许多值的域,则下面的公式将返回列表中值的数目: @Elements(Locations) 域值 域值是公式启动时在文档中指定的。如果没有存取控制的限制,公式可以对域值进行修改。必须使 用 FIELD 关键字来修改域,否则变量将被当作临时变量处理。FIELD 关键字还可以用来在当前文档 中创建新域。下面的公式将在文本域 Subject 中写入域值: FIELD Subject := &No Subject& 空域 空域等价于文本常量 && (空双引号) 下例将检测当前文档中名为 Subject 的域。 。 如果 Subject 的 值为空,将被重置为“No Subject” ,否则域值将保持不变。 FIELD Subject := @If(Subject=&&; &No Subject&; Subject) 因为 && 是一个文本常量,所以要避免在非文本域中使用它。具体地说,可编辑的非文本域应该使 用缺省公式以保证该域包含正确类型的域值。 删除域 使用 @DeleteField 从文档中删除域。 FIELD BodyText := @DeleteField 2.临时变量 临时变量只存在于公式中。 其作用范围就是所在公式, 除了公式中赋予的属性之外不再具有其他属 性。 创建临时变量的语法是: variableName := value 变量取等号右边值的类型。 该值可以是域的任何类型或布尔型。 布尔型数据类型由特定的函数返回 其值,该值或为“真” (计算文本值为 1) ,或为“假” (计算文本值为 0) 。 如果变量之前没有关键字 FIELD,则在等号左边使用变量名将得到一个临时变量。 temp:=@username 3. 常量 文本常量是包含在引号中的字符,其中也包括空格、数字和特殊字符。要包含连续多个字符,例如 空格,可以使用 @Repeat。反斜杠 (\) 在文本常量中作为转义字符使用。要在文本常量中嵌入引号, 须在每个嵌入的引号前加上一个反斜杠。要在文本常量中嵌入反斜杠,则必须键入两个反斜杠。 公式是: &Type \&Yes\& or \&No\&& 结果是: Type &Yes& or &No& 数字常量由数字和特殊字符构成,中间不加空格,遵守以下规则: ? 整数 由字符 0 - 9 组成的不加空格的正整数。 ? 小数点 小数点可以放在数字字符的前面、后面或中间。 ? 正负号 数字的第一个字符可以是正号或负号。 ? 科学记数 数字带后缀 E,正号(缺省)或负号,再加一个整数。-123.4,123E-24.时间/日期常量 时间-日期常量由时间和(或)日期构成,放在方括号中。格式如下 ? 12 小时制 时间格式为 [hh:mm:ss],后面跟着字符 AM 或 PM,小时的范围是 00 到 12, 秒的部分是可选的,缺省为 00。 ? 24 小时制 时间格式为 [hh:mm:ss],小时的范围是 00 到 23,秒的部分是可选的,缺省为 00。 ? 日期 日期的格式为 [mm/dd/yy]。 其中年份是可选的,缺省情况下为当年年份。使用 yy 来 指定二十世纪(yy 大于或等于 50)或者二十一世纪 (yy 小于 50)中的一个年份;使用 yyyy 指定任意一个年份。日期格式的有效性取决于用户在操作系统控制面板选择的日期分隔符, Windows、UNIX 和 Macintosh 的缺省分隔符是斜杠 (/)。OS/2 缺省分隔符是连字符 (-)。 ? 时间和日期 时间和日期的格式为 [time date] 或 [date time]。 如果时间-日期值相减,所得的整数结果表示两者之间秒的差值。图表 15 日期时间格式时间-日期格式 24-小时制 12-小时制 24-小时制 日期 日期 时间-日期 时间-日期 差值常量 [5:30] [5:30 PM] [17:30] [6/15] [6/15/97] [6/15 5:30 PM] [5:30 PM 6/15] [5:30 PM]-[5:30]12 小时制结果 05:30:00 AM 05:30:00 PM 05:30:00 PM 06/15/97 06/15/97 06/15/97 05:30:00 PM 06/15/97 05:30:00 PM 432005.通用语法规则 ? 语句分隔符 使用分号分隔多条语句。 FIELD RegionalManager := AreaManager; FIELD AreaManager := @DeleteField ? 空格 在运算符、标点和值之间可以放置任意多个空格(也可以没有) 。然而,描述关键字至少需要 一个空格,而且,文本常量之间的空格也是很重要的。 例如:下面的语句是等价的。 LastName + &, & + FirstN LastName+&, &+FirstName 在下面的语句中,关键字 SELECT 后面至少要有一个空格。 SELECT @All ? 大小写 除了在文本常量中,其他地方并不区分大小写。按约定,关键字(例如 FIELD)要大写, @function 和 @command 名 (例如 ProperCase) 可以大小写混合使用。 键入时可以不遵照本约定, Domino 会在保存公式时按照约定转换大小写。3.2.2 使用运算符运算符用来赋值、修改值,还可以将现有的值合并到新值。 1.赋值运算符 赋值运算符 (:=) 将等号右边的值赋给左边的变量,右边值的类型即为变量类型。 本样例把数字值 1 赋给临时变量 n。 n := 1 2.列表运算符 列表运算符 (:) 将值并置在一个列表中。 这些值必须具有相同的类型。 以下是一个具有三个成员的 文本列表。 &London& : &New York& : &Tokyo& 列表并置具有最高优先级,所以列表元素中的表达式必须用括号表示 1:2:3:4 + 1:2:(-3):4 = 2:4:0:8 3.单目运算符 单目运算符(+ 和 -)指出数字值的符号。一个无符号的数字值是正数。下列数值是相等的: 5,+5,-(-5) 4.算术运算符 算术运算符 (* / + -) 通过加、减、乘、除四种运算将两个数值合二为一。下面运算的结果都是 16: 4 * 4,64 / 4,12 + 4,20 - 4 5.文本运算符 文本并置运算符 (+) 将两个文本值合并。下面的操作结果是变量 CompanyName 的值的后面加上 一个逗号、一个空格和“Inc.” 。 CompanyName + &, Inc.& 6.比较运算符 比较运算符(=、&&、!=、&&、&、&、&= 和 &=)用来比较相同类型的数值,并产生一个逻辑结 果( “真”或“假”。下面的运算结果的逻辑值都是“真” ) : &London& = &Lon& + &don& &London& != &Tokyo& 2+2&3 7.逻辑运算符 逻辑运算符(!、&、和 |)计算逻辑值。下面所有操作的结果值都是“真” 。 4=2+2&5=3+2 8.列表操作 列表操作有以下两种类型: ? 并列运算符: 并列运算符对两个列表进行并列运算。 列表 1 的第一个元素对应于列表 2 的 第一个元素,列表 1 的第二个元素对应于列表 2 的第二个元素,依此类推。如果一个列表的 元素数量少于另一个,则短一些的列表的最后一个元素将重复若干次以匹配长的列表。如果 列表 1 包含 A:B:C,而列表 2 包含 1:2,则列表 2 将作为 1:2:2 参加运算。对于并列的比 较运算,只要对应的列表元素中有一个匹配的情况即返回真值或 1。 ? 交叉运算符: 交叉运算符对两个列表进行排列组合。 计算结果列表的每一个元素对应于每一 种排列组合的情况, 按以下顺序出现: 列表 1 的第一个元素与列表 2 的每一个元素匹配运算, 列表 1 的元素 2 同列表 2 的每一个元素匹配运算, 如此下去, 直到列表 1 的最后一个元素 与列表 2 的每一个元素运算完毕。 如果在一个列表和一个非列表值之间进行运算,非列表值和列表中的每一个元素进行匹配计算。图表 16 公式运算符并列运算符 * / + & & &= &= = != 运算符 连接,并列 语句交叉运算符 ** */ *+ **& *& *&= *&= *= *!= 结果含义 乘法 除法 加法 减法 大于 小于 大于或等于 小于或等于 等于 不等于&A&:&B&:&C&+&1&:&2&:&3& &A&:&B&:&C&+&1&:&2& &A&:&B&:&C&+&1& &A&:&B&:&C&*+&1&:&2&:&3& &A&:&B&:&C&*+&1&:&2&&A1&:&B2&:&C3& &A1&:&B2&:&C2& &A1&:&B1&:C1& &A1&:&A2&:&A3&:&B1&:&B2&:&B3&:&C1&:&C2&:&C3& &A1&:&A2&:&B1&:&B2&:&C1&:&C2&连接,交叉9.操作的计算顺序 括号: 可以使用括号对计算顺序进行明确强制,首先计算括号中的操作。例如: (5 - 3) * (6 - 4) = 4 优先级: 括号外的操作从优先级 1 开始按优先级的顺序进行。例如:乘法运算比减法运算的优 先级高,因此首先计算 3 * 6:每个运算符的优先级请参考 DesignerHelp.nsf。 5 - 3 * 6 - 4 = -17 从左到右: 相同优先级的操作按照从左到右的顺序计算。例如: 8/4*2=43.2.3 使用 @function函数执行一个特定的运算并返回一个值。 函数通常的格式为: @function-name(argument1; argument2; ... argumentn); 函数由函数名后面紧随参数(如果有的话)构成,函数名的第一个字符总是 @。使用分号分隔各 个参数。 @Middle(C 4; 4) 没有参数的 @function 省略括号。如:@Created 将 关 键 字 参 数 放 在 方 括 号 中 。 @Abstract 、 @Command 、 @PostedCommand 、 @DocMark 、 @GetPortsList、@PickList、@MailSend、@Name 和 @Prompt 使用关键字参数。 @Prompt([OK]; &Response&; Y) @Name([CN]; AUTHOR) @Command([FileSave]) 函数计算出一个返回值, 并用该值替换自身。 使用函数时必须满足正确的数据类型。 例如: @Power 可以计算数字域的值: @Power(2; Exp) @Command 函数 @Command 和 @PostedCommand 函数执行一个 Notes 命令。@Command 或 @PostedCommand 的第一个参数是指定 Notes 命令的关键字参数。根据不同的 Notes 命令,可能还需要其他参数。 @Command 和 @PostedCommand 的区别在于计算顺序不同。 由于这些函数数量众多,地位特殊,因此构成了一个独立的分类称作 @command。每个命令均以 @Command 或 @PostedCommand 的第一个参数命名,该参数是关键字参数。 多数 @command 均模拟菜单命令。例如: @Command([AddDatabase]; &Legal1&:&Trademrk.nsf&) @Command([AdminRegisterUser]) @PostedCommand([DesignForms]) @PostedCommand([EditDown]; &5&) 由于 @command 会产生附加效果并且涉及计算顺序,因此必须小心使用。 @command 可以在便捷图标、按钮、热点和操作的公式中使用 ,也可以在运行于当前文档上的代 理公式中使用。要了解更多限制条件,请参阅对 @command 的单独描述。 把 NoExternalApps 的环境变量设为 1 将使所有包含 @command 函数的公式无效。但用户不会 得到错误信息,只是公式不再执行。3.2.4 公式语句的计算顺序Notes 按 从 上 到 下 、 从 左 到 右 的 顺 序 计 算 公 式 , 完 成 一 个 语 句 之 后 再 进 行 下 一 个 , 但 @PostedCommand 和少数 @Command 函数必须在其他所有函数执行完毕后才能按顺序执行。 除了 @command 以外,公式语言都是对后端 Notes 对象进行操作。例如:在公式中命名的域指 的就是存储器中的该域,要用 FIELD 关键字来修改保存的域。@Command 在用户界面中运行,在此 所做的改动只有在保存文档时才能在后端反映出来。 不能同时通过后端和用户界面访问同一个文档并取 得正确的值。 @command 的计算 @PostedCommand 函数在公式中其他所有 @function 执行完毕后才能执行。如果编写以下公式: @PostedCommand([CommandName]; Argument); @If(C TrueS FalseStatement); FIELD X := &Text& 则第一条语句最后执行。 @Command 函数除了一些例外情况之外,一般是按语句出现的顺序执行。这些例外的情况象 @PostedCommand 一样在公式的最后执行,包括:[FileCloseWindow]、[FileDatabaseDelete]、[FileExit]、 [NavigateNext]、[NavigateNextMain]、[NavigateNextSelected]、[NavigateNextUnread]、[NavigatePrev]、 [NavigatePrevMain] 、 [NavigatePrevSelected] 、 [NavigatePrevUnread] 、 [NavigateToBackLink] 、 [ToolsRunBackgroundMacro]、[ToolsRunMacro]、[ViewChange]、[ViewSwitchForm]。 @If 函数 @If 根据逻辑值为“真”或“假”执行此语句或其他语句: @If(LogicalV TrueS FalseStatement) @Do 函数 @Do 按顺序执行一系列语句,可以作为执行路径用在 @If 函数中: @If(LogicalV @Do(TrueStatement1; TrueStatement2); FalseStatement) 任何出现在 @Do 函数中的 @Command 函数将在其他所有函数之后执行,不论这些函数是否 在 @Do 函数中。 @Return 函数 @Return 终止公式的执行: @If(LogicalV @Return(&&); &&)3.2.5其它规则图表 17 公式中的关键字1.使用关键字 关键字语法 DEFAULT fieldName := value 描述 将一个值与域关联。如果域在正被处理的文档中已经存在,则 其当前值被使用。如果域不存在,则当作域已经存在来处理该 文档,并且使用 DEFAULT 值。 指定一个值为环境变量,环境变量放置在用户的 NOTES.INI 文件中 (Windows、OS/2、UNIX) 或 Notes Preferences 文件中 (Macintosh)。 将一个值指定给当前文档中的一个域。如果域不存在,则创建 该域,如果已经存在,替换它的内容。 在公式中加入注释而不影响它的功能。 指定当前文档在视图选项、复制和代理公式中是否有效。ENVIRONMENT variable := textValueFIELD fieldName := value REM &remarks& REM {remarks} SELECT logicalValue2.在公式中指定表单和视图的名称 在公式中指定表单和视图的名称时: ? 不要包含名称中的快速键字符,即下划线(如果有的话) 。公式语言把下划线作为下划线文字 处理。 ? 要包括级联字符(即反斜杠) ,但注意需要转义字符,因此要输入两个反斜杠。 以下公式示范了如何输入视图名“_Marketing\_Procedures” : @Command([ViewChange]; &Marketing\\Procedures&) 3.调试公式 公式语言不提供正规的调试机制。可以使用 @Prompt 设置断点并检查变量。以下的样例使用 @Prompt 设置一个断点然后检查一个变量。在确定正确的代码以后,删除调试语句。 @Prompt([OK]; &Checkpoint&; &About to calculate LastName&); LastName := @RightBack(@Left(@UserN &/&); & &); @Prompt([OK]; &Value of LastName&; LastName) @prompt 函数显示一个对话框,并根据用户的操作返回一个文本值。@Prompt 用来给用户提示信 息,并根据用户的输入确定以后的操作过程。详细请参考 DesignerR6 帮助文件。 当我们使用@prompt 时,会显示一个对话框,需要用户响应,会中断程序的执行。DominoR6 提供 了一个新的函数@StatusBar() 。可以把信息打印到状态栏上,无需用户响应,不会中断程序执行。 3.3 公式在表单、域和操作中的应用本书不是公式的使用手册,不对公式作太详细的说明,主要讲解在开发实例中的应用。本节以前面 提到的“IBM 全球认证管理系统”为例,所名公式的使用。3.3.1 公式在域中的应用公式在域中的应用主要体现在 4 个方面: ? 域的缺省值公式 ? 输入转换公式 ? 输入校验公式 ? 域的隐藏公式 以“StudentInfo”表单为例,有一个“是否缓考”域 StuDelay,是单选按钮类型,有两个值“是” 和“否” 。我们希望在新建考生信息时,能有一个初始值“否” 。那么这个有就不会在用户疏忽的情况下 出现空值。图表 18 域的缺省值公式当用户输入“姓名” (StuName)的时候,不小心在首尾输入了空格,那么就需要把这些多余的空 格去掉,可以使用输入转换公式。图表 19 域的输入转换公式函数@trim(),就是去掉字符串首尾的空格。详细请参考 Designer 帮助文件。 当用户输入电子邮件(StuEmail)的时候,需要有“@”符号,可以通过输入校验公式检查输入的 合法性。图表 20 域输入校验公式注: @if()函数相当于其它程序语言中的 if 语句,有奇数个参数,做多可有 99 个参数。根据条件判断选 择执行不同的语句。 @Contains( substring ),判断 subString 是否包含在 string 中。 @thisvalue,返回当前语的值。 @success,返回 1(真) ,判断输入的值是否满足检查条件。 @failure(string) ,返回给出的消息,当用于输入校验公式时,如果输入的值不符合校验标准, @Failure 将显示给出的消息。终止保存操作。 公式 @if(@contains(@ThisV&@&);@@Failure(&请输入正确的邮件地址!&)) 检查当前域的值是否包含“@”,如果不包含,提示错误信息。我们用“StudentInfo”表单创建一个 文档,并保存,得下面结果。图表 21 校验公式的使用域“备注”(StuRemark)是管理员用的,对一般用户隐藏,可以使用隐藏公式。图表 22 域的隐藏公式当当前用户不具备“[admin]”角色时,隐藏域。 注: 角色“[admin]”是在数据库的存取控制列表中,有管理员设置的。 @UserRoles,返回当前用户具备的角色,使一个文本列表。 @IsNotMember(textV textListValue)判断一段文本(或文本列表)是否不包含在另一个文本列表 中。该函数区分大小写。如果 textValue 没有包含在 textListValue 中,则返回 1 (True)。3.3.2 公式在操作中的应用前面我们用“StudentInfo”表单创建的文档都是通过工具栏上的快捷图标 表单创建一个保存操作。 1)打开表单“StudentInfo”,选择菜单如下图。 保存的。现在我们为该 图表 23 创建操作2)显示属性对话框,按下图填写3)在编程窗口中写上公式4)在 Web 中预览如下图有时文档打开后进入的是阅读模式,如果想修改数据,必须进入编辑模式,需要创建一个操作,切 换文档的模式。 接下来,我们创建一个“编辑”操作。 在 Web 中预览如下:命令“EditDocument”就可以在两种模式之间切换文档。我们只需要在阅读模式下看到该操作,编 辑模式下隐藏,可以使用操作的隐藏条件。我们在创建一个操作可以关闭文档,打开视图,这里我们是把视图嵌入在另外的表单里,所以这里 看到的是打开表单的操作。预览如下图图表 24 操作在 Web 中的应用3.3.3 公式在表单中的应用为了防止同一用户多次创建重复的文档,那么我在保存文档的时候,进行检查,判断是否已经存在 相同姓名或者学号的文档。 由于我们是在 Web 中使用程序,所以在表单的 WebQuerySave 事件中执行一个公式,这个公式调 用一个代理,对文档进行检查。如果在 Notes 中使用,请把公式写作 QuerySave 事件中。 命令“ToolsRunMacro”专门用来执行代理,尤其在 Web 中。需要传递一个代理的名字作为参数。3.4 公式在视图中的应用代理在视图中的应用主要体现在下面几个方面: ? 视图操作 ? 视图选择条件 ? 视图的列3.4.1 视图选择条件我们创建一个视图“StudentListForWeb” ,在 Web 中显示文档。这个视图要显示所有的“考生信息” 文档,需要一个选择条件。所有用表单“StudentInfo”创建的文档都显示在视图里。 视图选择公式如下图表 25 视图选择条件记住,必须有一个 Select 语句。这里用比较运算符“=” ,把所有的用表单“StudentInfo”创建的文 档都选择在视图里。 这种简单的条件判断可以用“简单搜索”来实现。 3.4.2 视图的列按照第 2 章讲的知识,我们可以为视图创建我们需要的列,然后指定列的值。 对于表单“StudentInfo”我们是把“年级”和班分成了两个域,在视图里需要把它们合并的一列莱 显示,如下图:图表 26 视图列公式有的列只有具备特定的条件才可以查看,可以通过公式设置列的隐藏条件。视图中的第 2 列,只用 具备“ [admin] ”角色的用户才能看到,设置隐藏条件如下: 3.4.3 视图操作1) 打开视图,选择菜单2) 显示属性对话框,输入数据如下:3) 为操作写入代码4) 预览 3.5 公式在代理中的应用代理一般有可以使用公式, LotusScript, Java, 比较简单的代理用公式, 具有复杂逻辑的用 LotusScript 和 Java。 前面“StudentInfo” ,表单有一个“作者”域和“读者”域。分别限制对文档的修改和读取。在设 计初期,他们的值除了包含“ [admin] ”角色外,不清楚是否包含其它值。随着设计的深入,需要修改 这两个域的值。可以编写代理统一修改所有文档的值。 (注:代理的运行需要一定的安全权限。 ) 1)在设计窗格,选择“共享代码” “代理” 2)在工作窗格单击“新建代理” 3)显示代理属性对话框,输入如下:图表 27 代理属性要注意的是:如果要创建所有的人都可以使用的代理请选择“共享” ,要确定代理的触发条件, 和目标。这个代理在 Notes 中使用,选择的触发条件是“操作菜单选择” ,或者是“从代理列 表中选择” 。 4)在编程窗格中写入下面的公式图表 28 公式在代理中的应用注: 第一行通过 Select 语句确定代理执行的目标。 Field 关键字表示向域赋值,这里有两个域:stuAuthors 和 stuReaders。都是文本列表包含三个 值:当前服务器的名称、角色“[admin]”和文档表示的考生。 @servername 返回服务器的名称; @name([ action ] ; name)用来对层次名进行操作。可以将规范格式的名称进行缩写,将缩写名 称扩展为规范格式, 在名称中找到某个部分, 掉转各部分的顺序以便用层次名对视图进行分类。 “stu”+stuno+”/students/cqu”,用当前文档的学号形成了一个缩写的层次名,用@ name 函数转 换成规范名称。3.6 公式的其他用途3.6.1 通过公式访问用户环境用户环境是包含数据库的服务器或工作站,数据库内容: 复制公式、由新邮件到达时或定时触发 的代理、选择公式或列公式的用户环境是服务器。否则,用户环境是用户运行公式的 Notes 工作站。 用户名可以是专有名称也可以是非专有名称,专有名称可以是规范或缩写的,使用 @Name 可更 改用户名的格式。 以下函数返回或处理用户环境的信息。图表 29 访问用户环境的公式函数 @UserName @Name([key]; name)描述 返回用户名或服务器名。 更改用户名的格式。 关键字包含 [CN] 以从一个专有名字中解 析出公共名, [Abbreviate] 缩写规范格式的专有名字, [Canonicalize] 与上述作用相反,[ToKeyword] 将名字各部分按相反顺序排序,用 反斜杠分开(用于分类视图) 。 对于服务器上的数据库,返回当前用户的角色列表。 返回用户邮件数据库的服务器名和路径名。该 @function 计 算出一个包含两元素的列表。 从地址中删除无用的网络域。 返回用户当前运行的平台:Macintosh、 NetWare、 OS2V1、 OS2V2、 UNIX、 Windows/16 或 Windows/32。 返回正在运行的 Notes 版本(字符串) 。 对字符串加密。加密后别人无法从中得到最初的字符串。@UserRoles @MailDbName @OptimizeMailAddress(address) @Platform @Version @Password(string)3.6.2 访问当前数据库和视图可以直接访问正在运行公式的数据库(便捷图标除外,因为它没有数据库环境) 。也可以在视图环 境中直接访问正在运行公式的视图。同样,在文档环境中可直接访问打开文档的视图。 下表列出返回数据库和视图属性的函数。图表 30 访问数据库和视图的公式函数 @DbManager @DbName @ViewTitle 函数 @Responses描述 返回当前对数据库有 “管理者”权限的用户、 群组和服务器。 返回一个列表。 返回当前 Notes 服务器和数据库的名称。返回二个元素的列表。 返回当前视图的标题。 描述 返回当前视图中当前文档的答复文档的编号(只限于窗口标题公这些函数仅工作于窗口标题和列公式中,有一些会被限制。返回值都是一个字符串。 式) 。 @DocLevel @DocSiblings @DocNumber @DocNumber(sep) @DocNumber(&&) @DocParentNumber @DocParentNumber(sep) @DocParentNumber(&&) @DocDescendants @DocDescendants(def) @DocDescendants( def) @DocDescendants(one, def) @DocChildren @DocChildren(def) @DocChildren( def) @DocChildren(one, def) @IsCategory @IsCategory(True) @IsCategory(T False) @IsExpandable @IsExpandable(True) @IsExpandable(T False) 返回在当前视图中当前文档的级别。 返回与当前文档同级的文档编号(包含当前文档) 。 返回当前视图中的当前文档或分类的编号。 同上,只是用 sep,而不是句点来分隔编号。 同上,只是仅返回编号的最右边部分。 返回当前视图中当前文档或分类的父文档或父分类的编号。 同上,只是用 sep,而不是句点分隔编号。 同上,只是仅返回编号的最右部分。 返回后续文档的编号。 包含当前文档的子文档, 子文档的子文档。 同上,只是返回 def。在 def 中使用 % 以表示编号。 同上,只是如果没有后续文档的话则返回 zero。 同上,如果只有一个后续文档的话,则返回 one。 返回当前文档的直接子文档的编号。 同上,仅返回 def。在 def 中使用 % 以表示编号。 同上,只是如果没有后续文档的话,则返回 zero。 同上,如果只有一个后续文档的话,则返回 one。 如果当前行的当前域右边任何域是一个分类,则返回一个星号。 同上,只是返回 Frue 代替星号。 同上,但是如果没有分类域,则返回 False。 如果当前行是可展开的,则返回一个加号。 同上,只是返回 True 代替加号。 同上,但是如果当前行是不可展开的,则返回 False。3.6.3 通过公式访问当前文档对于表单操作、按钮、热点和域公式,当前文档指被打开的文档。对于视图操作,当前文档指突出 显示的文档 (而不是选中的文档) 对于代理, 。 当前文档指根据代理构造器选择以及 SELECT 关键字 标 准激活的文档。 如果希望读取当前文档中某个域的内容,请命名该域。不区分大小写,但命名要准确。 ? 如果希望编写当前文档中的域,必须使用 FIELD 关键字或者 @SetField 函数。不能简单的 命名该域。 ? 关键字 FIELD 用于赋值语句并有以下格式。如果忽略 FIELD 关键字,则指定变量被认 为是临时变量。 FIELD field-name := expression ? @SetField 写入域,它与使用关键字 FIELD 的赋值语句效果相同。@SetField 可以嵌套 到另一个语句;(在 R6 中,Field 关键字也可以嵌套) 域名被表达成一个文本值,所以它 可以是一个括号中的准确名字。有一个限制是 @SetField 只工作于已存在的域中;如果 文档中不存在您想写入的域, 则可使用 FIELD 赋值语句在公式开头 “声明” @SetField 它。 有以下格式。 ? @SetField( field-expression- expression ) ? DEFAULT 关键字为不在文档中的域提供了一个值。如果该域存在于文档中,就使用它自身的 值。否则,就用 DEFAULT 值。 DEFAULT field-name := expression ? @MailSend 函数邮寄文档。不带参数的 @MailSend 函数邮寄当前文档,它必须包含一个域 ? ?名为“SendTo”的域,该域包含收件人的名称。带有参数的 @MailSend 构造文档并按指定参 数邮寄。 @MailSend @MailSend( flags ) @DeleteField 函数删除域。在 FIELD 赋值语句中指定它作为表达式。 FIELD field-name := @DeleteField @DocMark([NoUpdate]) 函数防止写入公式对文档所作的更改被保存。被公式处理后的文档与 以前的文档是一样的。该 @function 只影响代理。3.6.4 访问当前数据库之外的数据以下函数从指定的数据库中取得数值。但不能用这些函数设置数值。 ? @DbLookup 在指定数据库的指定视图中的第一个排序列中查找指定的值。 对于每个匹配搜索 值的文档,@DbLookup 返回文档或视图中的列的指定域中的值。 ? @DbColumn 返回指定数据库的指定视图中的指定列中的全部值。 前三个参数对于两个函数是相同的: ? [NOTES] : [NOCACHE] 指定的操作是在 Notes 数据库上并且未使用缓存。 因为 [NOTES] 是 缺省的,所以您可以为第一个列表元素指定空串 &&。如果数据是稳定的或者您访问过数据库 许多次了,则可以指定第二个列表元素为空串 &&,并不使用缓存。可以为所有参数使用一个 空串 &&,表示打开一个 Notes 数据库而且没有缓存。 ? server : database 指定访问的服务器和数据库。为第一个列表元素指定空串 && 以表示本地 Notes 目录。指定所有参数为空串 && 以表示当前数据库。可以指定所有参数为数据库的复本 标识符。Notes 将在本地和服务器上搜索,并且使用第一个它找到的复本。从“文件” “数据 库” “设计摘要” “复制”中取得复本标识符。 ? view 指定通过哪个视图访问数据库。 对于 @DbLookup, 第四个参数是关键字, 它是在视图中第一个排序列中找到的值。 @DbLookup 查 找每一个与该关键字匹配的文档。 对于 @DbLookup,第五个参数或者是数据库中的域名,或者是视图中的列号。@DbLookup 返回 找到文档中的域或列值的列表。 对于 @DbColumn,第四个参数是列号。@DbColumn 返回列中全部值的列表。 以下函数可取得并设置当前数据库中另一个文档的域值。不过,您必须知道文档的唯一的标识符。 ? @GetDocField( fieldName) 取得给定的唯一标识符的文档的域值。 ? @SetDocField( fieldN value) 设置给定的唯一标识符的文档的域值。 @DbColumn 示例 下面以“IBM 认证系统”的“StudentTestForm”表单说明@DbColumn 函数的使用。该表单中有一 个域 ,是单选按钮类型,关键字公式是: @DbColumn(&&;&&:&&;&ExamList&;1),返回当前数据库中的视图的第一列,是一个列表值。图表 31 使用 DBcolumn @DbLookup 以管理员的身份登陆“IBM 认证系统”后,最上的帧结构如下图,有一个链接到用户的电子邮件。在 Designer 中打开设计图表 32 DbLookup其中有一个用了@Dblookup 函数。 temp:=@DbLookup(&&:&NoCache&;@ServerName:&names.nsf&;&($VIMPeopleByLastName)&;@ Name([CN];@UserName);&mailfile&;[FailSilent]); 根据用户的公共名在服务器上的 Domino 目录数据库 “names.nsf” “($VIMPeopleByLastName)” 中的 视图的第一列查找用户文档,找到后返回“mailfile”域中的值。这个域的值就是用户的邮件文件名。3.7 LotusScript 编程简介LotusScript 是一中现代的,面向对象的语言,它的语法类似 Basic,它和 Domino 的接口是通过预 定义的的 Domino 对象类(Domino Object Class)实现的。 Domino 前端(front-end)对象类能够实现用户界面中的所有控制,包括数据库、视图、文档和域 等。 例如, 如果你希望操作当前文档的语的内容, 那么可以从 UIWorkspace 的对象开始获取 UIDocument 对象,修改其中的变量,就可以修伽文档的内容。 同样的规则可以用于操作后端类(back-end class) 。通过后端类操作那些不在用户界面中的对象。 例如,你可以从 NotesSession 类开始,获取 NotesDatabase 的对象,然后获取 NotesDocument 对象来修 改文档。 Domino 的前端对象类和后端对象类都属于 Domino 对象模型(DOM: Domino Object Model) 。 使用 LotusScript 有下面一些优点: 1)Basic 的超集。容易学习,可以进行复杂的逻辑控制,具有现代语言的所有功能,比如:分支, 循环,函数等。 2)跨平台性,用 LotusScript 写的程序,可以运行在所有支持的平台上。 3)面向对象,您可以使用 LotusSciript 操作 DOM。也可以自定义类。 4)所有的 Lotus 产品都支持 LotusScript。 5)支持 OLE/COM。 6)可以和 Domino @function 一起工作。 7)由集成开发环境支持,可以调试。 8)可以通过 LSX 进行扩展,可以用 C 或者 C++编写 DLL 扩展。 9)可以通过 LS:DO 连接外部数据库,例如:DB2,SQL Server。 关于 LotusScript 的语法规范请参考 Designer 帮助文件。3.8 Domino 对象模型使用 DOM(Domino 对象模型) ,我们可以访问 Domino 的数据库和应用服务。DOM 被映射成一个 类的集合。可以使用 Java,LotusScript,VB 等操作 DOM。还可以通过 Domino C++API 创建高度定制 程序。 我们可以通过 DOM 定义的类,方法和属性来操作 Domino 中的对象,诸如:数据库,视图,文档 等。 举一个例子,你可以通过 NotesDatabase 对象的 ReplicaID 属性,获取 Domino 的数据库的复本 ID。 CreateDocument 方法可以在数据库中创建一个文档。 从概念上讲,有两种类型的对象: ? 前端类 ? 后端类3.8.1 前端用户接口类前端 UI(User Interface)对象操作当前用户界面,通常用于事件编程。主要有下面的一些前端类。图表 33 Domino 前端对象前端 UI 类NotesUIWorkSpace NotesUIDatabase NotesUIView NotesUIDocument NotesUIScheduler Button Field Navigator NotesTimer说明 表示当前 Notes 的工作台,是使用前段对象的入口 表示当前正在使用的数据库 表示当前视图 表示当前打开的文档 表示当前文档中内嵌的日程安排 表示按钮,只有相关联的事件,没有方法和属性 表示一个域,只有相关联的事件,没有方法和属性 表示一个导航器,只有相关联的事件,没有方法和属性 是一个可编程定时器,相隔一段的时间执行事件。3.8.2 后端类Domino 后端对象用于操作 Domino 数据。不支持事件和用户界面交互。然而我们在编程序时,可 以混合使用前段对象和后端对象。例如: NotesUIDocument 对象有一个属性 document,可以获取当前文 档对应的后端对象。 下面是主要的后端对象的列表。图表 34 Domino 后端类后端类NotesSession NotesDbDirectory NotesDatabase NotesACL说明 表示脚本编程的 Domino 环境,可以访问环境变量,Domino 目录,当前 用户的信息,Domino 平台的信息 表示服务器或者 Notes 工作站上的数据库集合 Domino 数据库 数据库存取控制列表 NotesACLEntry NotesAdministrationProcess NotesAgent NotesView NotesViewColumn NotesDocumentCollection NotesDocument NotesItem NotesRichTextItem NotesEmbeddedObject NotesDateTime NotesDateRange NotesLog NotesNewsLetter NotesNoteCollection NotesForm NotesInternational NotesName NotesTimer NotesRegistration NotesOutline NotesOutlineEntry NotesReplication NotesReplicationEntry NotesRichTextDocLink NotesViewEntry NotesViewEntryCollection NotesColorObject存取控制列表的一项 Domino 管理进程 代理 视图 视图的一列 文档集合 文档 文档中的条目 文档中 RTF 条目 表示嵌入对象,连接对象和文件附件 日期和时间,可以在 Notes 格式的时间和 LotusScript 时间之间转换。 日期时间段,包含开始时间和结束时间。 可以记录脚本执行过程中的操作和错误。 表示新闻摘要, 数据库中设计和数据元素的集合 表单 Domino 运行环境的国际化信息 Domino 用户名 Domino 中的定时器 NotesID 文件的创建和管理 大纲 大纲的一个项 数据库的复制设置 描述一对服务器的复制设置 丰富文本条目中的文档连接 视图中的一行 视图行的集合 表示颜色除了这些类之外,Domino6 还增加了很多处理 XML 的类。3.8.3 对象层次结构Domino 对象之间有层次结构关系, 高层次的对象包含低层次的对象, 下面是一个层次结构的例子。 NotesSessionNotesDatabaseNotesViewNotesDocumentNotesItem 每个对象之间都定义了属性和方法,高层次的对象有属性或者方法可以访问低层次的对象。例如, 当你打开数据库的时候,可以访问所有的视图。 NotesSession 是 DOM 的顶层对象,通过它可以访问任何 Domino 对象。 以“讨论数据库”为例,获取文档中“subject”域的值。 Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim item As NotesItem Set db = session.CurrentDatabase Set view = db.GetView( &所有文档& ) Set doc = view.GetFirstDocument Set item = doc.GetFirstItem( &Subject& ) Messagebox &Subject of first document in 所有文档视图 is: & + item.Text ‘Messagebox &Subject of first document is: & +item.Values(0) 这里我们定义了五个变量 session,db,view,doc,item。为了获得 subject 域的值,沿着层次结构 的路径从最高端到最低端。 NotesSession――NotesDatabase――NotesView――NotesDocument――NotesItem。 要获得域的值,还可以用 doc.subject(0),或者 doc.getItemValue(“Subject”)。 Item 的 Text 属性和 Values 属性的区别是 Values 是一个数组,即使域中只包含一个值,也返回一个 数组,数组的下表从 0 开始。 如果域中的值是数字或者日期类型。数组元素的类型是 Double 或者日期/时间变体。通常在编程序 中容易犯的错误是把域的值当作标量。例如下面程序会报类型不匹配的错误(Type Mismcath) 。 Print &Subject is: & + doc.Subject 因为 doc.Subject 是一个数组,不能把文本和数组连接。3.8.4 事件类型和顺序我们在 Domino 中编的程序是在事件发生的时候执行,例如,单击按钮,打开文档,关闭文档等。 我们在对象视图中可以看到一个对象可用的事件。 打开“讨论数据库”的“讨论主题”表单,增加一个操作“显示 Subject” ,用对话框显示当前文档 的“subject”域的内容。图表 35 事件类型和顺序操作对象有下面的一些事件: ? (Options) :为 LotusScript 的选项提供一个区域。有 4 个选项: ? option public:模块级别的声明具有 public 性质。 ? option declare:所有的变量都必须显式声明。 ? option compare:指定字符串比较的方式,有三种 Binary,Case/NoCase,Pitch/NoPitch。 ? option base:指定数组的起始下标,缺省为 0。 ? (Declarations) :声明所有的全局变量。 ? Click:单击按钮触发。 ? Objectexecute:主要用于外部程序,Notes 不使用。 ? Initialize:当表单正在装载时执行。 ? Terminate:当表单正在关闭的时候执行。 我们在 Click 事件中加入下面的代码: Sub Click(Source As Button) Dim ws As New NotesUIWorkspace ' 用户的当前工作台 Dim uidoc As NotesUIDocument '当前打开的文档 Dim doc As NotesDocument ' 当前文档对应的后端对象 Dim subj As Variant '一个变体类型的变量 Set uidoc = ws.CurrentDocument ' 获取当前文档. Set doc = uidoc.Document ' 打开文档对应的文档对象. subj = doc.GetItemValue(&Subject&) '得到域的值 ' subj 包含的是一个元素的数组. Messagebox &Subject: & + subj(0) End Sub 单击按钮,有如下结果: 3.8.5 使用 LotusScript 编程的提示和建议1. 使用 Option public,变量使用起来比较方便。 2. 使用 Option Declare,强制显式声明变量。 3. 定义全局过程或者函数,这样所有对象都可以使用。 4. 编程中,使用前后一致的变量名称。 5. 在数据库级别使用 Script 库,最大程度重用代码。 6. 尽量使用模板数据库中的已有程序。 7. 在使用前端类的情况下,考虑能否用公式。 8. 通过 Evaluate 函数可以在 LotusScript 中嵌入部分公式。例如,@name ,@subset,@replace 等,但是那些和用户交互的公式不能嵌入,例如,@prompt,@picklist。 9. 最好在程序中,包含错误处理代码。 10. 可以用 LotusScript 调试器跟踪程序的执行。3.9 使用 LotusScript 访问数据库NotesDatabase 和 NotesDBDirectory 用于定位和打开数据库。 通过 NotesDatabase 可以访问数据库中 的各种设计元素和文档。 1.使用 NotesDatabase 显示数据库属性 在“讨论主题”表单中增加一个“测试按钮” 。选择用 LotusScript 编程,在 Click 事件中写入下面 代码 Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Dim msg As String msg= &Title: & & db.Title & Chr(10) _ ‘chr(10) 换行 & &File name: & & db.FileName & Chr(10) _ & &Path name: & & db.FilePath & Chr(10) _ & &Replica ID: & & db.ReplicaID & Chr(10) _ & &Size: & & db.Size & Chr(10) _ & &Created: &+db.Created & Chr(10) _ & &Last modified: & & db.LastModified If db.IsOpen Then msg=msg+Chr(10)+ &Database is open& Else msg=msg+Chr(10)+ &Database is not open& End If Forall manager In db.Managers msg=msg+Chr(10)+ &Manager: & & manager End Forall msg=msg+Chr(10)+ &Categories: & & db.Categories If db.TemplateName && && Then msg=msg+Chr(10)+ &Template name & _ & db.TemplateName End If If db.DesignTemplateName && && Then msg=msg+Chr(10)+ &Design template name& _ & db.DesignTemplateName End If If db.IsFTIndexed Then msg=msg+Chr(10)+ &Is full-text indexed & _ & db.LastFTIndexed End If msg=msg+Chr(10)+ &Current access level: & _ & db.CurrentAccessLevel & Chr(10) _ & &Percent used: & & db.PercentUsed & Chr(10) _ & &Server name: & & db.Server & Chr(10) _ & &Size limit: & & db.SizeQuota msg=msg+Chr(10)+ &FolderReferenceEnabled: & _ & db.FolderReferencesEnabled msg=msg+Chr(10)+ &IsDirectoryCatalog: &_ & db.IsDirectoryCatalog msg=msg+Chr(10)+ &Maxsize: &_ & db.Maxsize Messagebox msg ‘显示对话框 End Sub 执行结果如下:2.显示数据库中的视图 把“测试”按钮替换成下面的代码 Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Dim views As Variant Dim msg As String Set db = session.CurrentDatabase views = db.Views Forall v In views msg=msg+Chr(10)+ v.Name ‘ End Forall Messagebox msg,0+64,&所有视图& ‘详细说明请参考 Designer 帮助 End Sub 执行结果如下:3.使用 NotesDBDirectory 定位数据库 提供了定位服务器或者工作站上数据库的方法。 把“测试”按钮的程序修改如下:显示所有数据库的标题 Sub Click(Source As Button) Dim dbdir As New NotesDbDirectory(&&) Dim db As NotesDatabase Dim msg As String Set db = dbdir.GetFirstDatabase(DATABASE)‘第一个数据库 While Not(db Is Nothing) msg=msg+Chr(10)+ db.Title Set db = dbdir.GetNextDatabase ‘下一个数据库 Wend Messagebox msg End Sub 执行结果如下: 3.10 使用 LotusScript 访问视图和文件夹1.使用 NotesView 显示视图的属性。 Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Dim views As Variant Dim msg As String Set db = session.CurrentDatabase views = db.Views Forall view In views msg=msg+Chr(10)+ &View name: & & view.Name & Chr(10) _ & &Parent: & & view.Parent.Title & Chr(10) _ & &Last modified: & & view.LastModified & Chr(10) _ & &Created: & & view.Created & Chr(10) _ & &Universal ID: & & view.UniversalID & Chr(10) _ & &BackgroundColor: & & _ view.BackgroundColor & Chr(10) _ & &Number of columns: & & view.ColumnCount & Chr(10) _ & &Top level entries: & & view.TopLevelEntryCount If view.IsDefaultView Then _ msg=msg+Chr(10)+ &Default view: &+ view.Name If view.IsFolder Then msg=msg+&Folder: &+ view.Name If Not Isempty(view.Aliases) Then Forall aliass In view.Aliases msg=msg+Chr(10)+&Alias: & & aliass+&&-&+view.Name End Forall End If End Forall Messagebox msg End Sub 执行结果:2.定位一个视图,使用 NotesDatabase 的 getView 方法 Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Set db = session.CurrentDatabase Set view = db.GetView (Inputbox(&Exact name of view?&)) ‘输入视图的名字 Messagebox &View name: & & view.Name & Chr(10) _ & &Last modified: & & view.LastModified & Chr(10) _ & &Created: & & view.Created & Chr(10) _ & &Universal ID: & & view.UniversalId End Sub 3.访问视图的列,使用 NotesView 的 columns 属性和 NotesViewColumn 类 显示视图所有列的属性 Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim views As Variant Dim columns As Variant Set db = session.CurrentDatabase REM view is a NotesView object views = db.Views Forall view In views REM column is a NotesViewColumn object columns = view.Columns Forall column In columns position = column.Position title = column.Title If title = && Or title = & & Then title = &&no title&& End If formu = column.Formula Messagebox position & &, & _ & title & &, & & formu,, view.Name End Forall End Forall End Sub 4.定位视图中的一项。 可以通过关键字定位视图中的一项,定义一个数组存储关键字,对应于视图的排序列。视图中的 一项使用 NotesViewEntry 类。 下面是根据第一个排序列的值定为视图的项。 Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim entry As NotesViewEntry Set db = session.CurrentDatabase Set view = db.GetView(&By Category&) Set entry = view.Getentrybykey(&Cars&) Messagebox entry.Universalid End Sub3.11 使用 LotusScript 访问文档1.文档定位 文档的定位有两种方式: ? NotesUIWorkspace――NotesUIDocument――NotesDocument ? NotesSession――NotesDatabase――(NotesView)――NotesDocument 使用第一种方式获取当前文档中选定的文本 Dim workspace As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim text As String Set uidoc = workspace.CurrentDocument text = uidoc.GetSelectedText(body$) 使用第二种方式获取文档中的 Subject 域 Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim note As NotesDocument Dim subj As Variant Dim keys(0 To 1) As String Set db=session.CurrentDatabase Set view=db.GetView(&按分类&) keys(0)=&lotus& keys(1)=&web& Set doc=view.GetDocumentByKey(keys) subj = doc.GetItemValue(&Subject&) Messagebox &Subject: & + subj(0) 2.使用 NotesItem 访问文档的内容 下面程序使用 NotesItem 获取所有文档的 subject Dim session As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim item As NotesItem Dim msg As String Set db = session.CurrentDatabase Set view = db.GetView(&By Category&) Set doc = view.GetFirstDocument If doc.HasItem(&Subject&) Then While Not(doc Is Nothing) Set item = doc.GetFirstItem(&Subject&) msg=msg+Chr(10)+ item.Name & & = & & item.Text Set doc = view.GetNextDocument(doc) Wend Messagebox msg End If 执行结果 3.12 LotusScript 在代理中的应用除了在操作,域,按钮等对象中使用 LotusScript 编程外,代理也是一个重要的应用领域。代理存 在于数据库中,可以用代理完成一些比较复杂的处理逻辑,有一定的触发条件。在代理属性对话框中指 定代理的触发条件和目标。“讨论数据库”有一些代理,有的是通过菜单选择触发,有的是定时触发。 菜单选择触发定时触发在代理中编程序的方式和操作类似,不同的是,程序的主代码写在 Initialize 事件中,可以在代理 中写一些自定义的函数。 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表 图表1 Domino 可编程对象 .................................................................................................................... 2 2 创建代理 ........................................................................................................................................ 4 3 使用操作公式调用代理 .............................................................................................................. 4 4 保存操作 ...................................................................................................................................... 5 5 操作分别在 Notes 和浏览器中的显示 ......................................................................................... 5 6 在页面中使用热点 ........................................................................................................................ 6 7 视图的表单公式 ............................................................................................................................ 7 8 视图的选择公式 .......................................................................................................................... 8 9 视图的列公式 ................................................................................................................................ 8 10 窗口标题公式 .............................................................................................................................. 9 11 段落隐藏公式 .............................................................................................................................. 9 12 表单事件代码 ............................................................................................................................ 10 13 域的事件 .................................................................................................................................... 10 14 域的选型公式 ............................................................................................................................ 10 15 日期时间格式 ............................................................................................................................ 12 16 公式运算符 .............................................................................................................................. 14 17 公式中的关键字 ........................................................................................................................ 16 18 域的缺省值公式 ...................................................................................................................... 17 19 域的输入转换公式 .................................................................................................................. 17 20 域输入校验公式 ........................................................................................................................ 17 21 校验公式的使用 ........................................................................................................................ 18 22 域的隐藏公式 ............................................................................................................................ 18 23 创建操作 .................................................................................................................................... 19 24 操作在 Web 中的应用 ............................................................................................................... 20 25 视图选择条件 ............................................................................................................................ 21 26 视图列公式 ................................................................................................................................ 22 27 代理属性 .................................................................................................................................... 24 28 公式在代理中的应用 ................................................................................................................ 24 29 访问用户环境的公式 .............................................................................................................. 25 30 访问数据库和视图的公式 ...................................................................................................... 25 31 使用 DBcolumn ......................................................................................................................... 27 32 DbLookup.................................................................................................................................... 28 33 Domino 前端对象 ....................................................................................................................... 29 34 Domino 后端类 ........................................................................................................................... 29 35 事件类型和顺序 ........................................................................................................................ 32
Lotus Domino 程序设计 41页 1财富值 第五章 Lotus Domino工作流... 18页 2财富值 第四章 Lotus Domino 6.5 ... 41页 2财富值 IBM Lotus Domino应用开发...lotus domino自定义流程_IT/计算机_专业资料。活流程 自定义工作流程 时 间 :...Lotus Domino 程序设计 41页 1下载券
阳光雨露Lotus Domino高... 82页 5下载...Lotus Notes8.5 操作手册_互联网_IT/计算机_专业...全部复制将本地邮件副本的设计与服务器上的邮件库...第四步利用 Notes8.5 的安装程序重新安装,将先前...设置启动方式 选择作为常规应用程序启动,这样设置好服务器后,每次启动服务器都有一个控制台界面,便于管 8 IBM 精品课程――Lotus Domino 应用开发 理服务器和调试...Lotus Domino学习笔记_计算机软件及应用_IT/计算机_专业资料。Lotus 学习笔记 一...为了以后设计人员进行 维护和修改,另一方面,也为以后设计相同类型的应用程序提供...LotusDomino常用知识与语法_计算机软件及应用_IT/计算机_专业资料。LotusDomino常用...8. 备注 程序 代码 将表单设计为视图或导航器模板 在 Web 应用程序中,要创建...OA -Lotus Notes(Domino)与常见OA系统(JAVA)技术对比分析_计算机软件及应用_IT...Domino 必须用自带的安装程序安装开发端, 客户端, 管理端, 并在开发端进行开发...打开 notes 邮箱,提示 variant does not contain an object 1、进入 lotus notes,复制--&设置复制选项DD&高级DD&取消“存储控制部分”和“设计元素” 2、...Lotus Domino 6.5.1迁移到Lotus Domino 8.5步骤_计算机软件及应用_IT/计算机_...器的注意事(升行佑) 对S多M,子]件被J槭顷PI任程序。 ...建立外发邮箱 14. 选择 lotus notes 的菜单“文件”-&应用程序-&新建,如图 4-10 ※※ PROPRIETARY INFORMATION OF GITD ※※ 集团资讯科技服务部系统名称 read...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 lotus notes nsf文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信