历史版本5 :自定义提交 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1.概述编辑

1.1问题描述

用户在做填报报表时,希望点击提交按钮并不是往数据库中填报数据,而是要获取到填报页面的数据进行进一步处理,这个该如何解决呢?

1.2实现思路

在 报表填报属性  中介绍了报表填报属性有 2 种设置方式,一个是内置 SQL 直接绑定字段,往数据库中填报数据,另外一种是添加自定义事件,如果需要获取数据对数据进行进一步处理,则可选择添加自定义事件,下面详细介绍。

2.示例编辑

2.1 准备数据

新建数据查询数据集 ds1,SQL 语句为:SELECT * FROM STSCORE where name <> ''

2.2 设计填报表格

1)设计填报表格,并将数据集相应字段拖到单元格中,A2 和 C2 单元格添加数字控件,B2 单元格添加文本控件,如下图所示:

Snag_29ec6364.png

2)C2 单元格设置为汇总求和,如下图所示:

Snag_29f2bbf7.png

3)报表填报属性界面新增一个自定义提交,点击编辑按钮,如下图所示:

Snag_29f66d28.png

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文件。

31EFFA7F-D45A-48CD-91C9-F7236DB11D25.GIF

3)点击增加属性按钮,给提交事件添加 4 个属性,如下图所示:

Snag_2a0bbbaf.png