<< Click to Display Table of Contents >> 创建定制数据集 |
说明:适用于V6.0至当前版本。
1)点击 Yonghong Z-Suite 产品的启动快捷方式。
2)打开浏览器, 然后在地址栏中输入 http://hostname:8080/bi/Viewer, 登陆到客户端。这里的 hostname 是你的 IP 地址,如果是本机访问,可以用 localhost。 8080 是默认端口号,如果在安装产品时修改了默认的端口号,请采用正确的端口号。
3)输入用户名和密码后登陆到主页面。
4)单击导航栏 -> 新建数据集,进入到创建数据集的界面。点击页面上“定制数据集”选项,即可打开定制数据集界面。
用户也在数据集模块中,点击菜单栏上的新建按钮,选择定制数据集,即可打开定制数据集界面。
定制数据集界面:
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。
•测试
创建一个定制数据集后,填写正确的类名,刷新元数据,预览数据均正常不报错即可。
❖完整程序