BAAN 工具
一、用户变量和常量
变量和常量名可以由字母、数字、下划线和点组成。每个变量和常量必须以字母开头。长度任意。
下列两个条件适用于变量和常量名:
1. 为避免冲突,变量和常量名不要与系统保留字相同,保留字信息请看开发手册。
2. 变量名应能反映变量的内容。
常量的类型可为长、双精度、字符、列举和它们的组合。长型的常量用于正负整数;双
精度常量用于浮点数;幂常量可以用e来定义;字符型常量用于表示字符串;列举型常量通过列举域来定义,其表示方法为列举域名带上列举域中列举的某一个常量名。组合常量由上述常量通过加减号连接组合而成。
常量类型 | 范围 | 举例 | 初值 |
长(Long) | -2147483648~2147483648 | 123456, -124 | 0 |
双精度(Double) | 最大长度为15位的小数 | 123.45, -2.3e10 | 0 |
字符型(string) | 所有字符、数字等,最大长度1024字节 | Abc1231? | “” |
列举型(enumerate) | 所有已定义的常量值 | 是(s)或否() | empty |
组合型(set) | 和列举型一样,但可以组合(+/-) | 黑体+下划线 | |
变量的类型有:长(long),双精度(double),字符(string),表(table)和域(domain)。长型变量用于正负整数,双精度用于小数,字符型变量包含的字符长度可声明为固定的,这意味着其当前长度等于最大长度,表变量用于在数据字典中已定义了的数据库的表。
域变量是依据数据字典中定义的域来定义的,主要用于临时存储的表字段的内容。域的数据类型可以为长、字节、整数,日期,列举、组合、浮点、双精度、字符串(不能用于中文输入)、文本和多字节字符串(可用于输入中文)。
变量类型 | 范围 | 举例 |
长(long) | -2147483648~2147483648 | 12345 |
Double(双精度) | 最大长度为15位的小数 | 12345.321 |
String(字符串) | 所有字符、数字等,最大长度1024字节 | Abcd123!? |
Table(表) | 数据字典中定义的表 | Ttiitm001 |
Domain(域) | 数据字典中定义的域 | Tiedm.cdrw |
变量和常量可以在函数中声明,也可以在4GL 的declaration部件中声明。在函数块中声明的变量和常量(局部变量和常量)只可用于该函数,在declaration部件中声明的变量和常量(全局变量和常量)可用于该程序脚本中所有的部件和函数。
常量必须用关键字#difine来定义。
如果一个变量用于程序脚本外面,如用于form或report,则必须用extern来声明,扩展成需要用于当前程序外部的变量。
下面是变量和常量的一个例子:
|****************** declaration ************************ declaration: | 变量的定义 table tcuoes020 | items extern long total.amount, average.amount string description(30) | 字符长度为30 string (6) fixed | 字符有固定的长度6 double float.variable |常量的定义 #define USER_ERROR -1 #define USER_SUCCES 1 #define FLOAT_NUMBER 123.4e5 #define MESSAGE “This is a message constant” |********** function section ********** functions: function my_function() { domain color box color |color是一个包含green和blue的列举域 domain feature box feature | feature 是一个组合类型的域,它包含bold | reverse 和underlined box color = box feature = feature.bold … box color = d box feature = box verse } |
二、运算符和语句
本节简单描述BAAN IV 程序语言中用到的运算符和条件语句。有关的详细信息请看开发手册。
1. 算术运算符:
- 减 + 加 * 乘 / 除 \ 余数 & 字符串连接
例:
Long var1, Var2 String var3(5), Var4(10) Var1 = 8\3 | var1 = 2 Var2 = var1 – 1 | var2 = 1 Var3 = “hello” Var4 = var3&“world” |
enum函数 |
2. 关系运算符:
= 等于 <> 不等于 > 大于 < 小于 >= 大于或等于 <= 小于或等于
例:
Long var1, var2 If var1 >= var2 then …… |当 var1>=var2时将执行的代码 else …… |当var1<=var2时将执行的代码 endif |
3. 逻辑运算符:
not and or
not优先于and, and优先于or, 当使用园括号时,括号内的运算符最优先。
4. 控制语句:
用于传送控制的语句通常有两种,分别为:if-then-else和on case。If-then-else用于执行可以在ture和false中任选一个条件的代码。其标准格式为:
if then else endif
例:
Long var1, var2, var3 if var1>=var2 then var3=var1-var2 else var3=var2-var1 endif |
On case是if the else语句的扩展,如果不满足指定的值,将按默认代码执行。其标准格式为:on case <变量> case 1: case 2: default: endcase
例: long weekday string day(9) on case weekday case 1: day=”Sunday” break case 2: day=”Monday” break case 3: day=”Tuesday” break default: day=”other day” endcase |
为避免条件赋值时匹配值与其它值比较,Break命令用于中断回路的执行,在循环嵌套的情况下,最内层循环的执行被中断,之后程序立即执行回路后面的语句。继续命令(不显示)可用于强制程序符合循环条件。使得回路中剩余的语句被跳过。
5. 循环语句
循环语句反复执行命令直到指定的条件不成立。有三个著名的循环语句:while
endwhile语句、for endfor语句和repeat until语句。
While <条件> … endwhile
例:long counter counter=1 while counter<=100 … | code witch must be repeated counter=counter+1 endwhile |
for <变量>=<初值> to <始值> step <步长> … endfor
例:long counter for counter=1 to 100 step 1 … | code witch must be repeated endfor |
repeat … until …
例:long counter repeat … | code witch must be repeated counter=counter+1 until counter=101 |
三、函数
BAAN IV 程序设计语言中有许多预先定义好的函数。由于篇幅关系,只介绍一部分常用的函数。至于这些函数的语法和用法请看开发手册。
BAAN IV 的内部函数可分为两批:3GL函数和4GL函数。4GL函数与3GL函数的不同之处为:
1. 直接影响标准程序。
2. 受限于特定的4GL部件。
3. 不能用于用户自定义函数。
4. 不能用于动态连接库。
4GL函数直接影响标准程序的流程。正因为如此它只能用于特定的4GL部件。基于同
样的原因,它们也不能用于用户自定义函数和动态连接库。
此外,用户可以定义自己的函数。有关用户自定义函数的语法,请看7.3.3。
4GL 函数
下表列出了常用的4GL函数和它们的使用处:
函数: | 说明 | 用于(yes)、不能用于(No) |
abort.io | 中断数据库事务处理 | Yes: before.write, write, before.delete, after.write, write, after.delete, after.skip.write, write, after.skip.delete, after.choice of choice update.db |
choice.again | 立即将控制传送到选择字段 | Yes: before.choice, on.choice, after.choice, before.field, before.input, on.input, when.field.changes, after.input |
Display Display.all Display.fld | 显示一个或多个字段。. | No: Before.program |
Execute | 执行一个选项。 | Yes: before.choice, on.choice, after.choice, before.form, on.entry, after.form, No: before.choice, on.choice and after.choice for the choice itself |
Input | 在一个字段中请求输入 | No: Before.program |
ax in Set.limits.off | 在主表中设限制。 | No: Before.program |
Do.occ Do.occ.without.update | 为特定的事件执行指定的函数。 | Yes: before.choice, on.choice, after.choice, before.input, on.input, after.input, check.input, when.field.changes, , |
执行当前记录修改前的特定值 | Yes: write , write | |
On.main.table | 执行与当前记录无关的特定函数。 | No: Before.program |
显示错误信息并请求重输该字段 | Yes: Check.input: | |
Skip.io | 跳过数据库的活动 | Yes: ad, before.write, write, before.delete, read.view |
$ | 推进到特定的 session 或 menu. | Yes: All 4GL sections |
3GL函数
下表列出了一些常用的3GL函数,其它有用的3GL函数信息请看开发手册。
Function | Description |
日期和时间函数,如: - date.num - time.num - um | 用于日期和时间的转换的函数。 |
Enum 函数,如: - um - enum.descry$ - etol | 用于列举型的函数. |
格式函数: - edit$ - sprintf$ - string.scan | 用于字符表达式的格式的函数. |
Isspace | 判断字符串是否为空的函数 |
最大最小值函数: - max - min - set.max - set.min | 确定或保存变量的最大最小值. |
信息函数,如: - cleanmess - mess - message | 显示或删除信息; 信息可以在也可以不在数据字典中定义。 |
字符串函数,如: - lval - str$ - strip$ - shiftr$ - toupper$ | 用于字符串转换的函数。 |
四、用户自定义函数
用户可以定义自己的函数,但必须在functions部件定义。与以前的TOOLS版本的区别是函数不再需要在4GL declaration部件中定义。
下面是一个用户自定义函数的例子:
Functions: Function long give.max.value(long value1, long value2) { long max.value if value1 > value2 then max.value = value1 else max.value = value2 endif return(max.value) } |
该例中函数的类型是长,返回值由函数的return提供。该函数有两个结果(value1 and value2)和一个内部变量(max.value)。
函数的类型就等于返回的值的类型。下面是常用的类型:
● double
● string
● domain
● void
如果函数的类型是void,该void的关键字和RETURN语句可跳过。局部变量可定义为静态的,这表明离开函数前它们的值将被保存。如果函数被重新激活,该值可恢复。启动进程时,静态变量被初始化, 数值变成0、字符变成空。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论