Methods of CL_DEMO_OUTPUT

PS:自己测试是display后的内表不能带表头。

类CL_DEMO_OUTPUT 在示例程序中创造了很多简单的数据输出的方法而不需要经典的list。这个类可以通过静态或实例化的方式使用。下面这些方法在输出流中创建输出。

  • 方法BEGIN_SECTION,NEXT_SECTION和END_SECTION创建标题和开始或结束标题级别。
  • 方法WRITE_DATA,WRITE_TEXT,WRITE_XML,WRITE_JSON和WRITE_HTML显示不同类型的输出。
  • 使用WRITE_DATA可以输出基本类型对象(不是引用类型),结构的组件和内表的行类型。
  • 其它方法创建格式化的输出数据如xml ,json,HTML。
  • 方法写是通用的。它处理ABAP数据和文本(非比例格式)。
  • 方法DISPLAY_……(只提供静态方法)工作方式为WRITE_…,但请关闭当前输出流并打开一个新的输出流。如果SAP GUI可用,则输出将显示在窗口中。
  • 方法行创建一个横向行。
  • 方法DISPLAY关闭当前输出流并打开一个新的输出流。如果SAP GUI可用,则输出将显示在窗口中。还可以选择像forWRITE一样传递数据来显示。
  • 方法GET的工作方式与DISPLAY类似,但不显示数据。相反,格式化的输出数据以文本字符串的形式返回,可以进一步处理。
  • 标准输出格式是HTML。您还可以选择使用制表器和换行符来选择简单的文本格式。您可以为静态方法选择带有SET_MODE方法的格式,也可以为实例方法选择factory methodNEW的输入参数模式。
  • CL_DEMO_OUTPUT类在自SP07以来的7.03/7.31版本和更高版本中可用。它有一个类文档。

代码示例

最简单和常见的用法如下:

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[ ]-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[ ]-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 ).

这将产生与上面第一个示例相同的输出。

您还可以检查和运行以下程序,以获得所有可能性的完整概述:

  • DEMO_USAGE_OUTPUT_STATIC
  • DEMO_USAGE_OUTPUT_INSTANCE

例子如下:

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循环…)。

cl_demo_output=>display 介绍的更多相关文章

  1. display属性详解

    内容: 1.display介绍 2.display分类 3.块级标签和内联标签 4.inline-block应用 1.display介绍 display:display属性设置元素如何被显示 2.di ...

  2. ABAP中的AMDP(ABAP-Managed Database Procedures )

    ABAP管理下的数据库存储过程(ABAP-Managed Database Procedure,以下简称AMDP)是在APAP on SAP HANA开发中的一种优化模式.AMDP使用数据库语言书写, ...

  3. 我的BRF+自学教程(一):公式(formula)

    Business Rule Framework Plus(业务规则框架,以下简称BRFplus或BRF+)是一个强大的工具, 它允许用户以直观的方式对规则建模,并在不同的应用程序中重用这些规则.通过它 ...

  4. 【第四篇】SAP ABAP7.5x新语法之CREATE DATA&INTERFACE

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之CREATE DA ...

  5. ABAP实现Geohash

    前几天群里有人问ABAP有没有Geohash函数,用来帮助SAP存储门店位置.实现对附近门店查找的功能.因为没有查到,所以我动手写了一个. Geohash是什么 Geohash是一种公共域地理编码系统 ...

  6. ABAP实现Blowfish加密算法

    看到SAP社区中有人问是否存在ABAP实现的Blowfish加密算法,无人回答.于是动手实现了一个blowfish-abap.通过blowfish-abap可以在SAP系统中使用Blowfish对数据 ...

  7. 动态SQL屏幕条件选择(里面还有赋值的新语法)

    有时候屏幕条件中使用PARAMETERS时候,如果你为空的话,会查不出数据,但是可能你的想法是不想限制而已,但是系统默认理解为了空值,这个时候,如果取判断一下条件是不是空,在SQL里决定写不写的话,会 ...

  8. ABAP 7.4 新语法-内嵌生命和内表操作

    1.内嵌声明 2.内表操作 3.opensql ************************************************************************ 1. ...

  9. ABAP 7.52 中的Open SQL新特性

    S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52. 本文翻译了更新文档中有关Open SQL的部分 本文链接:http://www.cnblogs.com/hhelibe ...

随机推荐

  1. linux下录屏和回放工具script和scriptreplay

    读书是一个长见识的过程,以前偶尔会用到录屏的工具,很少用想系统的学习一下.最近看了linux shell脚本攻略,发现很多新东西是以前自己没有接触到的.比如,这个非常好用的录屏工具:script,这次 ...

  2. javascript ES6 新特性之 class

    在之前的文章中我们讲过原型,原型链和原型链继承的文章,在 ES6 中为我们提供了更为方便的 class,我们先来看一下下面的例子: function Person(name) { //构造函数里面的方 ...

  3. .NET Core 实现 腾讯云云解析简单客户端

    一.说明 腾讯云的.NET SDK虽然非常强大,但是对他的产品支持不是很完全,域名的云解析就没有SDK,所以自己写了一个,初衷是用来做动态DNS的,也准备接入多个云厂商,但是我自己本身仅仅只有腾讯云这 ...

  4. Linux CentOS上安装 MySQL 8.0.16

    前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...

  5. Python中经典排序方法

    数据的排序是在解决实际问题时经常用到的步骤,也是数据结构的考点之一,下面介绍10种经典的排序方法. 首先,排序方法可以大体分为插入排序.选择排序.交换排序.归并排序和桶排序四大类,其中,插入排序又分为 ...

  6. JS 实现

    JavaScript 使用 HTML 中的脚本必须位于<script> 与 </script>标签之间. 脚本可被放置在 HTML 页面的 <body>和 < ...

  7. 使用NDK(r20)编译FFmpeg

    前两天在论坛上看到一个问题,大意是怎么在UBUNTU下使用NDK-r20编译FFmpeg.我第一反应是不该用r20,因为我在很早前用过没有gcc版本的NDK,发现有很多问题不能编译,就立马回复了个使用 ...

  8. eclipse git 主干代码合并到分支

    https://blog.csdn.net/wwd0501/article/details/80676807 eclipse git 主干代码合并到分支: 1.项目切换至分支: 2.选中项目右键--& ...

  9. 使用VSCode创建一个Vue项目

    vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v          //(版本低引起:bas ...

  10. 【课件】git零基础快速入门实战--重点讲解,在实际生产中整合idea对版本、分支的管理等

    1.git简单描述 git是重要的版本管理工具,几乎每个码农都有自己的git账号管理自己的代码,同时很多公司也是用git管理公司的代码, 因此掌握git在实际生产中的常规使用非常重要. 2.git学习 ...