实现例子
实现例子
本例子根据销售地区,销售统计出所有产品的总销售额,并将总销售额录入到CPXSTJA数据表中。
打开9.3.raq,为了例子的简要性,删除货主地区以后的行,把E3单元格的表达式修改为:=ds1.sum(总金额,产品ID IN ds2.select(产品ID)),即E3从“订单,订单明细”两张数据表中统计数据。如下图:
完成了对原始数据的统计后,我们开始实现第二步,数据的转存。
选择E3单元格,右键选择填报属性,在弹出的数据填报的更新标签页中,录入如下填报属性:
这样,一张填报表就做好了,它从“订单,订单明细”两张数据表中统计数据,并将统计的结果存入CPXSTJA中。
然而到目前为止,只做了一张填报表,它是不会自己填报的,如果把这个填报表发布到web,仅仅是展现数据,必须由用户手工点击“提交”按钮才会将统计的结果录入数据库。
此报表保存为11.1.raq
现在我们通过调用报表应用开发接口的方式,实现统计与填报一体化。
首先是统计报表,这里只要计算完成就可以,代码如下:
String reportPath =request.getRealPath("/reportFiles/11.1.raq");ReportDefine rd = (ReportDefine)ReportUtils.read( reportPath );Context context = new Context();Engine enging = new Engine( rd, context);IReport iReport = enging.calc();
第二步是根据统计结果组织填报需要的数据:
int rows = iReport.getRowCount();int cols = iReport.getColCount();SegmentSet data = new SegmentSet(null, false, ';', false);for (int row = 1; row < rows ; row ++ ){for (int col = 1 ; col < cols ; col ++ ){INormalCell iCell = iReport.getCell(row,(short)col);Object value = "";if (iCell != null){value = iCell.getValue();}String cell = ExcelNotation.toExcelNotation(row, (short)col );data.put(cell, value.toString());}}
第三步是完成数据的入库操作:
WebDataSaver saver = new WebDataSaver( iReport,context,null, request, response );saver.setSaveDataByProcessor(false);saver.setData( data.toString() );saver.setKeyRepeatError( false );saver.save();
完整的代码可以参看11.jsp。
-
注意:上述代码如果和调度程序结合使用,就可以实现定期自动数据清洗与过滤了。