在客户自己的servlet中获得填报表的值
在使用集智数据平台报表填报时,往往客户也有自己的业务需要将其他一些数据也一并同时提交到数据库,这样就要求这两个提交在一个事务中,此时可以使用集智数据平台的填报监听类,但是如果客户的业务比较复杂在监听类中很难实现,要求自己通过servlet实现,这样就要求把报表页面中的数据提交到该servlet中和客户的业务一并处理。
集智数据平台报表在网页端展现为纯html形式,可以通过ajax形式将数据传递给服务器端的servlet,这样就能在客户自己的servlet中实现相关的处理。实现方法:
一:首先在页面中通过js得到报表的单元格的值:
var row=document.getElementById(“report1″).rows.length;
for(var i=0;i<row;i++)
{
temp[i]=new Array();
var currRow=document.getElementById(“report1″).rows[i];
for(var col=0;col<currRow.cells.length;col++)
{
var currCell=currRow.cells[col];
temp[i][col]=currCell.value;
}
}
二:将得到的单元格的值传递到servlet中
var url=”<%=httpAddr%>”+”servlet/testServlet?report=”+temp;
if(window.XMLHttpRequest)
{
req=new XMLHttpRequest();
}else if(window.ActiveXObject)
{
req=new ActiveXObject(“Microsoft.XMLHTTP”);
if(req)
{
req.open(“GET”,url,true);
// req.onreadystatechange=callback;
req.send(null);
}
三:在servlet中对得到的数据做处理
在servlet中既可以得到页面端传递过来的填报的值,又可以根据raq得到报表单元格的原始值,如下述代码:
try {
rd = (ReportDefine) ReportUtils.read(path);//读取报表模板
} catch (Throwable ex) {
ex.printStackTrace();
}
Context ctx=new Context();
Engine engine = new Engine(rd, ctx);
IReport iReport = engine.calc();
//计算报表
int rowNum=iReport.getRowCount();
int colNum=iReport.getColCount();
String[] rp=report.split(“,”);
//循环得到相关值,可得到报表的原值,页面中传过来的填报的值以及报表单元格中的注释属性
for(int i=1;i<=rowNum;i++){
for(int j=1;j<=colNum;j++){
INormalCell iCell = iReport.getCell(i, (short)j);
Object value = iCell.getValue();
System.out.println(“原值第” + i + “行第” + j + “列的值是:”+ iCell.getValue());
System.out.println(“填报值第” + i + “行第” + j + “列的值是:”+ rp[(i-1)*colNum+j-1]);
System.out.println(“注释====”+iCell.getNotes());
}
}
这样就能够在客户的servlet中得到报表的填报值从而进行自己的业务处理,如图:点击提交servlet按钮即可:
使用方式:
将class文件放到WEB-INF/classes下
将raq文件放到reportFiles下
在web.xml中写入servlet
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/servlet/testServlet</url-pattern>
</servlet-mapping>
将jsp文件放到demo应用下即可,访问该jsp文件,页面上会有按钮,点击即可将页面中的值传递给servlet,在servlet中也可以通过计算初始报表得到报表单元格的原值以及对应其他属性中的值,如注释等