历史版本5 :自定义提交 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1.概述编辑
1.1问题描述
用户在做填报报表时,希望点击提交按钮并不是往数据库中填报数据,而是要获取到填报页面的数据进行进一步处理,这个该如何解决呢?
1.2实现思路
在 报表填报属性 中介绍了报表填报属性有 2 种设置方式,一个是内置 SQL 直接绑定字段,往数据库中填报数据,另外一种是添加自定义事件,如果需要获取数据对数据进行进一步处理,则可选择添加自定义事件,下面详细介绍。
2.示例编辑
2.1 准备数据
新建数据查询数据集 ds1,SQL 语句为:SELECT * FROM STSCORE where name <> '' 。
2.2 设计填报表格
1)设计填报表格,并将数据集相应字段拖到单元格中,A2 和 C2 单元格添加数字控件,B2 单元格添加文本控件,如下图所示:
2)C2 单元格设置为汇总求和,如下图所示:
3)报表填报属性界面新增一个自定义提交,点击编辑按钮,如下图所示:
2.3自定义提交类
2.3.1方法一:
1)在类里面定义几个 JobValue,每一个 JobValue 对应一个单元格,在报表填报属性中通过属性列表中将其与对应的单元格绑定起来,具体使用如 DemoSubmitJob1:
package com.fr.data;
import com.fr.data.DefinedSubmitJob;
import com.fr.data.JobValue;
import com.fr.script.Calculator;
public class DemoSubmitJob1 extends DefinedSubmitJob {
/**
* 当模板自定义事件增加的属性 名称与下面变量有对应时,则会自动赋值于此对应变量
*/
public String getJobType(){
return " ";
}
private JobValue studentno; // JobValue 对应单元格
private JobValue name;
private JobValue grade;
private boolean isPass; // 非单元格,则对应具体类型值
/**
* 每一条记录执行一次此方法
* 同一提交事件在一个处理事务内,此对象是唯一的
*/
public void doJob(Calculator calculator) throws Exception {
// JobValue 的 getValueState()方法获取此对应单元格的状态
if (studentno.getValueState() == JobValue.VALUE_STATE_CHANGED) {
// 此单元格的值在报表初始化后被修改过
} else if (studentno.getValueState() == JobValue.VALUE_STATE_INSERT) {
// 此单元格是在报表初始化后新增的(例如执行了插入行操作)
} else if (studentno.getValueState() == JobValue.VALUE_STATE_DELETED) {
// 此单元格所在的记录被执行了删除操作
} else if (studentno.getValueState() == JobValue.VALUE_STATE_DEFAULT) {
// 此单元格在报表初始化后没有变化
}
// 值获取
System.out.print(" 学号: " + studentno.getValue()); // 通过 JobValue 的 getValue 方法获得单元格的值
System.out.print(" 姓名: " + name.getValue());
System.out.print(" 总分: " + grade.getValue());
System.out.print(" 是否达标: " + isPass);
System.out.println();
}
}
注:可以将所有变量全部定义成 JobValue 对象,通过 getValue() 获取对象的值。
2)将 Java 代码拷贝到自定义函数编辑界面,点击编译按钮,只有显示编译成功后,才能保存,如下图所示:
注:也可以将外部编译得到的class文件放到%FR_HOME%\webapps\webroot\WEB-INF\classes文件夹下,然后点击选择按钮引用class文件。
3)点击增加属性按钮,给提交事件添加 4 个属性,如下图所示: