1. 概述
1.1 应用场景
一些特殊的业务逻辑用公式校验不好实现,希望可以获取填报页面数据,交给用户自定义的程序来判断,最后将校验结果返回给页面展示。
1.2 功能入口
设计器菜单栏点击「模板>报表填报属性」,设置界面选择「数据校验」,点击,选择「自定义校验」即可,如下图所示:
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)报表填报属性界面新增一个「自定义校验」,点击「编辑」按钮,如下图所示:
2)将 2.3 节编写好的 Java 代码拷贝到自定义函数编辑界面,点击「编译」按钮,只有显示「编译成功」后,才能保存,如下图所示:
注:除了上述编译方式外,也可以将外部编译好的 class 文件放到 %FR_HOME%\webapps\webroot\WEB-INF\classes 文件夹下和代码中定义的package 路径一致的位置,然后点击「选择按钮」引用 class 文件。若修改替换了 class 文件,则需要重启设计器或帆软服务,修改的代码才会生效。
点击可下载 class 文件:VerifyDemo.rar
3)点击增加属性按钮,给提交事件添加 2 个属性,注意值的类型需要和代码中定义的类型一致,如下图所示:
2.5 效果预览
使用填报预览,点击校验按钮。
注:支持移动端预览。
3. 模板下载
点击下载模板:自定义校验.cpt
注:模板下载后需按照文档 2.4 节操作,增加数据校验事件后才能生效。