pnuts语言介绍
Process Designer脚本语言pnuts是一种面向对象和基于事件的语言。您不必从脚本语言中实例化类。
JavaAPI中的任何公共方法都可以用于向应用程序添加功能。这些类中的大多数都必须导入。
基本和Java一致
- 基于表达式
脚本语言是基于表达式的,脚本在运行时由脚本解释器以交互方式进行评估。脚本环境按顺序计算表达式,然后将最后的结果传递给Java环境。
- 原始数据
基本数据将自动转换为对象。例如,如果您声明了一个变量a=1,它将转换为objectjava.lang.Integer 。算术运算使用包装器对象进行计算。
- 函数
脚本可以包含可以接受任意数量参数的函数,这些函数由它们的名称和参数的数量标识。可以将函数赋给变量。参数和结果按原样传递,但由Java对象包装的基元类型值除外。
脚本基础
关键字
关键字不可用作变量
注释
// text
/* text */
特殊字符
事务密钥缓存
服务器上至少缓存3000个事务密钥。如果您有3000多个事务请求,工厂操作将自动为它们分配更多空间。此缓存机制不可配置。由于缓存了密钥块,因此不能保证密钥的顺序。如果希望了解事务的创建顺序,建议查看trx_时间值(包含毫秒数据),而不是trx_键值
内置函数
import( )
Example 1
import ("com.datasweep.compatibility.ui.*")
import ("java.io.*")
Example 2
import("com.datasweep.compatibility.ui.Color")
ctrlStartButton.setBackColor(Color::RED)
一开始时,“java.lang.”和默认包(“”)已被注册
import()
此函数用于获取导入的类和包名称的列表。
Example
import ("com.datasweep.compatibility.ui.*")
import ("java.io.*")
pkgs = import()
printAll(pkgs)
执行代码段后输出结果为
java.io.*
com.datasweep.compatibility.ui.*
com.jacob.com.*
java.lang.*
*
throw ( )
此函数抛出指定的异常。
传递字符串对象时,将引发RuntimeException。分配给RuntimeException的错误消息将是作为参数传递的字符串,而不是一般RuntimeException错误消息。
Example
function exceptionHandler(e)
{
println(e.getMessage()) // Output is "ThereAreProblems"
}
catch(RuntimeException, exceptionHandler)
throw("ThereAreProblems")
catch ( , )
此函数在堆栈框架中定义异常处理程序。第一个参数是exception类(例如exception、NumberFormatException等)。第二个参数是抛出指定异常时要调用的用户脚本函数(处理程序)的名称。当抛出一个已注册的异常时,将执行相应的处理程序,catch函数将立即返回处理程序的结果。异常处理程序的作用域与变量的作用域相同
示例:声明多个Catch语句
function genericExceptionHandler(e)
{
dialogError("Exception thrown: " + e.toString())
}
catch(Exception, genericExceptionHandler)
//做一些可能导致异常的事情
示例:捕获一般异常
//首先声明最通用的异常类
catch(类java.lang.Exception,catchGeneric)
//在之后声明更具体的异常类
catch(类java.lang.NumberFormatException,catchConvert)
catch(类java.lang.arithmetricException,catchCalc)
defined ( )
此函数有两个用途:
1.检查指定符号是否已在任意范围内定义。
Example 1
ok = defined("X") //ok evaluates to false
X = 100
ok = defined("X") //ok evaluates to true
X = null
ok = defined("X") //ok evaluates to true
如果从函数中调用,则defined()函数无法识别局部变量。例如:
a = "hello"
isDefA = defined("a") //isDefA is true
function hi()
{
b = "hi"
isDefB = defined("b") //isDefB is false
}
hi()
2.检查类的可用性。
Example 2
ok = defined("Window") //ok evaluates to false
import("com.datasweep.compatibility.ui.Color")
ok = defined("Color") //ok evaluates to true
class ( <class_name> )
此函数用于检查是否存在具有指定名称的类。如果类存在,则返回类对象。否则,它将返回null。
ok = class("com.datasweep.client.compatibility.Account") //returns the class
quit ()
此函数用于终止对当前事件脚本的求值。
sleep (int msec)
此函数使当前执行的线程在执行下一条语句之前暂停指定的毫秒数。
CreateObject (String ProgId)
此函数是Microsoft Visual Basic函数CreateObject()的包装器,可用于创建指定应用程序类型的对象。例如:
xlApp=CreateObject(“Excel.Application”)//xlApp是Microsoft Excel应用程序。
有关此函数的详细信息,请参阅Microsoft Visual Basic帮助。
println (Object objects, …))
运行窗体时,此函数在调试窗口中打印对象的字符串或字符串表示形式
Example
println("UnitSaved")
println(vector.size())
a = [1,2,3]
println(a)
hex (Object integerOrByteArray)
此函数返回由指定整数或字节数组构造的十六进制格式字符串
//a evaluates to 310e
a = hex(12558)
数组/集合
数组创建
Example 1
arrArray1 = createArray(2)
arrArray1[0] = "Dog"
arrArray1[1] = 1.1
Example 2
list = createArray(2)
for (i=0; i<2; i++){
list[i]= i;
}
Example 3
arrArray1 = createArray(2)
arrArray1 = ["Cat",2]
数组连接
Example
arrArray1 = createArray(1)
arrArray1[0] = 1.1
arrArray2 = createArray(2)
arrArray2[0] = "Dog"
arrArray2[1] = 9
arrMyArray = arrArray1 + arrArray2
The contents of arrMyArray are [1.1,Dog,9].
多维数组
Example 1
arrArray1 = createArray(2)
arrArray1[0] = 1.1
arrArray1[1] = "Dog"
arrArray2 = createArray(2)
arrArray2[0] = "0"
arrArray2[1] = "1"
arrNewArray = createArray(2)
arrNewArray[0] = arrArray1
arrNewArray[1] = arrArray2
//The contents of arrNewArray are [[1.1,Dog],[0,1]].
Example 2
arrArray1 = createArray(2)
arrArray1[0] = 1.1
arrArray1[1] = "Dog"
arrArray2 = createArray(2)
arrArray2[0] = "0"
arrArray2[1] = arrArray1[]
//The contents of arrArray2 are [0,[1.1,Dog]].
数组长度
length = arrArray1.length
填充数组
Example
arrArray1 = createArray(3)
arrArray1 = ["Cat",2,1.1]
arrArray1[0] = "Dog"
//The contents of arrArray1 are ["Dog",2,1.1].
从数组中获取值
•< array > [ < index > …]
返回处的数组元素。
•< array > [ < startIndex > …]
返回包含原始数组元素子集的辅助数组。元素子集从开始,一直到数组的最后一个元素。
•< array > [ < startIndex > … < finishIndex > ]
返回包含原始数组元素子集的辅助数组。元素子集从开始,包含小于等于的元素。
Example:
arrArray1 = createArray(4)
arrArray1 = ["Cat",2,1.1,"Dog"]
animalType = arrArray1[0]
moreValues = arrArray1[1..]
lastValues = arrArray1[2..3]
The variable animalType is a String, Cat.
The contents of moreValues are [2,1.1,“Dog”].
The contents of lastValues are [1.1,“Dog”].
集合
list = list()
list.add(1)
list.add(2)
printAll(list)
list2 = class java.util.ArrayList()
list2.add(11)
list2.add(22)
printAll(list2)
vec = vector()
vec.add("V1")
vec.add("V2")
printAll(vec)
htOne = hashtable()
htOne.put("Length", 10.12)
htOne.put("Width", 11.45)
htOne.put("Height", 34.23)
printAll(htOne)
ht2 = class java.util.HashMap()
ht2.put("Length2", 10.12)
ht2.put("Width2", 11.45)
ht2.put("Heigh2t", 34.23)
printAll(ht2)
数据类型
数据类型概述
以下数据类型在Process Designer脚本语言中可用。声明基元变量时,它将转换为相应的基元对象。
例子:
在声明中:
a=1
a转换为
Java.Lang.Integer.a
数据类型转换
可以使用Java方法转换基元类型,例如:
•toString()
•toHexString()
•toOctalString()
•toCharArray()
•toBinaryString()
•doubleToLongBits()
•floatToIntBits()
此外,还有许多函数和方法允许您转换数据类型:
•stringToInt()
•stringToDouble()
•stringToBoolean()
•stringToBigDecimal()
表达式
变量声明
变量不必声明。当解释器读取赋值语句时,变量会在其作用域内自动创建,并且可以绑定到任何类型的对象。
Example 1
newBoolean = true
newChar = 'A'
newString = "abc123"
newInt = -1
newDouble = 4.2345e+3
newNull = null
获取子字符串
可以从字符串中检索子字符串。
<string>[<index>]
<string>[<startIndex><endIndex>]
Example 1
w = "123456"
charOne = w[1]
变量charOne的值是2。
Example2
w = "123456"
nextString = w[1..]
anotherString = w[1..3]
变量nextString是字符串值23456。
变量anotherString是字符串值234。
instanceof
您可以使用instanceof来确定对象是否是某个类的实例。
instanceof
如果是的实例,则返回true,否则返回false。
Example
bool = "Hello" instanceof class java.lang.String
The variable bool is true: "Hello" is a String.
条件流
- if-else
newArray = [1, 2, 3]
if (newArray.length > 5){
arraySize = "Large"
} else if (newArray.length > 4){
arraySize = "Medium"
} else {
arraySize = "Small"
}
- foreach
sum = 0
vec = vector()
vec.addElement(1)
vec.addElement(2)
vec.addElement(3)
foreach i (vec.elements()) {
sum = sum + i
}
- while
sum = 5
while (sum > 0){
sum = sum - 1
}
1.1.4. for
j = 0
for (i = 0; i < 5; ++i){
j = j + i
}
- switch
month = 8
switch (month) {
case 1: println("January"); break
case 2: println("February"); break
case 3: println("March"); break
case 4: println("April"); break
case 5: println("May"); break
case 6: println("June"); break
case 7: println("July"); break
case 8: println("August"); break
case 9: println("September"); break
case 10: println("October"); break
case 11: println("November"); break
case 12: println("December")
}
- break
for (i = 0; i < 5; i++){
if (i == 2){
break // exits the loop when i = 2
}
println(i)
}
- continue
for (i = 0; i < 5; i++){
if (i == 2){
continue
}
println(i)
}
- return
使用return语句终止当前脚本(事件)
通过使用获取值的返回形式,可以向调用事件/函数的语句返回值
return < expression >
不带的return等价于return null。