Skip to content

第5章 表达式

本模块介绍了织信的表达式的进行具体的讲解,并介绍表达式的规范。

5.1 概述

织信采用UEL(统一表达式语言)语法的表达式,UEL在语法和语义上类似于JavaScript表达式:

  • 无需类型转换;转换通常是隐式的完成
  • 双引号和单引号在UEL中使用方式相同,这种一致性增强了代码的可读性和易用性。
  • UEL中的object.propertyobject['property']具有相同的含义,这种灵活性使得在访问对象属性时更加方便,可以根据具体情况选择更合适的方式。
  • 在${}之外的部分会按照字符串的形式返回

5.2 表达式使用方式

5.2.1 基本使用

表达式中使用不同的参数类型的使用:

  • 直接返回整个参数:${args}
  • 返回对象类型参数中的某个属性:${object.name}
  • 返回数组类型中的某个数值:${array[0]}

5.2.2 组合使用

  • 使用多个${}拼接: ${String.upper('abcd')}-${String.lower('ABCD')}
    • 上述表达式输出内容是:ABCD-abcd
  • 在一个${}中嵌套方法:${String.contains(String.upper('aaaaa'),'AAAAA')}
    • 上述表达式输出内容是:true

5.3 类型返回

表达式可以直接声明并返回变量

js
${ true }// 表达式返回true
${ false }//表达式返回 false
${ 1 }//表达式返回 数字1
${ '123' }//表达式返回 字符串123
${[1,2,3]}//表达式返回整数数组
${['str1','str2','str3']}//表达式返回字符串数组
${ {"prop1":1,"prop2":"str"}}//表达式返回对象
${ [{"name","item1"},{"name","item2"}]}//表达式返回对象数组

5.4 表达式中的运算符

  • 运算: +(加法), - (减法), *(乘法), /(除法), %(取模)
  • 逻辑: &&(并且), ||(或者), !(取反)
  • 关系: ==(等于), !=(不等于), <(小于), >(大于) <=(小于等于), >=(大于等于)
  • 空值: null(空值)
  • 条件判断: A ? B : C, 返回 B or C, 如果A为true 返回B,否则返回C

注意:在除法操作中,如果除数是0的话会抛出异常

5.5 字符串拼接

织信中的表达式分为在客户端执行和在服务器端执行两种情况,在客户端执行时可以在表达式中使用+可以将字符串和任意对象拼接为新的字符串,例如:

js
${'123'+'456'} //返回'123456'
${'123'+4567} //返回'123456'
${'a'+4567} //返回'a4567'
${1+''+2} //返回'12'

在服务器端执行时不支持使用+字符串拼接,如:

js
${'123'+'456'} //返回'579'

如果需要执行字符串拼接需要使用String.concat(s1,s2)

js
${String.concat('123','456')} //返回'123456'

5.6 表达式中的保留关键字

表达式中的保留关键字不可作为变量名:

js
and、or、not、truefalsenull、empty、div、mod、in、matches、eq、ne、lt、gt、le、ge、class

5.7 函数调用

织信提供了Math, Array, Date, Misc, String, User, Encode, Record等对象来处理关于数学运算、数组、日期等方面的函数运算。函数调用过程如果发生异常,系统会回滚当前事务。以下是一个函数调用的示例

js
${Math.abs(-100)}//返回100

平台支持的函数列表如下:

函数名
描述
用法
数组集合相关函数
Array.方法名(args)
日期运算相关函数
Date.方法名(args)
数学运算函数
Math.方法名(args)
字符串相关函数
String.方法名(args)
用户相关函数
User.方法名(args)
数据表相关函数
Record.方法名(args)
上下文相关函数
Context.方法名(args)
工具函数
Misc.方法名(args)
字符串编解码相关函数
Encode.方法名(args)

5.8 运行服务器端和客户端的区别

界面区分: 在表达式编辑窗口的标题栏会有一个标签注明运行环境
客户端环境: 客户端环境 服务端环境: 服务毒环境

功能差异:

  • 客户端是在浏览器页面进行操作,只能对页面上数据的和上下文中的参数进行操作
  • 服务端运行的表达式,可以通过提供的方法去获取数据表模块的数据进行操作,但无法访问客户端的上下文参数。

函数调用差异

  • 在客户端执行的表达式能调用平台提供的函数方法只支持集合、字符串、字符编码、数字、日期、Misc其他、国际化和上下文Context这8种。
  • 在服务端执行的表达式能调用平台提供函数有集合、字符串、字符编码、数字、日期、Misc其他、用户、上下文Context和数据表记录这9种。

5.9 案例讲解

5.9.1 从列表中过返回key是name的数据集合

js
${Array.map([{'name':'张三','age':21}, {'name':'李四','age':18}, {'name':'王五','age':23}], 'name')}

结果是: [张三, 李四, 王五]

5.9.2 将两个集合拼接起来

js
${Array.concat([1, 2, 3], [2, 3])}

结果是: [1,2,3,2,3]

5.9.3 返回日期中指定部分的数据

js
${Date.datePart('2023-11-01 13:10:12', 'year')}

结果是:2023

5.9.4 对数字四舍五入保留2位小数

js
${Math.round(3.1415926, 2)}

结果是:3.14

5.9.5 讲字符串Informat和字符串织信拼接

js
${String.concat('Informat', '织信')}

结果是:Informat织信

5.9.6 将时间戳按照指定格式转换为字符串

js
${Misc.formatDate(1667278861000,'yyyy-MM')}

结果是:2022-11

5.9.7 将字符hello world进行md5加密

js
${Encode.md5('hello world')}

结果是:5eb63bbbe01eeed093cb22bb8f5acdc3