PS:自己测试是display后的内表不能带表头。
类CL_DEMO_OUTPUT 在示例程序中创造了很多简单的数据输出的方法而不需要经典的list。这个类可以通过静态或实例化的方式使用。下面这些方法在输出流中创建输出。
代码示例
最简单和常见的用法如下:
SELECT * FROM SCARR INTO TABLE @DATA(IT_TAB). CL_DEMO_OUTPUT=>DISPLAY( IT_TAB ).
使用CL_DEMO_OUTPUT的多个静态方法的程序可能如下所示:
SELECT * FROM SCARR INTO TABLE @DATA(CARRIERS). CALL TRANSFORMATION ID SOURCE CARRIERS = CARRIERS RESULT XML DATA(XML). CL_DEMO_OUTPUT=>BEGIN_SECTION( `Some Text` ). CL_DEMO_OUTPUT=>WRITE_TEXT( |blah blah blah \n| && |blah blah blah| ). CL_DEMO_OUTPUT=>NEXT_SECTION( `Some Data` ). CL_DEMO_OUTPUT=>BEGIN_SECTION( `Elementary Object` ). CL_DEMO_OUTPUT=>WRITE_DATA( CARRIERS[ 1 ]-CARRID ). CL_DEMO_OUTPUT=>NEXT_SECTION( `Internal Table` ). CL_DEMO_OUTPUT=>WRITE_DATA( CARRIERS ). CL_DEMO_OUTPUT=>END_SECTION( ). CL_DEMO_OUTPUT=>NEXT_SECTION( `XML` ). CL_DEMO_OUTPUT=>WRITE_XML( XML ). CL_DEMO_OUTPUT=>DISPLAY( ).
由于这看起来很丑陋,如果你在一个程序中调用了类的3到4个以上的方法,最好使用实例方法而不是静态方法:
CL_DEMO_OUTPUT=>NEW( )->BEGIN_SECTION( `Some Text` )->WRITE_TEXT( |blah blah blah \n| && |blah blah blah| )->NEXT_SECTION( `Some Data` )->BEGIN_SECTION( `Elementary Object` )->WRITE_DATA( CARRIERS[ 1 ]-CARRID )->NEXT_SECTION( `Internal Table` )->WRITE_DATA( CARRIERS )->END_SECTION( )->NEXT_SECTION( `XML` )->WRITE_XML( XML )->DISPLAY( ).
静态方法和实例方法如何具有相同的名称?
实例方法是接口方法。方法NEW返回一个类型为IF_DEMO_OUTPUT的引用变量。这个接口由CL_DEMO_OUTPUT实现。接口方法具有与类的静态方法相同的名称。
为什么要将这些方法链接起来呢?
为了方便起见,每个实例方法都返回自我参考。
如果你想要一个更简单的输出,你可以切换到文字模式:
SELECT * FROM SCARR INTO TABLE @DATA(IT_TAB). CL_DEMO_OUTPUT=>new( ‘TEXT‘ )->DISPLAY( it_tab ).
如果你想自己处理生成的格式化数据,你可以使用GET而不是DISPLAY:
SELECT * FROM SCARR INTO TABLE @DATA(IT_TAB). DATA(HTML) = cl_demo_output=>GET( it_tab ). CL_ABAP_BROWSER=>SHOW_HTML( HTML_STRING = HTML ).
这将产生与上面第一个示例相同的输出。
您还可以检查和运行以下程序,以获得所有可能性的完整概述:
例子如下:
ADT中的ABAP关键字文档(即Eclipse中的ABAP)提供了一个框架如何使用CL_DEMO_OUTPUT的示例。如果ABAP示例库的示例使用CL_DEMO_OUTPUT,则文档框架允许您执行示例并显示输出。这是通过从cl_demo_output获取HTML输出并将其合并到(非SAP GUI)文档显示中来实现的。
另一个例子相当引人注目。CL_DEMO_OUTPUT在SAP Teched 2013上亮相!
以下是Vishal Sikka博士主题演讲的截图:
(B.t.w。,请参阅AMDP, SQLScript与Open SQL的比较,以进一步查看该示例的性能结果;上面糟糕的ABAP结果来自嵌套的SELECT循环…)。
原文:https://www.cnblogs.com/BruceKing/p/11445610.html