润乾报表本地打印如何记录打印日志,是否打印,打印次数,被谁打印

 

由于某些业务需要,要记录报表被打印后的日志,比如是否已被打印((比如仓库出库单只能被打印一次,一旦打印就要被标记))、打印次数、被谁打印过等等之类。
虽本地打印无法采用页面上 js 的回调函数,但可以采用此打印监听类实现。

在本地打印成功打印报表后,会运行用户设置的监听类方法,实现用户设计的功能。
具体用法:

1、监听接口类

 package com.raqsoft.report.ide.usermodel;
 import org.json.JSONObject;
 public interface ILocalPrintListener {
	//params: 从报表页面传过来的参数,包括request、session中保存的和报表参数
	public void printed( JSONObject params ) throws Exception;
 }

2、用户监听类示例

package localprint;
import org.json.JSONObject;
import com.raqsoft.report.ide.usermodel.ILocalPrintListener;
import com.scudata.common.Logger;
public class MyListener implements ILocalPrintListener {
		//params: 从报表页面传过来的参数,包括request、session中保存的和报表参数
		public void printed( JSONObject params ) throws Exception {
			String name = params.getString( "reportName" );
			Logger.info( "报表" + name + "已打印" );
		}
}

3、监听类部署
用户监听类固定部署在 [web 应用根目录]/localPrintListener 目录中,只须放 class 文件,不用加包名路径目录,如示例:

用户监听类中只能引用 jdk 系统类以及本地打印 jar 包中的类,本地打印程序运行时动态从服务器加载这个类,因为不知道它引用的其它类,所以加载不了其它类。比如想要实现将日志写到服务器端的文件里或数据库里,应该在监听方法 printed 中通过 URL 向服务器发送信息,由服务器端的程序执行记录。

4、配置文件
在报表配置文件中增加以下配置:

<Server>
	……
        <property name="localPrintListener" value="localprint.MyListener"/>
    </Server>

value 值是监听类的类名,带包路径