创建定制数据集

<< Click to Display Table of Contents >>

当前位置:  创建数据集 > 定制数据集 

创建定制数据集

Previous pageReturn to chapter overviewNext page

说明:适用于V6.0至当前版本。

1)点击 Yonghong Z-Suite 产品的启动快捷方式。

2)打开浏览器, 然后在地址栏中输入 http://hostname:8080/bi/Viewer, 登陆到客户端。这里的 hostname 是你的 IP 地址,如果是本机访问,可以用 localhost。 8080 是默认端口号,如果在安装产品时修改了默认的端口号,请采用正确的端口号。

3)输入用户名和密码后登陆到主页面。

4)单击导航栏 -> 新建数据集,进入到创建数据集的界面。点击页面上“定制数据集”选项,即可打开定制数据集界面。

custom1

用户也在数据集模块中,点击菜单栏上的新建按钮,选择定制数据集,即可打开定制数据集界面。

clip0278

定制数据集界面:

clip0279

5)在类名中填你所开发的定制查询完整类路径,例如com.yonghongtech.query.CustomQuery,然后刷新元数据保存即可。

 

相关的类和接口

g5.qry.GcustomQuery

开发定制查询首先需要继承这个类。然后需要实现3个方法。

1、public DataGrid exec(QCol[] qCols, QContext qContext)

该方式实现自己的逻辑,然后将数据存放到QGrid中并返回。

2、public QCol[] metaCols(QContext qContext)

创建QCol数组,存放所有字段。

3、public Query createRuntime(QContext qContext)

return this即可

4、public boolean isDynamic()

当字段个数不固定的时候需要override该方法,并返回true。

5、构造方法

当需要通过构造方法传一些参数时可以另外写一个构造方法,此时定制查询的“类名”中需要在类名后填写<参数>,多个参数则用逗号隔开,不许有空格,例如:

com.yonghongtech.query.MongoZhiwenOffers<true,false>

 

g5.DataGrid

用来储存数据,是一个接口,开发定制查询的时候一般用QGrid。

public void add(int c, Object obj)

使用add方法将数据储存到QGrid中,最终返回。

 

g5.meta.QCol

表示查询的字段,QCol是一个接口,定制查询中可以使用g5.meta.BCol,

public BCol(String name, String view, byte dtype, boolean dim)

其构造方法的四个参数含义分别是:

name:字段名

view:别名

dtype:类型

dim:是否为维度

可根据实际需求选择正确的构造方法构造BCol。

 

样例代码

public class CQuery extends GCustomQuery {

  @Override

  public DataGrid exec(QCol[] qCols, QContext qContext) throws Exception {

     QGrid qgrid = create(qContext);

     MongoClient client = MongoUtil.getClient("zhiwen");

     FindIterable<Document> documents = MongoUtil.getAllDocument(client, "zhiwen", "offers");

 

     for(Document document : documents) {

        Object company = document.get("company");

        Object date = document.get("date");

        Object industry = document.get("industry");

        Object ownerId = document.get("ownerId");

        Object type = document.get("type");

        Object recommendation = document.get("recommendation");

        qgrid.add(0, String.valueOf(company));

        qgrid.add(1, date);

        qgrid.add(2, String.valueOf(industry));

        qgrid.add(3, String.valueOf(ownerId));

        qgrid.add(4, String.valueOf(type));

        qgrid.add(5, String.valueOf(recommendation));

     }

 

     client.close();

     qgrid.complete();

     return qgrid;

  }

 

  @Override

  public QCol[] metaCols(QContext qContext) throws Exception {

     return new QCol[]{new BCol("company", DType.STRING, true),

           new BCol("date", DType.DATE_TIME, true),

           new BCol("industry", DType.STRING, true),

           new BCol("ownerId", DType.STRING, true),

           new BCol("type", DType.STRING, true),

           new BCol("recommendation", DType.STRING, true)};

  }

 

  protected QGrid create(QContext context) {

     QCol[] cols = new QCol[0];

 

     try {

        cols = metaCols(context);

     }

     catch(Exception e) {

        e.printStackTrace();

     }

 

     String[] harr = new String[cols.length];

     byte[] sarr = new byte[cols.length];

 

     for(int i = 0; i < cols.length; i++) {

        harr[i] = cols[i].getView();

        sarr[i] = DynamicObjectSeg.getPreferredSeg(cols[i].getDType(), false);

     }

 

     return (QGrid) QGrid.create(harr, sarr, cols);

  }

 

  @Override

  public Query createRuntime(QContext qContext) {

     return this;

  }

}

其中create方法可以不做改动,只需要实现其他三个方法即可。

 

部署测试

部署

将程序编译成class文件. 然后按照不同的版本放到不同的目录下进行测试

版本

目录

6.0/6.1

tomcat/bi/WEB-INF/classes

7.0及以后

tomcat/webapps/bi/WEB-INF/classes

如果是7.0之前,则还需要修改tomcat/bin/setclasspath.sh(.bat)文件, 将上面的目录加入到classpath中,然后重启tomcat。

测试

创建一个定制数据集后,填写正确的类名,刷新元数据,预览数据均正常不报错即可。

 

完整程序