【内部或二开】星瀚合并报表:开发指导文档(20200924new)

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

【内部或二开】星瀚合并报表:开发指导文档(20200924new)

a)         读取报表表格数据

QFBuilder qf = new QFBuilder();

qf.add (“entity”,”=”,组织id);

qf.add (“fyear”,”=”,年id);

qf.add (“period”,”=”,期间id);

qf.add (“scene”,”=”,情景id);

qf.add (“currency”,”=”,币别id);

qf.add (“template.number”,”=”,模板编码);

qf.add (“model”,”=”,体系id);

DynamicObject  report = QueryServiceHelper.queryOne(FormConstant.FORM_RPTRECORD_ENTITY, “data”,qf.toArray());

if(report != null && report.getString(“data”) != null){

         SpreadManager sm = kd.fi.bcm.spread.domain.view.JsonSerializerUtil.toSpreadManager(report.getString(“data”));

         Sheet sheet = sm.getBook().getSheet(0);//报表只支持单个页签,直接取第一个

         sheet.getCell(r,c).getValue();//获取单元格值

         sheet.getCell(r,c).getFormula();//获取单元格公式

         …

kd.fi.bcm.spread.domain.view.Sheet.iteratorCells(Consumer<Cell>),sheet本身提供了很多遍历单元格的接口,还有cell有获取excel坐标的方法:kd.fi.bcm.spread.domain.Cell.getExcelAxis()

}

b)        查询多维数据可以参考参考如下方法:

1)kd.fi.bcm.business.serviceHelper.OlapServiceHelper.queryData(SQLBuilder)获取多维数据结果,这个结果集类似jdbc里面ResultSet,有个快捷方式直接转换成key-value的方式;kd.fi.bcm.business.sql.MDResultSet.asMap();

kd.fi.bcm.business.sql.MDResultSet.next() 多维数据结果集里也提供了遍历结果的方法

 

2)上面查询类的SQLBuilser是做了查询条件的封装,

SQLBuilder sql = new SQLBuilder(modelNum);//参数为体系编码,t_bcm_model表里的Fnumber

sql.addSelectField(selector_dim);//查询返回的维度字段,一般是当前体系的所有维度编码的数组

sql.addFilter(PresetConstant.AUDITTRIAL_DIM, auditTrailFilters);//过滤条件,这里设置了审计线索维度的过滤条件,第一参数为维度编码,第二个参数为维度成员过滤的数组,如果有更多维度过滤,则增加多条类似过滤设置该查询条件;

3)构造完成后,就可以调用OlapServiceHelper.queryData(SQLBuilder)获取多维数据结果。

 

Eg:

SQLBuilder sql = new SQLBuilder(“cube001”);//传入体系编码,bcm_model的number字段值

String[] dims = {“dim1”,”dim2”,”dim3”};//比如有三个维度,编码如数组里定义

sql.addSelectField(dims);

//设置dim1维度的成员过滤,dim001和dim002是维度dim1的成员。

sql. addFilter(“dim1”,new String[]{“dim001”,”dim002”});

MDResultSet rs = OlapServiceHelper.queryData(sql);

while(rs.next()) {//遍历数据

     String dim2Num = rs.getString(“dim2”);//获取维度dim2列信息,比如成员值dim2001

//获取多维数据值,如果非Number类型,最好获取原始值,在通过类型判断做处理。

//BigDecimal v = rs.getBigDecimal("FMONEY");

//获取原始值

Object v = rs.getOriginalValue("FMONEY");

}

 

Eg://解析spreadjson获取单元格值

//spreadjson 报表里面的spreadjson属性值

String ssjson=ObjectSerialUtil.uncompress(spreadjson);                       

JSONObject object = JSONObject.parseObject(ssjson);

JSONObject table= ((JSONObject) object.getJSONObject("sheets").values().iterator().next()).getJSONObject("data").getJSONObject("dataTable");

JSONObject rowData = table.getJSONObject("0");//第一行

JSONObject colData = rowData.getJSONObject(“2”);//第三列数据

if (colData == null) continue;

Object val = colData.get("value");

 

c)         多维数据存储

假设存在测试体系(编码:cube0001)有5维度:组织(Entity),财年(Year),期间(Period),币别(Currency),过程(Process),那么要求保存数据时一定要包含所有维度,不能缺少某个维度不设置,代码示例如下:

String modelNum = “cube0001”;

OlapSaveBuilder save = new OlapSaveBuilder(modelNum);

save.setCrossDimensions(new String[]{“Entity“,“Year “,“Period “,“Currency“, “Process”});

save.setMeasures("FMONEY");

//addfixedDimension(save);

List<Pair<String[], Object>> saveValPairs = new ArrayList<>();

//多个值则for循环加

saveValPairs.add(kd.fi.bcm.common.Pair.onePair(new String[]{“org001”, “FY2020”, “M_M09”, “CNY”, “IRpt”}, 5555.123));

save.setCellSet(cvtValues);

save.doSave();

 

OlapSaveBuilder 这个里面有个固定维度的设置,是为了减少数据量的传输而设置的,比如说保存的都是同一组织、财年、期间的报表数据,那么就可以这样写代码:

String modelNum = “cube0001”;

OlapSaveBuilder save = new OlapSaveBuilder(modelNum);

save.setCrossDimensions(new String[]{ “Currency“, “Process”});

//固定维度设置----start----

save. addFixedDimension(“Entity“,”org001”);

save. addFixedDimension(“Year”,”FY2020”);

save. addFixedDimension(“Period”,”M_M09”);

//----------------end--------

save.setMeasures("FMONEY");

List<Pair<String[], Object>> saveValPairs = new ArrayList<>();

//多个值则for循环加

saveValPairs.add(kd.fi.bcm.common.Pair.onePair(new String[]{“CNY”,“IRpt”}, 5555.123));

save.setCellSet(cvtValues);

save.doSave();

注意:币别中EC、PC是变量成员在存储时不能作为存储成员,需指定具体币别成员,如CNY、USD等具体币别


【内部或二开】星瀚合并报表:开发指导文档(20200924new)

a) 读取报表表格数据QFBuilder qf = new QFBuilder();qf.add (“entity”,”=”,组织id);qf.add (“fyear”,”=”,年id);qf...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息