有客户需要将报表名称、报表数据集sql、报表参数值、访问报表时间、登录人信息都输出到指定文件,这样可以追踪敏感报表被访问的情况。
分析
需求中提到的登录人信息、访问报表时间以及报表名称都可以直接获得,而数据集sql和参数信息需要计算报表后得到。所以这些需求可以放到计算监听类中实现。
Sql可以通过SQLDataSetConfig得到,报表参数值可以通过Context拿到,其他的信息先放到request中,然后在计算监听类中使用内置的request对象获得。最后将取到的所有信息通过javaIO输出到文件中。
实现
准备任意带有参数的浏览式报表,在发布报表的jsp中加入计算监听类:calculateListener=”listener.CalcListenerWriteSql”。
CalcListenerWriteSql类关键部分:
1、 通过DataSetConfig获取数据集名,SQLDataSetConfig获取数据集sql
DataSetMetaData dsmd = report.getDataSetMetaData();//获取数据集元对象
int dsNum = dsmd.getDataSetConfigCount();//获取数据集个数
for