FineReport填报报表

news2024/11/19 4:44:24
    • 二次确认,删除行:

参考:

JS实现删除时二次确认- FineReport帮助文档 - 全面的报表使用教程和学习资料

JS实现记录填报操作- FineReport帮助文档 - 全面的报表使用教程和学习资料

    • 确认后直接校验提交

// 二次确认
var cell = this.options.location;
//获取当前控件所在单元格的编号
FR.Msg.confirm("警告", "确定要删除吗?", function(value) {
    if (value) {
        // 删除当前行-未提交入库
        _g().deleteReportRC(cell);
        // 校验并提交-提交入库
        _g().verifyAndWriteReport();
    }
});

注:此方法删除行后,进行验证并提交到数据库,同时有操作其它内容时,校验不通过时,删除将失败。 _g().verifyAndWriteReport()整个sheet一起提交,无法只提交当前行。一般操作中删除是不需要校验数据的,所以此方法用户操作不太友好。

    • 不校验数据删除

可设置两个删除按钮,一个用于二次确认,一个用于删除提交入库,最后一个删除按钮隐藏。

  • 第一个删除,二次确认:

// 获取当前控件所在单元格的编号
var cell = this.options.location;
// 获取当前单元格的行列号
var cr = FR.cellStr2ColumnRow(cell);
// 获取当前单元格后一列的单元格编号
var delcell = FR.columnRow2CellStr({
        col: cr.col + 1,
        row: cr.row
})
FR.Msg.confirm("警告", "确定要删除吗?", function(value) {
        if (value) {
                 // 模拟点击按钮
                _g().getWidgetByCell(delcell).fireEvent("click");
        }
}) 

注: 移动端不支持此方法(FR.columnRow2CellStr)

  • 第二个删除,提交入库:

设置回调函数:

if (fr_submitinfo.success) {
        // 删除当前行
        _g().deleteReportRC(this.options.location);
        FR.Msg.toast('删除成功');
} else {
        FR.Msg.toast('删除失败,错误信息为:' + fr_submitinfo.failinfo);
}
    • 填报只提交修改过的数据

参考:https://help.fanruan.com/finereport/doc-view-1796.html

填报提交,“未修改不更新”置灰无法选择:

未修改不更新仅适用于所有填入的值为单元格的情况,若填入值为固定字符串,公式,参数等其他形式,则该功能将灰化无法使用。

  • 报表中添加未修改不更新标识,添加一标志列,K2,设置该列隐藏;

  • 当该列所处行中相关列有内容进行修改时,设置该列的值为1;

  • 该列所处行中相关列,添加「编辑后」事件,内容编辑后,更新未修改不更新标识:

// 获取当前行号
var row = parseInt($(_g().curLGP.currentTDCell).attr('row')) + 1;
var row = FR.cellStr2ColumnRow(this.options.location).row + 1;
// 给当前行的L列单元格赋值为1
_g().setCellValue('K' + row, null, 1);

注:移动端不支持此方法(_g().setCellValue())

  • 填报报表设置提交条件:公式为 K2=1

    • 填报重复数据校验

    • 页面重复数据校验(多列)

参考:校验填报页面的数据是否重复- FineReport帮助文档 - 全面的报表使用教程和学习资料

  • 在列表中添加一列用于设置该列的重复校验内容:

如添加M2列,该列的内容为公示:

CONCATENATE(C2,D2,E2,F2)

表示将C2、D2、E2 和 F2 单元格的填入的内容拼接在一起

  • 设置M2列插入行策略

单元格属性-》其它

  • 在列表中添加一列用于设置整个列表的校验数据内容:

如添加B5列,该列的内容为公示:

JOINARRAY([M2],",")

表示用于获取M2扩展出的所有值作为一个字符串,以“,”分隔。

  • 填报提交时,添加数据校验:

校验公示为:

len(GREPARRAY(split(B5,","),item = CONCATENATE(C2,D2,E2,F2))) <= 1
    • 数据库重复数据校验

参考:联立多字段校验是否与数据库中数据重复- FineReport帮助文档 - 全面的报表使用教程和学习资料

  • 新建数据集“ds1”,查询获取数据库中已有的数据;

SELECT  concat(column1,  column2,  column3,  column4) AS 'aa' from table;
  • 在列表中添加一列用于设置该列的重复校验内容:

如添加M2列,该列的内容为公示:

CONCATENATE(C2,D2,E2,F2)

表示将C2、D2、E2 和 F2 单元格的填入的内容拼接在一起

  • 填报提交时,添加数据校验:

校验公示为:

IF(B2 = '' || ISNULL(B2), INARRAY(CONCATENATE(C2,D2,E2,F2), if(COUNT((ds1.group(aa))) > 1, ds1.group(aa), ARRAY(ds1.group(aa)))) = 0,true)

公示说明:

公式

说明

ds1.group(aa)

对 ds1 中的 aa 数据列数据分类汇总,当个数为 1 的时候,返回值为字符串;>1 返回数组

ARRAY(ds1.group(aa))

将 ds1.group(aa) 汇总的数据转换为数组格式

if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa)))

如果汇总后数据个数<1,将字符串转换为数组

INARRAY(H2,if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa))))

返回 H2 中拼接的联合主键在已有数据数组中的位置,如果不存在返回 0

    • 填报控件在非编辑状态下不显示

参考:普通报表控件样式 - 帆软社区

填报报表下拉框控件,只有点击进入编辑状态,才会有样式,为编辑状态下看不见,设置成跟参数面板一样初始化后就能看见下拉框

模版=》模版web属性 勾选直接显示控件

    • 时间控件设置默认值

填报列表展示已填报的数据内容,且列表中包含时间控件,在新增填报时设置时间控件默认值:

设置插入行策略:

设置为原值,值与上一行值相同。

注:在未查询到填报数据结果集时,用上述方法设置默认值将失效

  • 添加一单元格B1,设置单元格值为查询列表结果集个数

  • 为日期控件添加条件属性-新值

注:设置新值的方式,在有导入功能时,可能会失效

    • 去除填报页面选中单元格时的黑色边框

// 加载结束事件
_g().curLGP.hideSelectFrame();
获取单元格焦点

参考:https://help.fanruan.com/finereport/doc-view-1781.html

预览填报报表时,希望页面加载完成后,自动将光标定位在某个控件中,可以直接编辑。

// 获取A2单元格
var cell = _g().curLGP.getTDCell(0, 1);
// 聚焦A2单元格
_g().curLGP.selectTDCell(cell);
_g().curLGP.editTDCell(cell);
    • 获取当前编辑行行号

参考:https://help.fanruan.com/finereport/doc-view-1213.html

// 设置单元格被选中时的监听事件  
_g().on("cellselect", function(td) {
        //获取当前行号,由于数据是从第三行开始,因此要减2
        var num = _g().curLGP.getTDRow(td) - 2;
        // 给F1单元格赋值  
        _g().setCellValue("F1", null, num);
}) ;
    • 弹框

参考:https://help.fanruan.com/finereport/doc-view-603.html

  • 警告框:可用于删除的二次确认

FR.Msg.confirm("警告", "确定要删除吗?", function(value) {
        if (value == true) {
                alert("确定删除!");
        } else {
                alert("取消删除!");
        }
}); 
  • 输入框:

FR.Msg.prompt("输入",  "请输入内容",  "", function() {
        //获取输入框中输入的值
        value = arguments[0] && arguments[0].toString();
});
  • 消息框:

FR.Msg.toast('删除成功');
    • Excel导入

    • 导入设置

    • Excel多次导入

Excel导入形式

方法

说明

清空导入

_g().importExcel_Clean()

适用于导入前需要清空原有页面数据的场景。

每次导入时均清空填报页面已有数据,最后只保留当次 Excel 中导入的内容。

注:清空导入只清空导入区域数据,其他区域内容不会被清空(如ID列,导入的Excel中没有ID列,列表展示中有ID列,清空导入只能清空其它Excel内容列,无法清空ID列)。

注:清空只是清空页面数据,并不会根据填报属性清空数据库数据。如果有此需求,可以参考导入Excel提交前清空数据库表实现。

覆盖导入

适用于希望导入数据能覆盖同位置数据,而不影响其他数据的场景。

将 Excel 中的数据导入时,会根据位置覆盖掉相同位置的页面数据。如果页面的数据行数多于 Excel,则页面多出来的数据在 Excel 导入后会保留,不会被清空。

注:同清空导入ID列问题同样存在。

增量导入

_g().importExcel_Append()

适用于希望在原有数据下方进行导入数据的场景。

每次导入 Excel 时,都会在结尾行扩充增加 Excel 导入的内容。如果页面初始化时没有数据,只有一行空白行,则导入后该空白行会保留。

    • Excel自定义导入:

自定义导入:_g().importExcel("customize");

可选择导入的sheet、标题行、数据行、导入的数据列等:

    • Excel批量导入

参考:Excel批量导入插件- FineReport帮助文档 - 全面的报表使用教程和学习资料

导入和提交会一起执行,不需要预览相关模板。 需安装“Excel批量导入”插件,在插件中添加导入任务,一键导入,导入出错,会生成勘错文件。

    • 填报成功后刷新页面

location.reload()

_g().refreshAllSheets()

  • 效果为整个模板刷新,等同于手动点击浏览器的刷新按钮

  • 参数面板已选参数会重置

  • 如果有多个sheet,刷新后会返回第一个sheet

  • 支持移动端

  • 效果为重新查询,等同于手动点击查询按钮

  • 参数面板已选参数不会重置

  • 如果有多个sheet,刷新后会停留在当前sheet

  • 支持移动端

注:经测试使用移动端填报时,此刷新不生效

    • 移动端填报:

  • 移动端不支持JS、JQuery;(样式无法设置)

  • 部分功能属性不支持,经测试使用已知不支持功能属性如下:

说明

方法

获取特定单元格的值

getCellValue

给特定单元格赋值

setCellValue

在特定的位置插入行

appendReportRC

删除行

deleteReportRC、deleteRows

刷新

refreshAllSheets

根据行列号获取单元格编号

columnRow2CellStr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开始安装Domino 12.0.2

大家好&#xff0c;才是真的好。 上周我们话题是NotesDomino12.0.2产品发布&#xff0c;主要说到了Domino12.0.2的新特性&#xff0c;新特性很多&#xff0c;要用很多篇来进行测试和说明。 今天我们主要谈谈Domino 12.0.2的系统要求和安装等。 首先&#xff0c;Domino12.0.2…

一、初识FreeRTOS之FreeRTOS简介

目录 一、什么是FreeRTOS&#xff1f; 二、为什么选择FreeRTOS&#xff1f; 三、FreeRTOS的特点 四、FreeRTOS资料与源码下载 五、FreeRTOS源码文件介绍 一、什么是FreeRTOS&#xff1f; Free即免费的&#xff0c;RTOS的全称是Real time operating system,中文就是实时操作…

python数据结构(一):字符串

一、字符串的格式化输出 1.1、格式化运算符 print("我跑完了第" str(lap 1) "圈")上面这段输出的代码使用了两个加号做了字符串拼接&#xff0c;并且将整形转换成了字符串。也可以使用一种更好的办法&#xff0c;格式化输出来打印这句话。 print(&quo…

xilinx srio ip学习笔记之再识srio

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之再识srio前言SRIO的理解IP核的理解前言 这段时间&#xff0c;随着对SRIO的学习&#xff0c;又有了更深的一点认识&#xff0c;不像一开始这么慌张了…

年终汇报工作,如何用项目管理工具展现成果

据报道&#xff0c;2022年11月20日的一次京东内部会议上&#xff0c;刘强东痛批京东中高层管理人员&#xff0c;表示部分高管醉心于 PPT 和奇妙词汇&#xff0c;或吹得天花乱坠但是执行一塌糊涂。 不可否认&#xff0c;刘强东提到的现象&#xff0c;的确是当今众多互联网大厂和…

基于frp实现外网访问个人本地服务器

适用对象想要通过frp实现内网服务被外网访问的人。关键词描述内网&#xff1a;内网指的是局域网&#xff0c;几台或者几十台电脑之间互访&#xff0c;也叫私网。外网&#xff1a;指的是我们上的Internet网络&#xff0c;也叫公网。需要具备的知识基础和条件1&#xff1a;外网服…

Java异常分类常见使用场景

今天在自己实现RxJava框架时&#xff0c;发现一些参数异常、流关闭异常等&#xff0c;Rxjava框架是会抛出相应的异常的&#xff0c;所以自己编写实现这块源码的时候&#xff0c;渐渐的也需要使用到这些知识&#xff0c;这里对这块做一下回顾总结。 使用 我们代码编写实现中&am…

开年喜讯!知道创宇一连斩获2022年度“IT168技术卓越奖”三项大奖

近日&#xff0c;业界知名IT垂直门户媒体IT168发布“2022年度IT168技术卓越奖”获奖名单&#xff0c;知道创宇凭借强大的技术优势与出色的产品能力脱颖而出&#xff0c;一举斩获网络安全领域三项大奖&#xff1a; 知道创宇创始人、CEO赵伟获评“数字化转型领军人物” ScanV-互…

【C++】优先级队列priority_queue/仿函数(函数对象)

这里写目录标题一.优先级队列1.优先级队列的介绍2.priority_queue的定义与使用二.仿函数/函数对象三.优先级队列的模拟实现一.优先级队列 1.优先级队列的介绍 1&#xff09;注意优先级队列和队列不是一个东西&#xff0c;队列是容器&#xff0c;优先级队列是一种容器适配器&am…

服务监控之promethues+grafana,直接送你上大师,这还不上热门吗

最近的项目需要上监控&#xff0c;虽然之前也是使用这个方案&#xff0c;但是作为使用者一直没有太关注细节&#xff0c;也没有真正的去部署过&#xff0c;刚好凑着这次机会&#xff0c;彻底掌握下这套监控系统 1、监控系统架构 监控的架构这个图几乎每个文章都有&#xff0c…

学习JS,实现自动打字机动效

前几天遇到一个需求&#xff0c;产品告诉我说&#xff0c;希望这些字可以像自动打字那样&#xff0c;一个一个的出来&#xff0c;于是在完成需求的同时&#xff0c;顺便把这个方法记录出来&#xff0c;看大家是否也需要。 目录 1、实现思路 2、html布局和css样式 3、预定义…

【数据库】什么是关系型数据库和非关系型数据库

数据库分类关系型数据库非关系型数据库键值对存储数据库列存储数据库搜索引擎数据库面向文档数据库图形数据库数据库优缺点应用程序都离不开数据库&#xff0c;那不同的数据结构&#xff0c;就会存放在不同的数据数据库中&#xff0c;所以数据库按数据结构分为关系型数据库和非…

spring事务失效的一些场景

1、 Transactional 只能作用在public修饰的方法上 spring事务的实现AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断&#xff0c;如果目标方法不是public&#xff0c;则TransactionAttribute返回null&#xff0c;即不支持事务。 2…

ORB-SLAM3算法和代码学习——跟踪参考关键帧TrackReferenceKeyFrame

0总述 无论是跟踪恒速运动模型还是跟踪参考关键帧&#xff0c;本质上都是基于帧间匹配跟踪。 跟踪恒速模型是当前帧和上一帧之间的匹配&#xff0c;使用基于恒速模型计算得到的位姿作为优化的初始位姿&#xff0c;基于网格和搜索半径寻找匹配关系。 跟踪参考关键帧是当前帧和…

SpringCloudAlibabaSentinel实现网关动态限流

目录 1.SpringCloudAlibabaSentinel实现网关动态限流 1.概念和来历 2.概览及控制台搭建 3.控制台有哪些能力 4.功能及设计理念 5.限流的几种方法 2.SpringCloud Alibaba Sentinel 的降级功能 1.yml中添加配置 2.编写配置类 3.编写兜底工具类 3.Sentinel还对Feigin实…

代码整洁之道,好的代码就是为了更美好的生活

概述 美国童子军有一条简单的军规&#xff1a;让营地比你来时更干净。当梳理代码时&#xff0c;坚守此军规&#xff1a;每次 review 代码&#xff0c;让代码比你发现它时更整洁。 一位大神说过&#xff1a;“衡量代码质量的唯一有效标准&#xff1a;WTF/min”&#xff0c;并配…

14.Isaac教程--Jetbot应用示例

Jetbot应用示例 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 本节介绍如何将 Isaac SDK 与 NVIDIA 新的高性能模拟平台 Omniverse 集成&#xff0c;以让 Jetbot 在模拟中跟随球。 本节作为使用三个 Jetbot 应用程序进入 Omniverse 和 Isaac …

国产的蓝光存储设备能算信创产品吗?

这个问题是客户前几天问我的&#xff0c;笔者只能实事求是的告诉他&#xff1a;目前还不能算&#xff01;首先蓝光存储产品暂时未被列入信创名录&#xff0c;其次蓝光存储中最核心的读写设备&#xff08;蓝光光驱&#xff09;的技术专利和生产工艺基本被日本企业&#xff08;索…

LeetCode 101. 对称二叉树

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 101. 对称二叉树&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 1…

高端运动耳机哪个品牌最好、公认最好的跑步耳机品牌排名

在健身、运动的时候&#xff0c;过程往往是很枯燥的&#xff0c;这时候&#xff0c;如果能有动感的音乐在旁&#xff0c;调动我们的积极性&#xff0c;就再好不过了&#xff0c;所以很多人在运动的时候都会选择佩戴一款运动蓝牙耳机。不过适合运动的蓝牙耳机少之又少&#xff0…