<< Click to Display Table of Contents >> 定制数据集复制链接 |
1.概述
定制数据集提供给客户更加自由灵活的操作方式,完全由用户自己定义数据集条件和选择数据来源,因此它也是现有数据集类型里面对于客户技术要求最高的。用户在使用 Yonghong Z-Suite 之前已经建立好自己的数据集系统,并和自己的数据系统深度绑定,因此不需要重新定义数据集机制。定制数据集正好满足此类用户的需求,可以将自有的数据集系统与 Yonghong Z-Suite 快速绑定。
在建立新的定制数据集的时候,提供g5.qry.GCustomQuery 类接口给用户,帮助他们通过 Java 编程的方式与自己原有数据集系统进行绑定。 通过继承 Query 的方式, Yonghong Z-Suite 可以返回用户自定义的数据集结果。另外当用户希望直接从数据库获取原始数据而不使用数据集功能的时候,定制数据集也可以帮助用户完成此类操作。
定制数据集具有联合数据集功能,可以将多张表单的数据集结果链接在一起,同时支持不同数据库类型。定制数据集在技术方面要求较高,需要用户自定义java 文件。
2.创建定制数据集
点击数据集页面左侧顶部的图标,进入新建数据集页面。点击定制数据集进入创建页面。
3.编辑定制数据集
在类名中填入所需的开发的定制查询完整类路径,例如com.yonghongtech.query.CustomQuery,然后刷新数据保存即可。
3.1 相关的类和接口
•g5.qry.GcustomQuery
开发定制查询首先需要继承这个类。然后需要实现以下方法。
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。
3.2 样例代码
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方法可以不做改动,只需要实现其他三个方法即可。
3.3部署测试
•部署
将程序编译成class文件,放入C节点的classpath目录下,然后重启BI服务。配置热加载目录,也可以不用重启BI服务器,参考热加载章节。
•测试
创建一个定制数据集后,填写正确的类名,刷新数据,预览数据均正常不报错即可。