关于HTML端SQL报表字段存在特殊字符时的中断空白或报错提示详解
【问题描述】
在SQL报表中,如果字段key存在特殊字符,会在不同版本区间产生以下系统现象:
【1】在补丁版本PT-146939 [8.1.0.20230309]及以后,弹出提示:
【2】在补丁版本PT-146939 [8.1.0.20230309]以前,报表空白:
【3】若使用BOS设计器设计的报表,最新版本提示如下:
【业务场景】
业务场景介绍:
当二开插件中SQL语句字段的key包含特殊字符时,HTML在构造表格时,会根据不同版本,产生上述几种不同的影响。但不论是哪个版本,我们都推荐将特殊字符替换。
【原因分析】
注意:这是HTML端会出现的现象
底层原因是出于HTML是基于JavaScript语言所展示的超文本页面,而JavaScript在对象的读取上,存在一个key使用上的微妙不同。
我们用测试代码举例:
可以看到,上述代码中的测试对象包含了7种含有特殊字符做为key的项。
我们使用两个for循环做输出
【第1个for循环】使用js的 [key] 语法输出,让我们看一下结果:
【第2个for循环】使用js的 .key 语法输出,让我们看一下结果:
相信大家对比上面两张图,可以发现问题所在,原生JavaScript使用 .key 语法时,值与我们预定义的不同了,变成了undefined(未定义)
而这就是问题的根因所在。
星空HTML端底层框架在创建报表时,会根据不同的key,实例化创建不同的函数,以 .key 的方式去返回对应的结果,而如果key出现特殊字符,就会导致读取不到正确的值,从而出现上述影响。
【解决方案】
目前最佳的解决方案,我们仍建议将特殊字符做替换。
一、新版本优化(PT-146939 [8.1.0.20230309]及后续版本)
历史版本中,该问题会以表格空白的形式展示,可能会让使用者产生困惑。
在2023年3月份版本,我们做了一次数据上的优化,以及抛出了对应提示。我们将不含有非法字符的字段做了正常的展示,而将含有非法字符的字段剔除,并抛出对应提示,让使用者可以根据提示,精确定位到哪个字段并作出对应调整。
注:BOS设计器在新版本也不再允许输入特殊字符作为字段key
【疑惑解答】
为什么我们不在代码层面做字段临时替换处理?
原因如下:
【1】特殊字符数量较多且无法预知
为了方便举例,我在上面列出了7个特殊字符,其中甚至包含了表情符号。可见7种特殊字符都会出现undefined的情况,而实际上,输入法的特殊字符何止7种?正是这种不可预知性,让代码层面做替换的方案显得意义不大。
【2】特殊字符对系统的健壮性无益
从代码层面来看,特殊字符作为key,本身就存在不合理性
【3】特殊字符可能存在其它意义导致解析异常
在逻辑表达式中,&&代表且,||代表或,诸如此类,特殊字符的意义广泛,实际上并不利于后续维护,可能会导致其它影响数据的问题
综上,出于系统的健壮性以及后续维护考虑,建议不使用特殊字符作为SQL字段的key以确保报表的正常显示。
(英文或英文拼接下划线,是比较推荐的代码风格,或者也可使用大小驼峰做辨识,例如:test_key、testKey)
【延伸阅读】
https://vip.kingdee.com/link/s/l0T1g
关于HTML端SQL报表字段存在特殊字符时的中断空白或报错提示详解
本文2024-09-23 04:26:19发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-165305.html
- 鼎捷API-TIPTOP-5.生产信息API-作废工单当站入库数据-tt.oapi.wo.report.stockin.data.invalid-soap_oapi00307CN02_s.pdf
- 鼎捷API-TIPTOP-1.企业基础API-查询工作站工作中心数据-tt.oapi.workstation.list.data.query.get-soap_oapi00053CN02_s.pdf
- 鼎捷API-TIPTOP-2.采购信息API-取消审核请购单数据-tt.oapi.purchase.requisitions.data.disapprove-soap_oapi00063CN02_s.pdf
- 鼎捷API-TIPTOP-2.采购信息API-删除请购单数据-tt.oapi.purchase.requisitions.data.delete-soap_oapi00061CN02_s.pdf
- 鼎捷API-TIPTOP-6.帐款信息API-查询应收帐款单列表数据-tt.oapi.accounts.receivable.list.data.query.get-soap_oapi00293CN02_s.pdf
- 鼎捷API-TIPTOP-6.帐款信息API-作废应收帐款数据-tt.oapi.accounts.receivable.data.invalid-soap_oapi00297CN02_s.pdf
- 鼎捷API-TIPTOP-5.生产信息API-读取单笔退料单数据-tt.oapi.picking.return.details.data.read.get-soap_oapi00196CN02_s.pdf
- 鼎捷API-TIPTOP-2.采购信息API-作废收货单数据-tt.oapi.purchase.receipt.data.invalid-soap_oapi00127CN02_s.pdf
- 鼎捷API-TIPTOP-3.销售信息API-创建销售订单数据-tt.oapi.sales.order.data.create-soap_oapi00182CN02_s.pdf
- 鼎捷API-TIPTOP-2.采购信息API-更新请购变更单数据-tt.oapi.purchase.requisitions.change.data.update-soap_oapi00129CN02_s.pdf