UReport2报表引擎:自定义报表存储器(三)
生活随笔
收集整理的這篇文章主要介紹了
UReport2报表引擎:自定义报表存储器(三)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、默認報表存儲器
UReport2默認提供的名為“服務器文件系統”的報表存儲機制,實際上是實現了UReport2提供的com.bstek.ureport.provider.report.ReportProvider接口。接口源碼如下:
public interface ReportProvider {
/**
* 根據報表名加載報表文件
* @param file 報表名稱
* @return 返回的InputStream
*/
InputStream loadReport(String file);
/**
* 根據報表名,刪除指定的報表文件
* @param file 報表名稱
*/
void deleteReport(String file);
/**
* 獲取所有的報表文件
* @return 返回報表文件列表
*/
List<ReportFile> getReportFiles();
/**
* 保存報表文件
* @param file 報表名稱
* @param content 報表的XML內容
*/
void saveReport(String file,String content);
/**
* @return 返回存儲器名稱
*/
String getName();
/**
* @return 返回是否禁用
*/
boolean disabled();
/**
* @return 返回報表文件名前綴
*/
String getPrefix();
}
實現了ReportProvider接口后,只需要將實現類配置到Spring中,讓其成為一個標準的Spring Bean,這樣UReport2就會檢測到它而將其加載。
如果想要禁用系統提供的默認報表存儲器,只需要把ureport2-core包下的ureport.properties文件拷貝一份放到自己的根目錄下:
配置文件內容如下:
ureport.disableHttpSessionReportCache=false ureport.disableFileProvider=true ureport.fileStoreDir=/WEB-INF/ureportfiles ureport.debug=true
將ureport.disableFileProvider改成true,即可禁用默認報表存儲器。
二、自定義報表存儲器
如果想要定義自己的報表存儲器,只需要實現了ReportProvider接口后,并將實現類配置到Spring中,讓其成為一個標準的Spring Bean,這樣UReport2就會檢測到它而將其加載。
1、表結構設計
| 字段名 | 類型 | 描述 |
| id | varchar(32) primary key | 主鍵 |
| name | varchar(100) | 報表名稱 |
| content | mediumblob | 報表內容 |
| create_time | timestamp | 創建時間 |
| update_time | timestamp | 更新時間 |
2、需要的方法
public interface ReportFileService extends IService<UReportFile> {
/**
* 根據報表名稱檢查報表是否存在
*
* @param name 報表名稱
*/
boolean checkExistByName(String name);
/**
* 根據報表名稱查詢報表
*
* @param name 報表名稱
*/
UReportFile getReportFileByName(String name);
/**
* 查詢全部報表
*/
List<UReportFile> listAllReportFile();
/**
* 根據報表名稱刪除報表
*
* @param name 報表名稱
*/
boolean removeReportFileByName(String name);
/**
* 保存報表
*/
boolean saveReportFile(UReportFile entity);
/**
* 更新報表
*/
boolean updateReportFile(UReportFile entity);
}
3、自定義報表存儲器
@Component
@Setter
public class MySQLProvider implements ReportProvider {
/**
* 存儲器名稱
*/
private static final String NAME = "mysql-provider";
/**
* 報表文件名前綴
*/
private String prefix = "mysql:";
/**
* 是否禁用
*/
private boolean disabled = false;
@Autowired
private ReportFileService reportFileService;
/**
* 根據報表名加載報表文件
*
* @param file 報表名稱
* @return 返回的InputStream
*/
@Override
public InputStream loadReport(String file) {
UReportFile reportFile = reportFileService.getReportFileByName(getCorrectName(file));
ByteArrayInputStream stream = null;
if (ObjectUtil.isNotEmpty(reportFile)) {
try {
stream = new ByteArrayInputStream(reportFile.getContent());
} catch (Exception e) {
throw new ReportException(e);
}
}
return stream;
}
/**
* 根據報表名,刪除指定的報表文件
*
* @param file 報表名稱
*/
@Override
public void deleteReport(String file) {
reportFileService.removeReportFileByName(getCorrectName(file));
}
/**
* 獲取所有的報表文件
*
* @return 返回報表文件列表
*/
@Override
public List<ReportFile> getReportFiles() {
List<UReportFile> list = reportFileService.listAllReportFile();
List<ReportFile> reportList = new ArrayList<>();
for (UReportFile file : list) {
reportList.add(new ReportFile(file.getName(), file.getUpdateTime()));
}
return reportList;
}
/**
* 保存報表文件
*
* @param file 報表名稱
* @param content 報表的XML內容
*/
@Override
public void saveReport(String file, String content) {
file = getCorrectName(file);
UReportFile reportFile = reportFileService.getReportFileByName(file);
if(ObjectUtil.isEmpty(reportFile)){
reportFile = new UReportFile();
reportFile.setName(file);
reportFile.setContent(content.getBytes());
reportFileService.save(reportFile);
}else{
reportFile.setContent(content.getBytes());
reportFileService.updateReportFile(reportFile);
}
}
/**
* @return 返回存儲器名稱
*/
@Override
public String getName() {
return NAME;
}
/**
* @return 返回是否禁用
*/
@Override
public boolean disabled() {
return disabled;
}
/**
* @return 返回報表文件名前綴
*/
@Override
public String getPrefix() {
return prefix;
}
/**
* 獲取沒有前綴的文件名
*
* @param name 報表名稱
*/
private String getCorrectName(String name){
if(name.startsWith(prefix)){
name = name.substring(prefix.length());
}
return name;
}
}
啟動項目,查看效果
總結
以上是生活随笔為你收集整理的UReport2报表引擎:自定义报表存储器(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (二)软件测试分类
- 下一篇: ubuntu下创建python的虚拟环境