原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
动态报表D-Query 是一个用于取代标准QUERY的程序.使用动态报表无需写代码,非开发人员也可生成专业的报表程序.
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query简介
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486429&idx=1&sn=8cbab08040255baa4c7495e6e106230d&chksm=cf5dd6ebf82a5ffdf6cd2cca5ef3b3a298dcb7e3aac2b4cae5073af9c6720bf57b5544c57a49&token=1781044124&lang=zh_CN&scene=21#wechat_redirect)
**本文主要介绍动态报表对SQL语句显示的优化**
二
旧版SQL显示
之前写了一篇文章,介绍了动态报表添加SQL语句的显示,
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query 添加SQL语句显示
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247488177&idx=1&sn=2170b1fe88a90dd7dad75d2bb54acee5&chksm=cf5dcf87f82a46918fcae321000c8d773a30011fc29f53b859ef21ffa417a571b4ead2e65b0f&token=1582959201&lang=zh_CN#rd)
当时就感觉显示的SQL语句的易读性比较差,一直想着优化一下这个SQL的显示
三
新版SQL显示
新版SQL显示做了如下的改进
• 关键字粗体呈现
• 字段分行呈现
• 关联表分行呈现
• 同时呈现两种SQL语句:ABAP SQL和 HANA SQL
• 分别用不同的注释方式标记ABAP SQL 和 HANA SQL
点击显示SQL语句后,依次显示ABAP SQL 和 HANA SQL,显示的SQL语句去掉了INTO子句部分, 以便于复制粘贴到其它SQL编辑器中使用.
四
ABAP SQL语句的执行
事务代码ZTOAD 执行ABAP SQL
ZTOAD是网上流传的 ABAP SQL编辑器,可以编写执行ABAP SQL语句(去掉 INTO子句部分),但是因为ABAP SQL语法的新功能比较多.
这个编辑器对有些ABAP SQL会误报错,该工具不可全信.
**动态报表呈现的 ABAP SQL 全文复制到ZTOAD中即可使用**
五
HANA SQL语句的执行
DB02 SQL编辑器执行HANA SQL
HANA SQL编辑器有多个事务代码入口. 比较常用的是DB02 ,进去后,找到诊断中的SQL编辑器,双击即可使用,
HANA SQL编辑器可以存储SQL语句,方便下次获取后使用
**动态报表呈现的HANA SQL 全文复制到 HANA SQL编辑器中即可直接使用.**
六
实现过程
创建了类 ZCL_PRETTY_PRINT_SQL 来输出 SQL语句,
尝试了很多方法,
• EDITOR-CALL FOR 语句
• cl_demo_output类
• PRETTY_PRINTER函数
最终采用 cl_demo_output ,输出较好看,并且可以直接复制,粘贴到其它SQL编辑器中
其中分行部分,需要用到ABAP特殊字符 cl_abap_char_utilities=>newline
DEMO_OUTPUT_NEW是最终使用的SQL显示方法
七
源代码
SQL显示源代码的优化方法如下
其中使用 cl_demo_output=>next_section 方法输出关键字,
使用 cl_demo_output=>write_text 方法输出关键字后面附带的子句
**后续改进: 在SELECT 字段名后面添加 字段的描述,类型,长度等信息 在表名后面添加表的描述信息**
八
总结
添加并优化SQL语句的显示看起来只是一个很简单的改进, 却能让动态报表的使用人员感受到更加友好的交互.
当查询报错或对查询结果有质疑时,可以通过查看/核对SQL语句来检查动态报表的表连接,字段选择等问题. 更加方便的定位错误原因.
也可以通过对SQL的调整,实现一些无法通过动态报表配置的更复杂的SQL, 同时这些复杂SQL可以通过 一键生成程序固定成一个报表程序.
> 详见链接 无峰,公众号:ABAP开发技巧 [ SAP工具箱之一键生成报表
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247484616&idx=1&sn=0ace84b7fb5a0faf1e468d7530538ef8&chksm=cf5dd9fef82a50e81f5d26d7a4cef2555d6ee5439428e25b554fa03363426dee1bfc26fdef56&token=1781044124&lang=zh_CN&scene=21#wechat_redirect)