本文介绍了如何通过插件开发来调用和修改轻分析平台的数据处理逻辑。轻分析是苍穹标准的数据分析平台,当需要通过插件来实现某些无法通过配置完成的数据处理需求(如敏感信息差异化展示、数据二次处理等)时,本文提供了具体的实现思路和步骤。首先,通过轻分析取数插件获取数据,并根据过滤条件重新定义取数逻辑,然后通过报表插件通知轻分析控件重新取数。文章详细阐述了插件的实现过程,包括创建报表、配置过滤面板、注册报表插件、配置轻分析取数插件,并给出了关键代码段的解析,展示了如何定义表头信息和获取轻分析数据。
关键词:插件开发,轻分析
一、需求背景
轻分析是苍穹标准支持的数据分析平台。本篇文章旨在介绍如何通过插件调取轻分析控件,如何通过插件修改轻分析取数逻辑。
如轻分析中某些数据属于敏感信息需要针对不同的用户展示不同的信息,亦或者需要对数据源的数据进行二次处理再展示到前台等这些操作无法通过配置完成,这个时候我们需要开发轻分析插件来实现。
备注:想了解轻分析使用方法可以去苍穹社区搜索相关文档本篇不做赘述。
二、思路与方案
首先通过轻分析取数插件,获取轻分析数据,通过拿到过滤条件可以重新定义取数逻辑,然后通过报表插件通知轻分析控件重新取数
三、实现过程
1、创建一张报表
2、配置过滤面板,插入轻分析控件
3、页面注册报表插件
4、配置轻分析取数插件
5、代码解析(取数插件)
需要实现IQingDataProvider接口
实现getMeta方法,这个是定义轻分析表头的地方
实现getData,获取轻分析数据,通过拿到过滤条件可以重新定义取数逻辑
/** * 获取表头信息定义 * @param pageId 当前页面id */ @Override public QingMeta getMeta(String pageId) { // TODO Auto-generated method stub String entityKey = "testEntity"; QingMeta meta = new QingMeta(); EntryEntity entity = new EntryEntity(); entity.setKey(entityKey); entity.setName(new LocaleString("人员")); entity.setPkFieldName("id"); meta.addEntryEntity(entity); Field column = new Field(); column.setEntity(entityKey); column.setKey("name"); column.setFieldType(QingFieldType.String.toNumber()); column.setName(new LocaleString("名称")); meta.addColumn(column); column = new Field(); column.setEntity(entityKey); column.setKey("birthday"); column.setFieldType(QingFieldType.Date.toNumber()); column.setName(new LocaleString("生日")); meta.addColumn(column); column = new Field(); column.setEntity(entityKey); column.setKey("gender"); column.setFieldType(QingFieldType.String.toNumber()); column.setName(new LocaleString("性别")); meta.addColumn(column); return meta; }
/** * 获取轻分析数据 * @param pageId当前页面id * @param startRow起始行号 * @param limit每页的数据量 */ @Override public QingData getData(String pageId, int startRow, int limit) { // TODO Auto-generated method stub //拿过滤条件,进行取数 String params = getPageCache().get("qFilter"); QingData data = new QingData(); if(params==null) { if (startRow < 20 ) { Map<String, Integer> dataindex = new HashMap<String,Integer>(); dataindex.put("id", 0); dataindex.put("name", 1); dataindex.put("birthday", 2); dataindex.put("gender", 3); data.setDataindex(dataindex); List<Object[]> rows = new ArrayList<Object[]>(); for (int rowIndex = 0; rowIndex <20; rowIndex ++) { Object[] row = new Object[4]; row[0] = startRow + rowIndex; row[1] = "张三"+rowIndex; row[2] = System.currentTimeMillis() - RandomUtils.nextInt(1000*60*60*24*365*10); row[3] = RandomUtils.nextInt(100) % 2 == 0?"男":"女"; rows.add(row); } data.setRows(rows); } }else { JSONObject json = JSONObject.parseObject(params); String sale = (String) json.get("kdec_sale"); if(sale.equals("1")) { if (startRow < 10 ) { Map<String, Integer> dataindex = new HashMap<String,Integer>(); dataindex.put("id", 0); dataindex.put("name", 1); dataindex.put("birthday", 2); dataindex.put("gender", 3); data.setDataindex(dataindex); List<Object[]> rows = new ArrayList<Object[]>(); for (int rowIndex = 0; rowIndex <10; rowIndex ++) { Object[] row = new Object[4]; row[0] = startRow + rowIndex; row[1] = "张三"+rowIndex; row[2] = System.currentTimeMillis() - RandomUtils.nextInt(1000*60*60*24*365*10); row[3] = "男"; rows.add(row); } data.setRows(rows); } }else { if (startRow < 10 ) { Map<String, Integer> dataindex = new HashMap<String,Integer>(); dataindex.put("id", 0); dataindex.put("name", 1); dataindex.put("birthday", 2); dataindex.put("gender", 3); data.setDataindex(dataindex); List<Object[]> rows = new ArrayList<Object[]>(); for (int rowIndex = 0; rowIndex <10; rowIndex ++) { Object[] row = new Object[4]; row[0] = startRow + rowIndex; row[1] = "张三"+rowIndex; row[2] = System.currentTimeMillis() - RandomUtils.nextInt(1000*60*60*24*365*10); row[3] = "女"; rows.add(row); } data.setRows(rows); } } } return data; }
6、代码解析(报表插件)
需要继承AbstractReportFormPlugin
重写beforeQuery,获取前端过滤条件,放入到缓存中
重写afterQuery,通知轻分析控件重写取数
public void beforeQuery(ReportQueryParam param) { if (param != null) { Map<String, Object> paramMap = transQueryParam(param);//放到页面缓存中 getPageCache().put("qFilter", SerializationUtils.toJsonString(paramMap)); } super.beforeQuery(param); } public void afterQuery(ReportQueryParam queryParam) { super.afterQuery(queryParam); // 通知轻分析控件重新取数 IFrameMessage message = new IFrameMessage(); message.setType("reExtractData"); IFrame frame = (IFrame)getView().getControl("kdec_qinganalysisap"); frame.postMessage(message); }
四、实现效果
设计器:
初次取数效果:
选择筛选条件后效果:
五、开发环境版本
4.0.012.0
六、参考资料
源码.rar(2.42KB)