Page 1

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

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  

try lotus try lotus try lotus try lotus try lotus

Advertisement