系统变量
不同用户登录系统之后,用户的一些相关数据是不相同的,比如:用户ID、用户角色、用户组织等。我们把这些随用户而变化的这些数据统称为系统变量。
1.1 使用场景
系统变量的主要使用场景就是过滤数据,具体场景如下:
- 在数据源上设置数据过滤,实现数据行权限的控制;
- 在字符型字段的过滤条件中使用系统变量进行过滤;
- 在SQL数据集中引用系统变量;
- 在字符型字段的过滤条件中设置下拉列表绑定系统变量;
1.2 扩展方法
每一个系统变量都对应后台的一个接口,接口会根据用户返回用户对应的信息数据。DataViz默认提供了用户ID和用户组织ID等几个系统变量, 但是并不能覆盖现实中所有的情况,所以我们提供了接口,可以通过接口扩展更多的系统变量。
1.2.1 基础接口
系统变量的前三种使用场景,只需要实现基础接口即可。
接口名称:com.neusoft.saca.dataviz.common.system.variable.SystemVariableSerializable
1.2.1.1 getValue方法
getValue方法,获取系统变量的值
public T getValue(Map<String, Object> params);
传入的参数params为Map
返回值的类型根据实际情况可以为一个List或者单个值,可以自行确定。
示例代码如下:
public class OrgCode implements SystemVariableSerializable<Object> {
private static final long serialVersionUID = -2320305342310282567L;
@Override
public Object getValue(Map<String, Object> params) {
String userId = (String) params.get(PARAM_USERID);//当前登录用户的ID
if (userId == null) {
return null;
}
String orgcode="0001";//获取组织code
return orgcode;
}
}
1.2.1.2 配置修改
除了扩展接口还要修改系统变量的配置文件dataviz-service\WEB-INF\conf\system-variable.yaml, 按照如下格式添加系统变量即可。
- name: 系统变量ID
caption: 系统变量描述
className: 获取系统变量值的实现类名称
dataType: 系统变量数据类型
- 其中name和caption的值都不可与其他的系统变量重复,配置之后一经在系统中使用过,就再也不能随意修改。
- dataType的值是数字,分别为:1表示字符类型,2表示数值类型,3表示时间类型,11表示字符类型列表。
示例配置如下:
- name: orgcode
caption: 所属组织code
className: com.neusoft.saca.dataviz.demo.sysvariable.OrgCode
dataType: 1
1.2.2 进阶接口
系统变量的第四种使用场景,还需要实现进阶接口。
接口名称:com.neusoft.saca.dataviz.data.engine.evaluator. ListFilterValues
1.2.2.1 getValueList方法
getValueList方法,获取系统变量的下拉列表
public abstract List<StringFilterValue> getValueList(Map<String, Object> params);
传入的参数params为Map
示例代码如下:
public class OrgIds implements SystemVariableSerializable<Object>,ListFilterValues {
private static final long serialVersionUID = -2320305342310282567L;
private OrgService orgService = ContextLoader
.getCurrentWebApplicationContext().getBean(OrgService.class);
@Override
public Object getValue(Map<String, Object> params) {
String userId = (String) params.get(PARAM_USERID);
if (userId == null) {
return Collections.emptyList();
}
List<String> orgIds = this.orgService.getOrgIdsByUserId(userId);
return orgIds == null ? Collections.emptyList() : orgIds;
}
@Override
public List<StringFilterValue> getValueList(Map<String, Object> params) {
String userId = (String) params.get(PARAM_USERID);
if (userId == null) {
return Collections.emptyList();
}
List<OrgBO> orgs = this.orgService.getOrgListByUserId(userId);
List<String> orgIds = new ArrayList<String>();
List<StringFilterValue> list = new ArrayList<StringFilterValue>();
for (OrgBO org : orgs) {
if(!orgIds.contains(org.getId())){
orgIds.add(org.getId());
list.add(new StringFilterValue(org.getId(), org.getName()));
}
}
return list;
}
}
1.2.2.2 配置修改
配置方法与普通配置相同,不过dataType的值要设置为10,表示字符类型列表,并且实现了进阶接口。
示例配置如下:
- name: orgids
caption: 所属组织ID
className: com.neusoft.saca.dataviz.system.sysvariable.OrgIds
dataType: 10