自定义提交

  • 文档创建者:文档助手1
  • 编辑次数:32次
  • 最近更新:Leo.Tsai 于 2020-08-03
  • 1. 概述

    1.1 应用场景

    前端填报点击提交按钮后,希望不是直接往数据库中录入数据,而是要获取到填报页面的数据进行进一步处理,这时可以使用自定义提交实现。

    1.2 功能入口

    设计器菜单栏点击模板>报表填报属性,设置界面默认选择提交,点击Snag_2033736c.png,选择自定义提交即可,如下图所示:

    Snag_29e3b21d.png

    2. 示例

    下面给出一个自定义提交的示例,前端填报预览点击提交按钮后,获取填报页面的数据,通过自定义函数获取到数据并在后台打印出来。

    2.1 准备数据

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

    1596178231836274.png

    2.2 设计填报表格

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

    Snag_29ec6364.png

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

    Snag_29f2bbf7.png

    2.3 自定义提交类

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

    Snag_29f66d28.png

    2)将 Java 代码拷贝到自定义函数编辑界面,点击编译按钮,只有显示编译成功后,才能保存,如下图所示:

    注:也可以将外部编译得到的class文件放到%FR_HOME%\webapps\webroot\WEB-INF\classes文件夹下,然后点击选择按钮引用class文件。

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

    Java 代码如下:

    自定义事件继承自 DefinedSubmitJob 这个接口,通过 JobValue 接口获取填报页面单元格,JobValue 与报表填报属性处的属性绑定,然后用 getValue() 方法获取单元格的值。getValueState() 获取值的状态,值状态有四种:VALUE_STATE_CHANGED、VALUE_STATE_INSERT、VALUE_STATE_DELETED 和VALUE_STATE_DEFAULT。

    在类里面定义几个 JobValue,每一个 JobValue 对应一个单元格,在报表填报属性中通过属性列表中将其与对应的单元格绑定起来。

    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() 获取对象的值。

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

    Snag_2a0bbbaf.png

    注:属性名称跟类文件中定义的 JobValue 是一致的,必须保证报表填报属性处添加的属性名称与类文件中定义的名称保持一致。如果在类文件中对应参数类型不是 JobValue 的话,则必须与属性的数据类型保持一致。一般来说,为了便于维护,可以将 Java 类中的所有变量全部设为 JobValue 对象,不论报表填报属性中的属性类型是什么,均可以通过 GetValue 获取其值。

    2.4 效果预览

    1)保存报表,选择填报预览,前端点击提交按钮,如下图所示:

    Snag_2a179c84.png

    2)成功提交后,文件夹%FR_HOME%\bin下会生成文件out.log,如下图所示:

    1596181098579620.png

    3)文本编辑器打开out.log,可以看到导出的填报信息,如下图所示:

    1596181297214661.png

    2.5 其他应用

    自定义事件不仅可用于报表填报属性处,也可用于按钮控件中的提交事件,具体应用参见文档:上传下载文件插件

    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!