系统变量

  不同用户登录系统之后,用户的一些相关数据是不相同的,比如:用户ID、用户角色、用户组织等。我们把这些随用户而变化的这些数据统称为系统变量。

1.1 使用场景

  系统变量的主要使用场景就是过滤数据,具体场景如下:

  1. 在数据源上设置数据过滤,实现数据行权限的控制;
  2. 在字符型字段的过滤条件中使用系统变量进行过滤;
  3. 在SQL数据集中引用系统变量;
  4. 在字符型字段的过滤条件中设置下拉列表绑定系统变量;

1.2 扩展方法

  每一个系统变量都对应后台的一个接口,接口会根据用户返回用户对应的信息数据。DataViz默认提供了用户ID和用户组织ID等几个系统变量, 但是并不能覆盖现实中所有的情况,所以我们提供了接口,可以通过接口扩展更多的系统变量。

1.2.1 基础接口

  系统变量的前三种使用场景,只需要实现基础接口即可。

接口名称:com.neusoft.saca.dataviz.data.engine.evaluator. SystemVariableSerializable
所在包:dataviz-lib-data.jar             

1.2.1.1 getValue方法

getValue方法,获取系统变量的值

public T getValue(Map<String, Object> params);

  传入的参数params为Map类型,其中包含当前登录人的ID,可以通过params.get(PARAM_USERID)获取。
     返回值的类型根据实际情况可以为一个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: 系统变量数据类型
  1. 其中name和caption的值都不可与其他的系统变量重复,配置之后一经在系统中使用过,就再也不能随意修改。
  2. 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 所在包:dataviz-lib-data.jar

1.2.2.1 getValueList方法

getValueList方法,获取系统变量的下拉列表

public abstract List<StringFilterValue> getValueList(Map<String, Object> params);

  传入的参数params为Map类型,其中包含当前登录人的ID,可以通过params.get(PARAM_USERID)获取。      返回一个固定格式的列表。

示例代码如下:

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 null;
        }

        List<String> orgIds = this.orgService.getOrgIdsByUserId(userId);

        return orgIds;
    }

    @Override
    public List<StringFilterValue> getValueList(Map<String, Object> params) {
        String userId = (String) params.get(PARAM_USERID);

        if (userId == null) {
            return null;
        }

        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

results matching ""

    No results matching ""