变量的定义
在资源中心变量管理目录下,可以通过新增资源创建新变量。
定义一个变量需设置的属性包括:变量ID、变量值类型、变量计算时间、变量值计算脚本/表达式。如下图:
设置完成后,点击保存即可将新建的变量保存为资源,如下图:
下面详细说明变量定义的各项属性设置。
变量ID
每个变量的唯一标识,不允许重复,变量的调用是通过唯一的变量ID来实现。
变量ID需要遵循命名规范:不能包含特殊字符,由英文字母、数字和下划线组成。
变量值类型
根据变量值的计算方式,包括以下几种类型:
- 值:即固定值,无需计算直接作为变量的结果值
- 表达式:变量值由设置的表达式动态计算得到,可以使用脚本或变量来编辑表达式,表达式的具体编辑可参考下文中【变量值计算表达式设置】和【变量值计算脚本设置】两小节的说明
- 自定义类:基于接口自定义一个变量值计算的实现类,根据自定义类中的逻辑设定完成变量值的计算。
变量计算时间
设置变量的计算时间:系统启动时计算、用户登录时计算、引用时计算三种。
可以根据实际业务场景的需要,设置变量计算时间。例如系统全局使用的共享变量,则可以设置为启动时运算;与用户身份信息相关的变量,则可以设置为登录时计算。
变量只有经过计算后,才能将变量值保存在系统中,以供引用。
变量值计算脚本/表达式
变量值计算表达式的设置,需要与变量类型对应:
- 变量类型为“值”时,此处设置的内容即为变量的值
- 变量类型为“表达式”时,此处设置变量值计算的表达式或脚本
- 变量类型为“自定义类”时,此处设置实现类的类名。
变量值计算表达式设置
变量类型为“表达式”时,可以直接使用表达式实现动态的变量值计算:
- 支持产品中所有的取值表达式,即只要在报表单元格中能够执行的表达式都可以在这里进行使用
- 表达式中还可以调用其它变量
示例:
if("销售经理" in list(query2("mis2datasource","select t_role.role_name from t_role,rt_roleuser where t_role.role_id=rt_roleuser.role_id and rt_roleuser.user_id=?",var(sys,sys_UserID))),"销售管理","销售人员")
上面的变量值计算表达式中,使用了报表本身支持的if函数、list函数、query2函数。此外还通过变量管理的var函数调用了系统变量sys_UserID。
函数var( stringExp )说明
该函数用于在变量值计算表达式中调用其他变量。
参数说明:
- stringExp - 调用变量的ID
返回值:变量的值
变量值计算脚本设置
变量类型为“表达式”时,变量值计算表达式还支持使用脚本。
脚本是表达式的一种,增强了表达式的设置,能够让变量值的计算方式更加灵活,并且具有更易读的写法。
脚本语句
脚本语句是脚本的基本单位,其语法如下:
$内部变量名 = 表达式;
例如下面的脚本语句,表示将等号右侧表达式的计算结果赋值给等号左侧的内部变量rolequery :
$rolequery = query2("mis2datasource","select role_id from rt_roleuser where user_id=?",var(sys_UserID));
注意:
- 在脚本语句中,符号$表示声明了一个仅在脚本中使用的内部变量,不能被外部调用
- 在脚本语句中可以通过表达式计算得到内部变量的值
- 已声明的内部变量可以被后面的脚本语句调用
注释
在脚本中还可以添加注释语句。
注释语句以符号//开头,不需要以分号结尾,且不允许换行。
示例:
//本脚本生成人员的类型
脚本的执行
变量值计算脚本中可以书写多条脚本语句,其书写与执行规则如下:
- 需按顺序书写脚本语句,执行时亦按照脚本语句的先后顺序执行
- 多句脚本之间用英文分号;分隔
- 每一条脚本语句,可以换行书写,最终以分号;结尾标志一个语句结束,引号内部的;号不被认为是语句结束标志
- 脚本的最后一行语句,必须使用“$result=表达式n;”的固定写法,生成最终的变量值
例如,一个包含多条语句的变量值计算脚本,其整体结构如下所示:
$内部变量1=表达式1;
$内部变量2=表达式2;
...
$result=表达式n;
脚本示例
以下提供了一段完整的脚本示例:
$rolequery = query2("mis2datasource","select t_role.role_name from t_role, rt_roleuser where t_role.role_id = rt_roleuser.role_id and rt_roleuser.user_id=?",var(sys_UserID));
$cndsalesmgr="销售经理" in list($rolequery);
$nonsalesmgr=if ("销售" in list($rolequery), "销售代表", "其他");
//返回变量值计算结果:$result = if($cndsalesmgr, "销售经理", $nonsalesmgr);