如何使用轻分析控件并修改其取数逻辑原创
金蝶云社区-技术支持与赋能部_ZH
技术支持与赋能部_ZH
6人赞赏了该文章 4479次浏览 未经作者许可,禁止转载编辑于2022年04月15日 13:43:57

关键词:插件开发,轻分析

一、需求背景

轻分析是苍穹标准支持的数据分析平台。本篇文章旨在介绍如何通过插件调取轻分析控件,如何通过插件修改轻分析取数逻辑。

如轻分析中某些数据属于敏感信息需要针对不同的用户展示不同的信息,亦或者需要对数据源的数据进行二次处理再展示到前台等这些操作无法通过配置完成,这个时候我们需要开发轻分析插件来实现。

 

备注:想了解轻分析使用方法可以去苍穹社区搜索相关文档本篇不做赘述。


二、思路与方案

首先通过轻分析取数插件,获取轻分析数据,通过拿到过滤条件可以重新定义取数逻辑,然后通过报表插件通知轻分析控件重新取数

三、实现过程

1、创建一张报表

1.png


2、配置过滤面板,插入轻分析控件

2.png

3、页面注册报表插件

3.png

4、配置轻分析取数插件

4.png

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

四、实现效果

设计器:

5.png

初次取数效果:

6.png

选择筛选条件后效果:

7.png

五、开发环境版本­­­­

4.0.012.0

六、参考资料

【开发平台】指导手册

学习成长中心

 


源码.rar(2.42KB)

赞 6