反馈已提交

网络繁忙

自定义提交

  • 文档创建者:予i
  • 编辑次数:14次
  • 最近更新:RosieY 于 2022-02-21
  • 1. 概述

    1.1 问题描述

    在做填报报表时,希望点击提交按钮后,获取到填报页面的数据做一些自定义的处理,要如何实现呢?

    1.2 实现思路

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

    1.3 功能说明

    1)自定义提交的本质是获取页面数据后做自定义的处理,所以获取值后的代码部分需要用户自己根据业务需求编写和维护。

    2)暂不支持回调,即将数据处理的结果返回给页面展示。

    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代表绑定的值为单元格,其他类型数据需按照各自类型去定义类,例如字符串为String
         * 不支持单元格组
         */
        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级别输出被标记为"默认"的数据
            }
        }
    }

    如果是文件控件上传的文件,则需要在使用JobValue.getValue()后做进一步的处理,才能获取到文件名和文件流。

    假设文件单元格对应的参数名为FName,在使用private JobValue FName定义好对象之后,参考下方代码处理:

    if (FName.getValue() instanceof FArray) {
                FArray farray = (FArray) (FName.getValue());
                for (int i = 0; i < farray.length(); i++) {
                    Attachment cache = (Attachment) (farray.elementAt(i));
                    FineLoggerFactory.getLogger().error("------filename:" + cache.getFilename() + "--------");
                    //getFilename()获取文件名
                    FineLoggerFactory.getLogger().error("------file:" + cache.getBytes() + "--------");
                    //getBytes()获取文件流
                }
            }
    else if (FName.getValue() instanceof FRFile){
                FRFile cache = (FRFile) FName.getValue();
                FineLoggerFactory.getLogger().error("------filename:" + cache.getFileName() + "--------");
                //getFilename()获取文件名
                FineLoggerFactory.getLogger().error("------file:" + cache.getBytes() + "--------");
                //getBytes()获取文件流
            }

    2.4 设置填报属性

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

    1596178832950191.png

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

    1596179070793852.gif

    注:除了上述编译方式外,也可以将外部编译好的 class 文件放到 %FR_HOME%\webapps\webroot\WEB-INF\classes 文件夹下和代码中定义的 package 路径一致的位置,然后点击「选择按钮」引用 class 文件。若修改替换了 class 文件,则需要重启设计器或帆软服务,修改的代码才会生效。

    点击可下载 class 文件:SubmitDemo.rar

    3)点击增加属性按钮,给提交事件添加 4 个属性,注意值的类型需要和代码中定义的类型一致,如下图所示:

    2.5 效果预览

    使用填报预览,点击提交按钮,查看日志。

    1.gif


    3.模板下载

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

    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭