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

目录:

1. 概述编辑

1.1 应用场景

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

1.2 功能入口

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

1596442363720294.png

1.3 功能说明

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

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

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 文件,则需要重启设计器或帆软服务,修改的代码才会生效。

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

2.5 效果预览

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

1.gif

3. 模板下载编辑

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