Issuu on Google+

引领时代潮流的群件办公自动化系统 办公自动化系列讲义—第七讲 办公自动化系列讲义 第七讲

Lotus Formula Language Formula 公式语言

周开来 西南林学院计算机与信息科学系


Formula 公式语言 • 1. 2. 3. 4. 5. 6.

Overview for this Chapter 本讲主要内容 Using the syntax rules 使用语法规则 Using variables 使用变量 Using operators 使用操作 Using @functions 使用函数 Using keywords 使用关键字 Specifying form and view names in formulas 指定公式中的表单和视图名称 8. Debugging formulas 调试公式


7.1 syntax rules 语法规则 • Understand formula language through its 可以通过以下内容来理解公式语言: 可以通过以下内容来理解公式语言: – Lexical elements 词法元素 – General syntax rules 通用语法规则


7.1.1 Lexical elements 词法元素 • A formula consists of one or more statements, each consisting of any of the following 公式由一个或多个语句组成, 公式由一个或多个语句组成,每个语 句都由以下词法元素成分构成: 句都由以下词法元素成分构成:  Variables 变量  Constants 常量  Operators 运算符  @Functions 公式函数  Keywords 关键字


• A value is a variable, a constant, the result of an @function, or the result of an expression formed by combining any of the foregoing elements with operators. 一个值可以是变量、常量、函数的结果,或者是由上述任意元 素与运算符组合而成的表达式的结果。 • 下面是一些词法元素的例子:

• (1) )D is a variable, := is an operator, and @Created is an @function without arguments. This formula assigns the creation date of a document to D. • D := @Created • • D是一个变量 是一个变量, 是一个赋值运算符, 是一个变量,:=是一个赋值运算符 是一个赋值运算符,并且 @Created 是一个无参数的函数。 是一个无参数的函数。本公式将把 该文档的创建日期赋值给变量D。 该文档的创建日期赋值给变量 。


• (2) @Trim is an @function with an argument. The argument, Subject, is a variable. This formula removes extraneous spaces from Subject. • Subject:=“ Wellcom you! “; @Trim(Subject) @Trim 是一个带参数的函数,参数Subject是一个变 量,本公式将从Subject变量中删除多余的空格。


• (3)@Prompt is an @function with three arguments. The first argument, [OK], is a keyword; the second and third arguments are text constants. This formula displays a dialog box. • @Prompt([OK]; “更新完成 更新完成”; 你的更新 更新完成 “你的更新 操作将被提交! 操作将被提交!") • • @Prompt是一个带有 是一个带有3个参数的函数 是一个带有 个参数的函数, 个参数的函数,第一 个参数[OK]是一个关键字 个参数 是一个关键字, 第二、第三个 是一个关键字,第二、 参数是文本常量, 参数是文本常量,该公式将显示一个对话 框。


计算文本, 计算文本,该文本的值将由公式 的返回值来确定

公式@Created返回 返回 公式 当前文档的创建时 间,并赋值给变量D 并赋值给变量

在Notes中的预览 中的预览 效果


7.1.2 General syntax rules 通用语法规则 • A formula must follow these general syntax rules 公式必须遵守以下通用 语法规则: • • (1)Statement separators 语句分隔符 • 使用分号来分隔多条语句: • FIELD RegionalManager := AreaManager; • FIELD AreaManager := @DeleteField • •

(2)Spaces 空格 关键字至少有一个空格与前后隔离

• •

(3)Case 大小写 除文本常量之外, Formula公式不区分大小写

• •

(4)Operators and values 运算符和值 两个值之间应该至少有一个运算符相隔


7.2 Using variables 使用变量 • Variables are of two types 变量有以下两种类 型: – Fields 域 – Temporary variables 临时变量


7.2.1 Fields 域变量 •

A formula has access to the fields in the document being processed. The name and type of each field is as specified in the database design. 公式可以访 问正在处理的文档中的域,而每个域的名称和类型都在数据库的设计中被指 定。

• •

(1)Data types 数据类型 数据类型必须符合操作或正在执行的函数的要求,例如,如果TotalValue是 一个数字域,不能用@Prompt直接显示它,因为@Prompt要求一个文本参数。 必须首先用@Text来转换该参数: @Prompt([OK]; “总数为:"; @Text(TotalValue));

• • •

(2) Rich text fields RTF文本域 RTF文本域不能进行赋值运算,如,BodyText是一个文本域,不能用@Prompt显 示它的内容,而且不能用@Text(BodyText)把它转换成纯文本

• •

(3) Lists 列表 列表是一种包含多值的域,可以用一些专门的函数和操作符来处理列表,例如,如 果Locations是一个容许多值的域,下面公式返回列表中值的数目: @Elements(Locations)

• •


创建一个数字域 TotalValue 创建一个 按钮,并 按钮 并 给按钮添 加公式

直接引用 TotalValue域 域, 看 会发生什么情况? 会发生什么情况

弹出错误提示, 弹出错误提示 提 示域的数据类型 不匹配


使用转换函数 @Text将数字域 将数字域 的值转换为文本

得到正确的运 行结果! 行结果


7.2.1 Fields 域变量 • (4) Field values 域值 • 域值可以利用公式来指定.在没有存取控制 列表限制时,可以使用公式来改变域值.必须使 用FIELD关键字来修改域,否则变量将被当作 临时变量来处理。FIELD关键字还可以用来 在当前文档中创建新域.下面的公式给文本域 Subject赋值. • FIELD Subject:=“我是由公式给赋的值哟!”


点击按钮之前域中 文本为空

点击按钮之后域中 文本为赋值文本


7.2.1 Fields 域变量 • (5) Null fields 空域 • 空域等价于文本常量空的双引号””,下例可 以用来检查当前文档中域Test的值,如果Test 的值为空,则将其设置为”域值为空”;否则,不改 变其值。 • FIELD Test:=If(Test=“”;“域值为空”;Test) • (6) Deleting fields 删除域 • 可以使用@DeleteField从文档中删除域 • 例如: • FIELD BodyText:=@DeleteField


空域测试 创建数值型的可编 辑域“商品数量 辑域 商品数量” 商品数量

如果“商品数量 如果 商品数量”域 商品数量 域 值为空, 值为空,则给出提 示信息

编写输入检测公式

如果运行时商品数 量域值为空, 量域值为空,则弹 出如图所示的对话 框提示


7.2.1 Fields 域变量 • (7) Form fields 表单域 • 如果用来创建文档的表单没有保存在文档 中,将有一个名为Form的域包含该表单的名 称;如果表单保存在文档中,则域$TITLE, $Info, $WindowTitle和$Body反映了该表单的 属性,其中域$TITLE包含了该表单的名字。 • @Prompt([OK]; “表单名"; @If(@IsAvailable(Form); Form; $TITLE))


7.2.2 Temporary variables 临时变量 • 临时变量只存在于公式中,其作用范围就是 它所在的公式,离开公式环境,临时变量将不能存 在。创建一个临时变量的语法是: • variableName := value • 其中, 相同 其中, variableName 的数据类型与value相同 的数据类型与 •如 如: •date:=@Created; •week:=@Text(@Weekday(date)); •@Prompt([Ok];"获取星期 获取星期";"今天是星期 获取星期 今天是星期"+week) 今天是星期


创建一个按钮, 创建一个按钮,在 其单击事件中添加 以下代码

“Date” 和“ Week” 都是临时变量, 都是临时变量,公 式执行完毕, 式执行完毕,变量 将被释放


在Notes中的预览效果 中的预览效果

点击按钮后将弹出一 个星期的提示对话框


7.3 Using operators 使用操作 • 操作符用来赋值、修改值或者将现有的值合并到新 值: • (1) 赋值运算符(:=) • 赋值运算符(:=)将等号右边的值赋给左边的变量, 而右边的值类型即为变量类型。在变量之前可以加上 关键字Default、Environment或者Field,没有前缀关 键字修饰的变量时临时变量。 • 如:city:=“Beijing” • Field UserName:=“张三” • Default UserPwd:=“111” • Environment Country:=“China” •


7.3 Using operators 使用操作 • (2) 列表运算符(:) • 列表运算符(:)将值并置在一个列表中,这些 值必须具有相同的类型。如: • “北京”:“上海”:“天津”:“重庆” • 列表中的值可以包括常量,变量或者表达 式: • UserName:=“张三”:“李四”:“王五” • UserName:=UserName:“赵六” • 可以对列表中的元素进行计算,如: • 3:4*2:5+1结果为7:21 • (注意,列表并置具有最高的优先权)


7.3 Using operators 使用操作 • (3) 文本运算符(+) • 文本运算符“+”将两个文本值合并 • (4) 算术运算符(+, —,* , /) • 算术运算符“+、 —、*、 /”进行数字的加、减、 乘、除运算 • (5) 比较运算符 • 比较运算符“=、<>、!=、>、<、>=和<=”用来比较 相同类型的数值,并产生一个逻辑值(真或假) • (6) 逻辑运算符 • 逻辑运算符“!、&、|”用来计算逻辑值,分别表示 “非、与、或”


7.4 Use Formula 使用公式 • Lotus Notes 公式分为两大类:@Functions与 @Commands: • (1)@Functions • @Functions通常返回一个值或对特定数据进 行特定操作, 可以在任何公式中使用; • (2)@Command • @Command将执行一个Notes命令,通常用 来仿真菜单命令,如保存文档或将所选数据复制到 剪切板。


7.4.1 @Functions • Formula语言的核心是@Functions,即一系列以 @开头的命令。函数通常的格式为: • @Function-Name(arg1;arg2;……argn); 公式标记

函数名

参数

注意: 将省略括号, 注意:没有参数的@Functions将省略括号 没有参数的 将省略括号,多个参数之 间用分号分隔, 间用分号分隔,有一些函数的参数为关键字参数, 有一些函数的参数为关键字参数,如 [0K],[YesNo]等具有特定的语义 等具有特定的语义, 等具有特定的语义,需要放在中括号中。 需要放在中括号中。


常用函数简介 • Formula 语言包含将近350个@Functions,可 以进行各种操作,为程序设计者提供各种灵 活的解决方案,但要熟练使用这些函数,还需 要一个长期的应用过程,这里,仅就一些常 见的函数作一个简要介绍。 • 1、编写信息和取得用户输入的方法 • (1)使用@Prompt编写信息  @Prompt([ok];title;prompt)将显示一个信息对话框,其中标题 文本在对话框的顶部,提示文本在对话框的主体部分  @Prompt([OKCANCELLIST]:[NOSORT];title;prompt;default; choices)将显示一个对话框,其中的标题


• 例1:[OK]对话框显示一条消息,用户单击“确定按钮”时关闭此对话框, 当要告知用户某件事情,除了确认以外不需要接收其他的返回信息 时,可以使用这种样式。 • •

@Prompt([OK];“提醒”;“不要忘记修改后保存文档!”)

Title部分 Prompt部分 部分

由[OK]关键字决定 关键字决定


• 例2:[YesNoCancel]关键字对话框也显示一个提 示对话框,提示用户选择“是”、“否”、“取消”。如 果用户选择“是”,返回“1”;选择“否”,返回0;选 择“取消”,则返回“-1”。 Rel:=@Prompt([YesNoCancel];"提醒修改 提醒修改";"确实要修改文档吗 提醒修改 确实要修改文档吗? 确实要修改文档吗?")

由[YesNoCancel]决定的按钮选项 决定的按钮选项


• 例3:[OkCancelEditCombo]关键字显示一个下拉组合列表 框,用户可以在列表中进行选择,也可以在文本框中进行 编辑。该函数返回用户的选择或输入值。 • XueLi:="高中":"大专":"本科":"研究生"; • result:=@Prompt([OkCancelEditCombo];"选择学历";"请选 择受教育程度";"本科";XueLi);

由[OkCancelEditCombo]决定的列表选项 决定的列表选项


• (2)条件分支函数@IF • @IF函数判断一个条件,如果条件为“True”, Notes/Domino立即执行紧跟在条件后面的操作, 然后停止。如果条件为“False”,则Notes/Domino 跳到下一个Condition进行判断(如果有下一个 Condition);如果所有条件都为False,则 Notes/Domino执行else action。 •

@IF函数一般接受奇数个参数,最多可以接 受99对条件与结果。


• @IF函数的语法: • @IF(Cond1;act1;Cond2;act2;……;Condn;else actm) • 参数说明: • Cond1; Cond2;……;Condn是一个布尔型的条件表 达式 • act1; act2;……; actn 前面的控制条件为“True”时执 行的操作或返回的数值 • Else actm 如果条件为“False”时所要执行的操作和 返回的数值


• @IF函数使用示例 • 下面要在一个学生成绩录入表单中设计 一个数学成绩录入的域,现需在Input Validation事件中编写公式进行数据验证,要 求所录入的数据必须是0-100之间的非空数 值,请问下列哪一个公式能够满足此要求。

想想看 (^_^) ) ??


• A) @If(MathScore="";@Failure("请输入数学成绩"); • @IsNumber(MathScore);@Failure("请输入数字"); • MathScore<0;@Failure("成绩不能为负数"); • MathScore>100;@Failure("成绩不能大于100分"); • MathScore) • B) @If(MathScore="";@Failure("请输入数学成绩"); • !@IsNumber(MathScore);@Failure("请输入数字"); • MathScore<0;@Failure("成绩不能为负数"); • MathScore>100;@Failure("成绩不能大于100分"); • MathScore)

• C) @If(MathScore="";@Failure("请输入数学成绩"); • !@IsNumber(MathScore);@Failure("请输入数字"); • MathScore<0;@Failure("成绩不能为负数"); • MathScore>100; MathScore; @Failure("成绩不能大于100分");)


• (3)文档属性函数 • 在很多情况下,我们需要跟踪文档的一些属性,比 如,文档的创建者,修改者,创建日期,修改日期, 文档的大小,是否带有附件等。 • 下面给出一些常用的文档测试函数:  @Author 返回文档的作者  $UpdatedBy 返回文档的修改者  @Created 返回文档的创建时间  @Modified 返回文档的修改时间  @DocLength 返回文档的大小  @Attachments 返回文档是否带有附件  @AttachmentName 返回文档的附件名称  @AttachmentLength 返回文档附件的大小


@Created

@Name([CN]; @Author)

@Modified

$UpdatedBy

@Attachments

@DocLength

文档属性函数在视图公式中的应用


• (4)邮递函数的使用@MailSend • Notses一个相当强大的功能是几乎任何文档都可 以用E-Mail消息发送,可以方便地动态生成邮件消 息。@MailSend是Formula语言中进行这个操作 的方法。 • @MailSend可以有两种用法:  不带参数时,@MailSend将当前的文档邮寄给 “SendTo”域中指定的收件人,该文档中必须有一 个叫“SendTo”的域。  当带一个或多个参数时,@MailSend将按照参 数列表中所提供的信息构造一个新的邮件便签, 并将其发送给“SendTo”、“CopyTo”和 “blindcopyTo”中指定的收件人。


“SendTo”域用来 域用来 指定文档的接收者

“CopyTo”域用来指 域用来指 定文档的抄送接收者

不带参数的 @MailSend用来发 用来发 送具有SendTo域 域 送具有 的文档

按钮用来触发 发送文档事件


• @MailSend(SendTo;CopyTo;BlindCopyTo; Subject;Remark;BodyFields;[Flags]) • 参数说明: • • • • • • •

SendTo:文本或文本列表,邮件主要接收者; CopyTo:文本或文本列表,可选,邮件的抄送接收者; BlindCopyTo:文本或文本列表,可选,邮件的密送接收者 Subject:文本,可选,在邮件主题域中出现的文本; Remark:文本,可选,位于邮件主体域首部的文字; BodyFields:文本,出现在邮件���体中的域的集合; [Flags]:在此可以指定一个或者多个标志,用意以指明邮 件的优先级和安全级,可以指定多个标志,但要按照列 表的方式排列,如: [Sign]:[PriorityHigh]:[ReturnReceipt],用方括号把每个标 志括起来。


操作按钮调用 @MailSend函数 函数

带参数的 @MailSend函数 函数


• (5)文本操作类函数 • @Left(StringToSearch, NumberOfChars) • 从左到右搜索字符串,返回字符串中最左边的 几个字符 • @Right(StringToSearch, NumberOfChars) • 从右到左搜索字符串,返回字符串中最右边的几 个字符 • @Length(String) • 返回文本字符串中的字符个数 • @Middle(String;OffSet;numberChars) • 返回一个字符串中间部分的子串。从左到右进 行扫描,由参数确定中间部分的起始和终止位 置。


运行结果如下: 运行结果如下:


设计文本域 “GetStudId” 编写代 码,从 学号中 获取专 业信息


7.4.2 @Commands 命令 • 第二种Formula公式是@Commands,这些命令执行 重要的与文档相关操作或进行管理和设计活动。在 Domino中,几乎所有的的标准菜单命令都可以使用 @Commands来执行,其语法如下: • @Command([commandName];Parameters) • 其中: • [commandName]是一个要执行的命令名称 • • • •

Parameters 可以是无参数、一个参数或多个参数, 根据调用的函数而定,可以用分号来分隔多个参数。 返回值均 无


• 常见的@Commands公式简介: • @Command([Compose])生成新文档 • @Command([EditDocument,n]) • 这个命令将文档切入或切换出Edit模式,其中n取 值为0或1,当取值为1时,文档转入Edit模式,当取 值为0时,文档转入Read模式 • @Command([FileSave])保存当前打开的文档,前 提是它处于Edit方式。 • @Command([EditCut]) 执行菜单命令“编辑/剪切” • @Command([EditCopy])执行菜单命令“编辑/拷贝” • @Command([EditPaste])执行菜单命令“编辑/粘贴” • @Command([EditClear])执行菜单命令“编辑/清除”


在“操作窗格 操作窗格” 操作窗格 中添加“操作 中添加 操作” 操作

在公式窗格中添加 “新建文档 新建文档”命令 新建文档 命令


单击新建按钮后 弹出新建表单对话框


7.5 Using Keywords 使用关键字 • 公式语言包括一套执行特殊功能的关键字,如下 表所示: 关键字语法 DEFAULT fieldName:=Value

ENVIRONMENT variable:=textValue FIELD fieldName:=value

REM[“remarks”] SELECT logicalValue

关键字描述 将一个值与域关联,如果域存在,则使用域 值,如果域不存在,则使用Value值

指定一个值为环境变量,该环境变量放置在用 户的Notes.INI文件中 将一个值指定给当前文档中的一个域,如果这 个域存在,则替换它的内容,否则创建该域

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


7.6 Formula 公式语言总结 公式是一种类似编程特性的表达式,包含 按顺序执行的一条或多条语句。 公式中没有循环和控制跳转的语言元素。 对依条件选择执行的路径也有限制。 Formula语言对于窗体设计非常重要,可用 于代理和操作,但要执行更复杂的控制, 单凭公式是无法完成的,这就必须要使用 到我们下节课所要介绍的内容,采用Lotus Script 进行编程。


lotusdingdd