反馈已提交

网络繁忙

自定义校验

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

    1.1 应用场景

    一些特殊的业务逻辑用公式校验不好实现,希望可以获取填报页面数据,交给用户自定义的程序来判断,最后将校验结果返回给页面展示。

    1.2 功能入口

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

    1596442363720294.png

    1.3 功能说明

    1)自定义校验的本质是获取页面数据后做自定义的处理,最后将校验结果返回,所以处理数据的代码部分需要用户自己根据业务需求编写。

    2)只支持返回校验结果给页面展示,不支持其他回调需求。

    3)自定义校验支持在移动端使用。

    2. 示例

    2.1 准备数据

    新建数据集 ds1,从FRDemo取数,SQL 语句为:SELECT * FROM S产品 limit 3

    2.2 设计填报表格

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

    2.3 编写自定义校验类

    本示例要实现的效果是:当单价小于设置的最小值时,弹出校验提醒。

    参考以下代码可获取相应的模板数据,进行判断并返回校验结果。

    package com.fr.data;

    import com.fr.base.Utils;
    import com.fr.log.FineLoggerFactory;
    import com.fr.script.Calculator;

    public class VerifyDemo extends DefinedVerifyJob {
        /**
         * 必须要定义此私有变量,变量名可改,表示校验状态,默认为0
         * 0  表示校验成功
         * 1  表示校验失败
         */
        private int type = 0;

        /**
         * 当模板自定义事件增加的属性名称与下面变量名一致时,则会自动赋值于此对应变量
         * JobValue代表绑定的值为单元格,其他类型数据需按照各自类型去定义类,例如字符串为String
         * 不支持单元格组
         */
        private JobValue Price;
        private int MinNum;

        public void doJob(Calculator calculator) throws Exception {
        FineLoggerFactory.getLogger().error("------Price:" + Price.getValue() + ",MinNum:" + MinNum + "------");
        //在fanruan.log以error级别输出获取到的参数值
        
            /**
             * 获取Price的值并转为整型,赋给price对象
             */
            if (Price != null) {
                int price = 0;
                if (Price.getValue() instanceof Integer) {
                    //判断Price的值是否为整数
                    price = (Integer) Price.getValue();
                    //将Price的值强转为整型,防止比较时因类型不一致导致报错
                } else {
                    price = Integer.parseInt(Utils.objectToString(Price.getValue()));
                }


                /**
                 * 校验价格是否小于设定的最小值,是的话返回1(失败),否则返回0(成功)
                 */
                if (price < MinNum) {
                    type = 1;
                }
            } else {
                type = 0;
            }

        }

        public String getMessage() {
            /**
             * 根据校验状态是0(成功)还是1(失败),设置对应的返回信息
             */
            if (type == 0) {
                return "校验成功";
                //此处设置的信息没有用,成功的时候不会显示这里的内容,还是显示默认的"校验成功"
            } else {
                return "价格不能小于" + MinNum;
            }

        }

        public Verifier.Status getType() {
            // 返回校验状态
            return Verifier.Status.parse(type);
        }

        public void doFinish(Calculator arg0) throws Exception {

        }

    }

    2.4 设置数据校验

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

    1596444600217626.png

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

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

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

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

    2.5 效果预览

    使用填报预览,点击校验按钮。

    1.gif

    注:支持移动端预览。

    3. 模板下载

    点击下载模板:自定义校验.cpt

    附件列表


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

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

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

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

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

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

    不再提示

    10s后关闭