目录

刷新

功能用途说明

“实时数据刷新”特殊效果,轻松实现在报表中局部刷新某块内容的动态效果。

配置项说明

名称

增强控件标识。与其他增强控件不同,允许多个单元插入刷新效果时使用相同的名称标识。这是因为,一个页面中可能存在若干个不连续区域需要实时刷新,但是这些不连续的区域又是从同一个数据来源获取数据,这种情况应将这多个区域同步刷新。请参考下文【示例1】。

此项为必填项。

行列数

行数、列数用于标记此刷新效果控制的区域,刷新区域的根坐标为当前单元格。例如,B4单元格设置刷新效果,行数为2,列数为3,此处定义为扩展前的行列数量,报表运算时会随着扩展复制行列。则[[B4,C4,D4],[B5,C5,D5]]几个单元格为一个刷新区域。请参考下文【示例1】

此项为必填项。

刷新频率

自动更新时间间隔,单位为毫秒。默认为0,不自动更新,仅在没加载完成时执行一次更新。

此项为必填项。

数据来源

刷新时,根据数据来源获取数据。

通过一个JSON字符串来描述数据来源信息。刷新时,通过这里配置的数据来源来获取数据。

首先,定义数据来源的类型。类型可选的值有:当前报表、其他报表、SQL查询、公有数据集、自定义。

然后,需要根据类型的不同设定附加其他配置:

最后,添加“参数”配置。参数:用于为数据来源设置参数,不论是那种类型数据来源,都支持设置参数。例如:类型为“其他报表”时,可以附加“参数”:{area:"华北"},给报表传递参数,等效于访问报表时的URL参数。

参数值的取值有以下三种方式:

示例1:

1)一个报表中多个刷新效果使用相同的名称

2)刷新行数和列数定义的区域


 

 

示例2:

数据来源设置为自定义类

{type:"custom", class:"com.test.RandomRefreshDataGenerator"}

 

实现自定义类(实现com.geezn.view.effects.IRefreshDataGenerator接口)

public class RandomRefreshDataGenerator implements IRefreshDataGenerator { public JSONObject generate(Map<String, Object> params) throws GeeznException {
  JSONObject refreshDataObject=new JSONObject();
  JSONObject cells = (JSONObject) params.get("cells");
  String[] cellIDs = JSONObject.getNames(cells);
  for (String cellID : cellIDs) {
   try {
    JSONObject source = cells.getJSONObject(cellID);
    int rowCount = Integer.parseInt( source.has("row")?String.valueOf(source.get("row")):"1");// 随机数默认取一行
    int colCount = Integer.parseInt(source.has("col")?String.valueOf(source.get("col")):"1"); // 随机数默认取一列
   
    JSONArray colModel = source.has("colModel") ? source.getJSONArray("colModel") : new JSONArray();
    Object[][] randomDataSet = new Object[rowCount][colCount]; // 数据。第一行为列名
    for (int c = 0; c < colModel.length() && c<colCount; c++) {
     JSONObject model = colModel.getJSONObject(c);
     String name = model.getString("name");
     String dataType = model.has("dataType") ? model.getString("dataType") : "number";
     if("number".equalsIgnoreCase(dataType)){
      // 数值类型:
      int min = Integer.parseInt(model.has("min") ? model.getString("min") : "0");
      int max = Integer.parseInt(model.has("max") ? model.getString("max") : "1");
      int precision = Integer.parseInt(model.has("precision") ? model.getString("precision") : "2");
     
      NumberFormat format = NumberFormat.getNumberInstance();
      format.setMaximumFractionDigits(precision);
     
      for (int r = 0; r < randomDataSet.length; r++) {
       randomDataSet[r][c] = format.format(Math.random() * (max - min) + min);
      }
     
     }else if("string".equalsIgnoreCase(dataType)){
      // 字符串类型:
      JSONArray values = model.has("values") ? model.getJSONArray("values") : new JSONArray();
      for (int r = 0; r < randomDataSet.length; r++) {
       int randomIndex = Math.min((int) Math.round(Math.random() * values.length()), values.length()-1);
       randomDataSet[r][c] = values.get(randomIndex);
      }
     }
    }
   
    JSONArray rows = new JSONArray();
    for (int i = 0; i < randomDataSet.length; i++) {
     JSONArray row = new JSONArray();
     for (int j = 0; j < randomDataSet[i].length; j++) {
      row.put(randomDataSet[i][j]);
     }
     rows.put(row);
    }
    refreshDataObject.put(cellID, rows);
   } catch (NumberFormatException e) {
    e.printStackTrace();
   } catch (JSONException e) {
    e.printStackTrace();
   }
  }
  return refreshDataObject;
 }
}

该实现类实现了一个生产随机数的功能。即刷新时的数据为随机数。