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小时内删除。