第一部分: 基础知识
PML基本概念
Programmable Macro Language 可编程宏语言.
通常的PML开发包括两部分, 一部分是PML宏,脚本语言; 另一部分是PML2,面向对象的编程语言.
1.
宏, 就是一系列pml命令的集合.
通过$m执行.
格式为:
(举例)
其中param1为参数, 宏可以参数化.
(举例)
2.
PML支持对象(Object),对话框(Form)和菜单(Menu).
(举例)
一.
1. 变量的定义及用法
在PML2中, 每一个变量都是对象. 变量名以!或者!!开头,例如!weight. !开头的变量为局部变量, !!开头的为全局变量.
PML内置了常用的变量类型.
(1)
!a = 10
!b = 10
!a = !a + !b
$p $!a
(2)
!strName = ‘/EQUI-TEST-1’
(3)
(4)
(5)
(6)
3.
变量可以用赋值来创建. 例如
!str = ‘abc’
4.
Method是一个对象的子程序. 只有当对象存在,才可以调用对象的方法. 例如
以上的代码, 调用的string类型的real()方法, 将字符串转换为数字,并输出.
函数的用法与方法类似, 同样有参数和返回值. 但函数是独立存在的,全局的. 在任何地方, 都可以调用.
二.
1.
(1)
例如:
!sum = 0
Do !i From 1 To 100 By 1
Enddo
其中!i为循环变量, 初始值为1, 终指为100, 步长为1.
(2)
Break: 中断并跳出最内层循环
(3)
Skip.
!sum = 0
Do !i From 1 To 100 By 1
Enddo
2.
格式为if () then … else …
其中括号内的必须是表达式.
例如:
IF (TYPE OF OWNER EQ ‘BRAN’) THEN
ELSEIF (TYPE EQ ‘BRAN’) THEN
ELSE
ENDIF
其中elseif /else可选, elseif可多个.
3.
定义标记Label /label1
跳转Golabel /gol1
不建议使用.
三.
1.
字符串长度 Length()
类型转换 Real(),Position(),Boolean()
大小写转换 LowCase(),UpCase()
两端截取 After(str2),Before(str2),Substring(index)
中间截取 Substring(index,nchars)
替换 Replace(str2,str3)
匹配 Match(str2)
分割(返回数组) Split()
修剪 Trim()
2.
元素数量 Size()
追加元素 Append(value)
追加数组 AppendArray(Array)
删除全部元素 Clear()
倒序 Invert()
搜索 Find(value),FindFirst(value)
和并重复项 Unique()
3.
(1)
(2)
(3)
LT GT EQ NEQ
(4)
4.
Sqrt(x)
Power(x, e)
Int(x)
Sin(x)
Cos(x)
5.
单行注释 用—开头.
单行注释 $*.
段落注释.
(举例)
6.
$p 打印内容
例如 $p test line
打印多行
$p line 1 $
Line 2
输出内容包括变量
$p ce.name is $!!ce.name
其中$为转义字符, 如果要输出$, 则使用$$
7.
程序运行中, 可能需要意料之中的可能发生的异常/错误, 例如节点创建失败, 遍历子节点时超过最后一个等等. 这时需要捕捉异常,作出相应的处理.
(1)
例如
Site /TEST_SITE
Handle (2, 109)
Endhandle
其中(2, 109)为错误编号.
(2)
Site /TEST_SITE
Handle (2, 109)
Elsehandle (2, 108)
elsehandle none
endhandle
四.
(1)
Define method .方法名(参数1 is 类型, 参数2 is 类型…) is 返回值类型
其中 参数可没有 返回值可以没有
例如
Define method .Sum(!a is real, !b is real) is real
!sum = !a + !b
Return !num
endmethod
(2)
Define function !!sum(!a is real, !b is real) is real
!sum = !a + !b
Return !num
endFunction
与方法类似.
(3)
Define object 对象名
endobject
五.
(1)
!lines = !file.ReadFile()
Q var!lines
(2)
!arr = array()
!arr.append(‘line1’)
!arr.append(‘line1’)
!file = object FILE('d:\abc.txt')
!file.WriteFile('WRITE', ! arr)
六.
1.
(1)
!confirm = !!alert.confirm('确定要删除吗?')
(2)
!!alert.message(‘message’)
(3)
!!alert.error(‘error’)
2.
SETUP FORM !!custumForm
Exit
3.
Pmlhash all
Pml reload form !!custumForm
Show !!custumForm
4.
每个form初始化时, 会自动调用与其名字相同的方法. 在刚才的代码中加上
Define method .custumForm()
Endmethod
除此以外, 还可以加上默认的初始化函数
在开头加上一行!this.initcall = '!this.init()', 调用构造方法结束,显示之前,会自动调用init()方法
5.
界面消息的相应, 例如点击按钮, 选择下拉框等, 用callback关联.
SETUP FORM !!custumForm
Exit
Define method .custumForm()
Endmethod
Define method .ok()
Endmethod
此时, 点击按钮, 会弹出对话框.