3.8动作流的表达式语法


3.8.1基本运算符

+,-,*,/,%,!,~,==,!=,>,>=,<,<=,>>>,>>,<<,^,&,|,&&,||

赋值运算符只有两个::=和+=。

注意,这里是“:=”这样可以避免在判断相等的地方错误的写成赋值。

三目运算符:1 > 2 ?"a" : "b"

删除操作:delete,如:

delete $map.name或 delete $list[2]

另外,//和/* … */为注释。

3.8.2基本对象

字符

'a','\''

字符串

"abc","a\n\"b\""

整型

123,-1,0xff

长整型

1L,0x100L

浮点型

0.1,3.14d,1.1e3

列表(list)

{1, 2, 3}

或list@{1, 2, 3}

集合(set)

set@{1, 2, 3}

映射(map)

map@{a:1, b:2, c:3}

3.8.3变量

变量是以“$”起始的名称,如$name,$sex。

对变量的属性可以有以下几种访问方式,“.”和“[…]”,如:

$map.name,$map[$key],$map.list[$num],$list[0]。

注意,以两个“$”起始的为全局变量,如:$$flag。在一次请求中里的所有流程中都有效,请谨慎使用。

其他可引用的变量:

param,当前请求的参数集合,如:param.loginName。

attr,当前请求对象中的属性集合。

header,当前请求对象中的头信息集合。

cookie,当前请求对象中的cookie信息集合。

custom,平台中的预定义信息,如:

custom.currentDate,当前日期

custom.currentUserId,当前登录用户编号

3.8.4基本操作

link,将多个参数连成一个字符串

link('a', 1, 2, 3) =>"a123"

sub,取子对象

sub("12345", 3) =>"45"

sub({"a", "b", "c"}, 0, 2) => {"a", "b"}

split,分割字符串

split("a,b,c") => {"a", "b", "c"}

split("a.b.c", ".") => {"a", "b", "c"}

indexOf,在字符串或列表中查找指定字符或对象的索引值

indexOf("a,b,c", ',') => 1

indexOf("a,b,c", ',', true) => 3

indexOf("a,b,c", ',', 2) => 3

indexOf("a,b,c", ',', 2 true) => 1

indexOf({"a", "b", "c", "b"}, "b") => 1

indexOf({"a", "b", "c", "b"}, "b", true) => 3

charAt,获取指定位置的字符

charAt("abc", 1) =>'b'

length,获取字符串或集合的长度

length("abc") => 3

length({1, 2}) => 2

length(map@{}) => 0

isEmpty,判断对象是否为空

isEmpty(null) => true

isEmpty("") => true

isEmpty("") => false

isEmpty(map@{}) => true

contains,集合中是否包含指定的对象

contains(set@{"a", "b", "c"}, "b") => true

contains(set@{"a", "b", "c"}, "d") => false

contains(map@{a:1, b:2}, "b") => true

throw,抛出一个异常

throw($ex) =>抛出变量“$ex”中的异常

throw("a") =>抛出一个信息为“a”的异常

throw("a", "java.lang.IllegalArgumentException")

=>抛出一个信息为“a”的IllegalArgumentException异常

format,对数字或日期进行格式化

format(1000, "#,##0.00") => 1,000.00

format($date, "yyyy") => 2015

toIterator,将一个列表转换成迭代器

toIterator({1, 2}) => Iterator

toIterator(map@{a:1, b:2}) => map enrty Iterator

toIterator(map@{a:1, b:2}, true) => map key Iterator

toInt,转整型

toLong,转长整型

toDouble,转浮点型

toString,转字符串

toList,转列表

toList(数组) => List

toList(map@{a:1, b:2}) => map value List

toSet,转集合

toSet (数组) => Set

toSet(map@{a:1, b:2}) => map key Set

toDate,转日期

toDate("2015-11-24") =>日期

toDate("20151124", "yyyyMMdd") =>日期

toDate("20151124183000", "yyyyMMddHHmmss") =>日期时间

toDatetime,转日期时间

toDatetime("2015-11-24 18:30:00") =>日期时间

isBoolean,是否为布尔型

isNumber,是否为数字,整型、浮点型等

isString,是否为字符串

isDate,是否为日期或日期时间

isMap,是否为映射对象(map)

isList,是否为列表对象(list)

isSet,是否为集合对象(set)

isArray,是否为数组

hasNext,迭代器(Iterator)对象中是否有下一个

next,获取迭代器(Iterator)对象中的下一个值

first,获取列表、集合、数组等对象中的第一个值

first({1,2}) => 1

first("123") =>"123"

entryKey,获取Map.Entry中的key

entryValue,获取Map.Entry中的value

merge,将第二个对象中的数据合并到第一个对象中

merge({1, 2}, {3, 4, 5}) => {1, 2, 3, 4, 5}

merge({1, 2}, 3, 4, 5) => {1, 2, 3, 4, 5}

merge(map@{a:1}, map@{b:2}) => map@{a:1, b:2}

merge(map@{a:1}, "b", 2) => map@{a:1, b:2}

3.8.5特殊操作

特殊操作是基于基本操作的扩展,主要扩展了两个功能。

1.调用流程干预类中的公共方法

invoke_[方法名](参数…)

如:invoke_doService($a, {1, 2, 3})

2.获取干预类中的公共静态变量

static("[变量名]")

如:static("MAX_VALUE")

3.调用spring对象中的方法

spring$[beanId]$ [方法名](参数…)

如:spring$myService$doSomeThing("id", -1)

注:使用的spring对象必须是单例模式的

3.8.6优化建议

为了提高表达式的运行效率,对于引用路径较长的变量,如果需要多次使用,请定义成变量再使用。如:

$tmp.names[1].activeTime + $waitTime > $tmp.names[1].deadTime

应改为:

$tmpObj := $tmp.names[1]

$tmpObj.activeTime + $waitTime > $tmpObj.deadTime

对于常量运算,请放在前面。如:

$i := $tmp * 60 * 60 * 1000

应改为:

$i := 60 * 60 * 1000 * $tmp

$i := $tmp * (60 * 60 * 1000)

对于常量对象,即定义后只是读取,而不会再修改的对象,可以加上const标记为常量。如:

$dic := const {map@ student:1,teacher:2,staff:3}

results matching ""

    No results matching ""