首页 第3章Lotus Domino 6.5 程序设计

第3章Lotus Domino 6.5 程序设计

举报
开通vip

第3章Lotus Domino 6.5 程序设计Lotus Domino 6.5 程序设计 13.1 编程概述 13.1.1 编程语言 23.1.2 Domino可编程对象 103.2 公式语言简介 113.2.1 使用语法规则 133.2.2 使用运算符 143.2.3 使用 @function 153.2.4 公式语句的计算顺序 163.2.5 其它规则 173.3 公式在表单、域和操作中的应用 173.3.1 公式在域中的应用 183.3.2 公式在操作中的应用 203.3.3 公式在表单中的应用 21...

第3章Lotus Domino 6.5 程序设计
Lotus Domino 6.5 程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 13.1 编程概述 13.1.1 编程语言 23.1.2 Domino可编程对象 103.2 公式语言简介 113.2.1 使用语法规则 133.2.2 使用运算符 143.2.3 使用 @function 153.2.4 公式语句的计算顺序 163.2.5 其它规则 173.3 公式在 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 单、域和操作中的应用 173.3.1 公式在域中的应用 183.3.2 公式在操作中的应用 203.3.3 公式在表单中的应用 213.4 公式在视图中的应用 213.4.1 视图选择条件 223.4.2 视图的列 233.4.3 视图操作 243.5 公式在代理中的应用 253.6 公式的其他用途 253.6.1 通过公式访问用户环境 253.6.2 访问当前数据库和视图 263.6.3 通过公式访问当前文档 273.6.4 访问当前数据库之外的数据 283.7 LotusScript编程简介 293.8 Domino对象模型 293.8.1 前端用户接口类 293.8.2 后端类 303.8.3 对象层次结构 313.8.4 事件类型和顺序 333.8.5 使用LotusScript编程的提示和建议 333.9 使用LotusScript访问数据库 363.10 使用LotusScript访问视图和文件夹 383.11 使用LotusScript访问文档 403.12 LotusScript在代理中的应用 3.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 隐藏操作公式 公式 事件 公式,LotusScript 表单设计 窗口标题公式 公式 区段标题公式 公式,文本 区段存取公式 公式 插入子表单公式 公式 隐藏段落公式 公式 操作 公式,简单操作,LotusScript,JavaScript 隐藏操作公式 公式 事件 公式,LotusScript,JavaScript 热点(按钮或操作) 公式,简单操作,LotusScript,JavaScript 热点(链接或公式弹出) 公式 表单中的布局区域设计 热点(操作) 公式,简单操作,LotusScript,JavaScript 表单中的域设计 缺省值公式 公式 输入转换公式 公式 输入校验公式 公式 计算域的值公式 公式 关键字域公式 公式 事件 LotusScript,JavaScript 文档(编辑模式)RTF 文本域 区段标题公式 公式,文本 隐藏段落公式 公式 热点(按钮或操作) 公式,简单操作,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(@IsResponseDoc;"Response";"MainTopic") 此表单公式指出,视图中的文档如果是答复文档则使用“答复”表单显示,否则将使用 MainTopic 表单显示。然而,如果用户试图使用其它表单(如“Phone Number”)构造一个新文档(从 Notes 菜单中选择“创建”“Phone Number”),则用户将看到 MainTopic 表单而不是 Phone Number 表单。使用公式或 LotusScript 构造新文档的视图操作的结果也一样。 要避免出现此问题,请在表单公式中添加下面的内容。 @If(@IsNewDoc; @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-2 4.时间/日期常量 时间-日期常量由时间和(或)日期构成,放在方括号中。格式如下 · 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 日期时间格式 时间-日期格式 常量 12 小时制结果 24-小时制 [5:30] 05:30:00 AM 12-小时制 [5:30 PM] 05:30:00 PM 24-小时制 [17:30] 05:30:00 PM 日期 [6/15] 06/15/97 日期 [6/15/97] 06/15/97 时间-日期 [6/15 5:30 PM] 06/15/97 05:30:00 PM 时间-日期 [5:30 PM 6/15] 06/15/97 05:30:00 PM 差值 [5:30 PM]-[5:30] 43200 5.通用语法规则 · 语句分隔符 使用分号分隔多条语句。 FIELD RegionalManager := AreaManager; FIELD AreaManager := @DeleteField · 空格 在运算符、标点和值之间可以放置任意多个空格(也可以没有)。然而,描述关键字至少需要一个空格,而且,文本常量之间的空格也是很重要的。 例如:下面的语句是等价的。 LastName + ", " + FirstName; 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" "A1":"B2":"C3" "A1":"B2":"C2" "A1":"B1":C1" 连接,交叉 "A":"B":"C"*+"1":"2":"3" "A":"B":"C"*+"1":"2" "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 = 4 3.2.3 使用 @function 函数执行一个特定的运算并返回一个值。 函数通常的格式为: @function-name(argument1; argument2; ... argumentn); 函数由函数名后面紧随参数(如果有的话)构成,函数名的第一个字符总是 @。使用分号分隔各个参数。 @Middle(Company; 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(Condition; TrueStatement; 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(LogicalValue; TrueStatement; FalseStatement) @Do 函数 @Do 按顺序执行一系列语句,可以作为执行路径用在 @If 函数中: @If(LogicalValue; @Do(TrueStatement1; TrueStatement2); FalseStatement) 任何出现在 @Do 函数中的 @Command 函数将在其他所有函数之后执行,不论这些函数是否在 @Do 函数中。 @Return 函数 @Return 终止公式的执行: @If(LogicalValue; @Return(""); "") 3.2.5 其它规则 1.使用关键字 图表 17 公式中的关键字 关键字语法 描述 DEFAULT fieldName := value 将一个值与域关联。如果域在正被处理的文档中已经存在,则其当前值被使用。如果域不存在,则当作域已经存在来处理该文档,并且使用 DEFAULT 值。 ENVIRONMENT variable := textValue 指定一个值为环境变量,环境变量放置在用户的 NOTES.INI 文件中 (Windows、OS/2、UNIX) 或 Notes Preferences 文件中 (Macintosh)。 FIELD fieldName := value 将一个值指定给当前文档中的一个域。如果域不存在,则创建该域,如果已经存在,替换它的内容。 REM "remarks" REM {remarks} 在公式中加入注释而不影响它的功能。 SELECT logicalValue 指定当前文档在视图选项、复制和代理公式中是否有效。 2.在公式中指定表单和视图的名称 在公式中指定表单和视图的名称时: · 不要包含名称中的快速键字符,即下划线(如果有的话)。公式语言把下划线作为下划线文字处理。 · 要包括级联字符(即反斜杠),但注意需要转义字符,因此要输入两个反斜杠。 以下公式示范了如何输入视图名“_Marketing\_Procedures”: @Command([ViewChange]; "Marketing\\Procedures") 3.调试公式 公式语言不提供正规的调试机制。可以使用 @Prompt 设置断点并检查变量。以下的样例使用 @Prompt 设置一个断点然后检查一个变量。在确定正确的代码以后,删除调试语句。 @Prompt([OK]; "Checkpoint"; "About to calculate LastName"); LastName := @RightBack(@Left(@UserName; "/"); " "); @Prompt([OK]; "Value of LastName"; LastName) @prompt函数显示一个对话框,并根据用户的操作返回一个文本值。@Prompt 用来给用户提示信息,并根据用户的输入确定以后的操作过程。详细请参考DesignerR6帮助文件。 当我们使用@prompt时,会显示一个对话框,需要用户响应,会中断程序的执行。DominoR6提供了一个新的函数@StatusBar()。可以把信息打印到状态栏上,无需用户响应,不会中断程序执行。 3.3 公式在表单、域和操作中的应用 本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 不是公式的使用手册,不对公式作太详细的说明,主要讲解在开发实例中的应用。本节以前面提到的“IBM全球认证管理系统”为例,所名公式的使用。 3.3.1 公式在域中的应用 公式在域中的应用主要体现在4个方面: · 域的缺省值公式 · 输入转换公式 · 输入校验公式 · 域的隐藏公式 以“StudentInfo”表单为例,有一个“是否缓考”域StuDelay,是单选按钮类型,有两个值“是”和“否”。我们希望在新建考生信息时,能有一个初始值“否”。那么这个有就不会在用户疏忽的情况下出现空值。 图表 18 域的缺省值公式 当用户输入“姓名”(StuName)的时候,不小心在首尾输入了空格,那么就需要把这些多余的空格去掉,可以使用输入转换公式。 图表 19 域的输入转换公式 函数@trim(),就是去掉字符串首尾的空格。详细请参考Designer帮助文件。 当用户输入电子邮件(StuEmail)的时候,需要有“@”符号,可以通过输入校验公式检查输入的合法性。 图表 20 域输入校验公式 注: @if()函数相当于其它程序语言中的if语句,有奇数个参数,做多可有99个参数。根据条件判断选择执行不同的语句。 @Contains( string ; substring ),判断subString 是否包含在string中。 @thisvalue,返回当前语的值。 @success,返回 1(真),判断输入的值是否满足检查条件。 @failure(string),返回给出的消息,当用于输入校验公式时,如果输入的值不符合校验标准,@Failure 将显示给出的消息。终止保存操作。 公式 @if(@contains(@ThisValue;"@");@success;@Failure("请输入正确的邮件地址!")) 检查当前域的值是否包含“@”,如果不包含,提示错误信息。我们用“StudentInfo”表单创建一个文档,并保存,得下面结果。 图表 21 校验公式的使用 域“备注”(StuRemark)是管理员用的,对一般用户隐藏,可以使用隐藏公式。 图表 22 域的隐藏公式 当当前用户不具备“[admin]”角色时,隐藏域。 注: 角色“[admin]”是在数据库的存取控制列表中,有管理员设置的。 @UserRoles,返回当前用户具备的角色,使一个文本列表。 @IsNotMember(textValue ; 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] 将名字各部分按相反顺序排序,用反斜杠分开(用于分类视图)。 @UserRoles 对于服务器上的数据库,返回当前用户的角色列表。 @MailDbName 返回用户邮件数据库的服务器名和路径名。该 @function 计算出一个包含两元素的列表。 @OptimizeMailAddress(address) 从地址中删除无用的网络域。 @Platform 返回用户当前运行的平台:Macintosh、 NetWare、 OS2V1、 OS2V2、 UNIX、 Windows/16 或 Windows/32。 @Version 返回正在运行的 Notes 版本(字符串)。 @Password(string) 对字符串加密。加密后别人无法从中得到最初的字符串。 3.6.2 访问当前数据库和视图 可以直接访问正在运行公式的数据库(便捷图标除外,因为它没有数据库环境)。也可以在视图环境中直接访问正在运行公式的视图。同样,在文档环境中可直接访问打开文档的视图。 下表列出返回数据库和视图属性的函数。 图表 30 访问数据库和视图的公式 函数 描述 @DbManager 返回当前对数据库有“管理者”权限的用户、群组和服务器。返回一个列表。 @DbName 返回当前 Notes 服务器和数据库的名称。返回二个元素的列表。 @ViewTitle 返回当前视图的标题。 这些函数仅工作于窗口标题和列公式中,有一些会被限制。返回值都是一个字符串。 函数 描述 @Responses 返回当前视图中当前文档的答复文档的编号(只限于窗口标题公式)。 @DocLevel 返回在当前视图中当前文档的级别。 @DocSiblings 返回与当前文档同级的文档编号(包含当前文档)。 @DocNumber 返回当前视图中的当前文档或分类的编号。 @DocNumber(sep) 同上,只是用 sep,而不是句点来分隔编号。 @DocNumber("") 同上,只是仅返回编号的最右边部分。 @DocParentNumber 返回当前视图中当前文档或分类的父文档或父分类的编号。 @DocParentNumber(sep) 同上,只是用 sep,而不是句点分隔编号。 @DocParentNumber("") 同上,只是仅返回编号的最右部分。 @DocDescendants 返回后续文档的编号。包含当前文档的子文档,子文档的子文档。 @DocDescendants(def) 同上,只是返回 def。在 def 中使用 % 以表示编号。 @DocDescendants(zero; def) 同上,只是如果没有后续文档的话则返回 zero。 @DocDescendants(one, zero; def) 同上,如果只有一个后续文档的话,则返回 one。 @DocChildren 返回当前文档的直接子文档的编号。 @DocChildren(def) 同上,仅返回 def。在 def 中使用 % 以表示编号。 @DocChildren(zero; def) 同上,只是如果没有后续文档的话,则返回 zero。 @DocChildren(one, zero; def) 同上,如果只有一个后续文档的话,则返回 one。 @IsCategory 如果当前行的当前域右边任何域是一个分类,则返回一个星号。 @IsCategory(True) 同上,只是返回 Frue 代替星号。 @IsCategory(True; False) @IsExpandable 如果当前行是可展开的,则返回一个加号。 @IsExpandable(True) 同上,只是返回 True 代替加号。 @IsExpandable(True; False) 同上,但是如果当前行是不可展开的,则返回 False。 3.6.3 通过公式访问当前文档 对于表单操作、按钮、热点和域公式,当前文档指被打开的文档。对于视图操作,当前文档指突出显示的文档(而不是选中的文档)。对于代理,当前文档指根据代理构造器选择以及 SELECT 关键字 标准激活的文档。 如果希望读取当前文档中某个域的内容,请命名该域。不区分大小写,但命名要准确。 · 如果希望编写当前文档中的域,必须使用 FIELD 关键字或者 @SetField 函数。不能简单的命名该域。 · 关键字 FIELD 用于赋值语句并有以下格式。如果忽略 FIELD 关键字,则指定变量被认为是临时变量。 FIELD field-name := expression · @SetField 写入域,它与使用关键字 FIELD 的赋值语句效果相同。@SetField 可以嵌套到另一个语句;(在R6中,Field关键字也可以嵌套) 域名被表达成一个文本值,所以它可以是一个括号中的准确名字。有一个限制是 @SetField 只工作于已存在的域中;如果文档中不存在您想写入的域,则可使用 FIELD 赋值语句在公式开头“声明”它。@SetField 有以下格式。 · @SetField( field-expression-name; expression ) · DEFAULT 关键字为不在文档中的域提供了一个值。如果该域存在于文档中,就使用它自身的值。否则,就用 DEFAULT 值。 DEFAULT field-name := expression · @MailSend 函数邮寄文档。不带参数的 @MailSend 函数邮寄当前文档,它必须包含一个域名为“SendTo”的域,该域包含收件人的名称。带有参数的 @MailSend 构造文档并按指定参数邮寄。 @MailSend @MailSend( to; cc; bcc; subject; body; fields; flags ) · @DeleteField 函数删除域。在 FIELD 赋值语句中指定它作为表达式。 FIELD field-name := @DeleteField · @DocMark([NoUpdate]) 函数防止写入公式对文档所作的更改被保存。被公式处理后的文档与以前的文档是一样的。该 @function 只影响代理。 3.6.4 访问当前数据库之外的数据 以下函数从指定的数据库中取得数值。但不能用这些函数设置数值。 · @DbLookup 在指定数据库的指定视图中的第一个排序列中查找指定的值。对于每个匹配搜索值的文档,@DbLookup 返回文档或视图中的列的指定域中的值。 · @DbColumn 返回指定数据库的指定视图中的指定列中的全部值。 前三个参数对于两个函数是相同的: · [NOTES] : [NOCACHE] 指定的操作是在 Notes 数据库上并且未使用缓存。因为 [NOTES] 是缺省的,所以您可以为第一个列表元素指定空串 ""。如果数据是稳定的或者您访问过数据库许多次了,则可以指定第二个列表元素为空串 "",并不使用缓存。可以为所有参数使用一个空串 "",表示打开一个 Notes 数据库而且没有缓存。 · server : database 指
本文档为【第3章Lotus Domino 6.5 程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_335311
暂无简介~
格式:doc
大小:2MB
软件:Word
页数:41
分类:互联网
上传时间:2013-11-26
浏览量:32