微信公众号:次世代数据技术 关注可了解更多的教程。问题或建议,请公众号留言或联系本人; 如果您有报表开发需求或者定制化功能开发,也可以联系本人; 微信号:weibw162
本教程视频讲解可以关注本人B站进行观看:次世代数据技术 同时,您也可以在抖音及微信视频号平台搜索次世代数据技术进行观看。
一、需求描述
部分企业在使用FineReport时,不仅仅作为报表展示工具来使用,也会使用其开发一些业务功能。在传统的ERP系统中常见一种跨表单的复制功能,如直接复制明细表中的一行数据,一键粘贴到某个填报表表单中,系统会自动填充对应字段。FineReport目前是不支持该操作的,本文提供一种方案。
本方案的实现步骤如下:
- 通过调用clipboard.writeText()接口,将明细表中的字段传递到剪切板中。
- 在填报表中点击粘贴时调用clipboard.readText()接口将剪切板中的内容赋值给指定的单元格中。
注1:不支持移动端使用。注2:本文涉及到的技术及流程均仅在FineReport 11.0 版本进行实际验证,如果您在使用过程中出现问题可以联系本作者。
二、具体操作
第一步
给明细表行末增加一个复制按钮,然后新增一个超级链接
,类型选择为JavaScript脚本
。
第二步
在超级链接中填入对应JavaScript代码及公式。 JavaScript代码如下:
navigator.clipboard.writeText(cutText).then(
() => { console.log("复制成功!") },
() => { console.log("复制失败!") });
navigator.clipboard.writeText(cutText).then(
() => { console.log("复制成功!") },
() => { console.log("复制失败!") });
2
3
另外,需要增加一个参数,参数名为cutText
,值为公式,如下所示:
CONCATENATE('{',
'"订单ID":', B2,
',"产品ID":', C2,
',"单价":', D2,
',"数量":', E2,
',"进价":', F2,
',"折扣":', G2,
'}')
CONCATENATE('{',
'"订单ID":', B2,
',"产品ID":', C2,
',"单价":', D2,
',"数量":', E2,
',"进价":', F2,
',"折扣":', G2,
'}')
2
3
4
5
6
7
8
注意:该公式的作用是将需要复制的字段组成一个json字符串,大家在实际使用过程中药根据实际场景调整一下单双引号的使用方式。
第三步
在填报表单界面增加一个粘贴按钮,并给按钮添加一个点击事件。
第四步
在按钮的点击事件中填入如下代码:
navigator.clipboard.readText().then((clipText) => {
var c = $.parseJSON(clipText);
_g().setCellValue("B1", c.订单ID);
_g().setCellValue("B2", c.产品ID);
_g().setCellValue("B3", c.单价);
_g().setCellValue("B4", c.数量);
_g().setCellValue("B5", c.进价);
_g().setCellValue("B6", c.折扣);
})
navigator.clipboard.readText().then((clipText) => {
var c = $.parseJSON(clipText);
_g().setCellValue("B1", c.订单ID);
_g().setCellValue("B2", c.产品ID);
_g().setCellValue("B3", c.单价);
_g().setCellValue("B4", c.数量);
_g().setCellValue("B5", c.进价);
_g().setCellValue("B6", c.折扣);
})
2
3
4
5
6
7
8
9
该段代码的作用就是从剪切板中获取到上一步的复制数据,然后转成JSON对象,再通过_g().setCellValue()接口将对应的字段的值赋值给指定的单元格内。
三、注意事项
1、由于本文使用了clipboard
的相关接口,所以大家在使用时要注意浏览器的兼容性,MDN文档中针对此接口的浏览器兼容性说明如下:
2、本方案在最后一步使用了_g().setCellValue()
接口,考虑到工程版本接口兼容性问题,大家可以在实际开发使用过程中针对不同的FineReport版本使用对应版本的接口。
四、模板文件下载
扫码即可下载文档示例模板及其他代码文件 如果您在阅读或实际操作过程中有问题,可以随时添加作者好友进行咨询。