历史版本14 :自定义提交 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1.概述编辑
1.1 问题描述
在做填报报表时,希望点击提交按钮后,获取到填报页面的数据做一些自定义的处理,要如何实现呢?
1.2 实现思路
在「报表填报属性」章节中介绍了报表填报属性有 2 种设置方式,一个是内置 SQL 直接绑定字段,往数据库中填报数据,另外一种是添加自定义事件。如果需要获取数据后对数据进行自定义处理,则可选择使用自定义提交。
2.示例编辑
2.1 准备数据
新建数据集 ds1,从FRDemo取数,SQL 语句为:SELECT * FROM S产品 limit 3

2.2 设计填报表格
设计填报表格,将数据集相应字段拖到单元格中,A2 单元格添加「数字控件」,B2 单元格添加「文本控件」,表格样式如下图所示:

2.3 编写自定义提交类
参考以下代码可获取相应的模板数据,之后就可以按自定义的需求对数据做处理。
package com.fr.data;
import com.fr.log.FineLoggerFactory;
import com.fr.script.Calculator;
public class SubmitDemo extends DefinedSubmitJob {
public String getJobType() {
return " ";
}
/**
* 当模板填报属性增加的参数名与下面变量名一致时,则会自动赋值于此对应变量
* JobValue代表绑定的值为单元格,其他类型数据按照各自类型去定义类即可,也可以全部定义为JobValue
* 不支持单元格组
*/
private JobValue ID;
private JobValue Name;
private String Type;
private Integer Count;
/**
* 每一条记录执行一次此方法
*/
public void doJob(Calculator calculator) throws Exception {
FineLoggerFactory.getLogger().error("---------ID:" + ID.getValue() + ",Name:" + Name.getValue() + ",Type:" + Type + ",Count:" + Count + "------------");
//在fanruan.log以error级别输出获取到的参数值
if (ID.getState().checkChanged()) {
//FineLoggerFactory.getLogger().error("---------修改:"+ID.getValue()+"------------");
// 在fanruan.log以error级别输出被标记为"修改"的数据
} else if (ID.getState().checkInsert()) {
//FineLoggerFactory.getLogger().error("---------新增:"+ID.getValue()+"------------");
// 在fanruan.log以error级别输出被标记为"新增"的数据
} else if (ID.getState().checkDeleted()) {
//FineLoggerFactory.getLogger().error("---------删除:"+ID.getValue()+"------------");
// 在fanruan.log以error级别输出被标记为"删除"的数据
} else if (ID.getState().checkDefault()) {
//FineLoggerFactory.getLogger().error("---------默认:"+ID.getValue()+"------------");
// 在fanruan.log以error级别输出被标记为"默认"的数据
}
}
}
2.4 设置填报属性
1)点击「模板>报表填报属性」,新增一个自定义提交,点击编辑按钮,如下图所示:

2)将上面的Java 代码复制到自定义函数编辑界面,点击「编译」按钮,显示编译成功后,点击「保存」按钮,如下图所示:

注:除了上述编译方式外,也可以将外部编译好的 class 文件放到 %FR_HOME%\webapps\webroot\WEB-INF\classes 文件夹下和代码中定义的package路径一致的位置,然后点击「选择按钮」引用 class 文件。若修改替换了 class 文件,则需要重启设计器或帆软服务,修改的代码才会生效。
3)点击增加属性按钮,给提交事件添加 4 个属性,注意值的类型需要和代码中定义的类型一致,如下图所示:

注:为了便于维护,可以将 Java 代码中的所有变量全部设为 JobValue 对象。这样不论报表填报属性中的属性类型是什么,均可以通过 GetValue() 获取值。
2.5 效果预览

3.模板下载
点击下载模板:自定义提交.cpt

