ABAP 快速入门之 Hello World 和 ALV 列表

server/2024/11/30 1:04:25/

ABAP 是 SAP 开发的一种编程语言,用于在 SAP 环境中对业务应用程序进行编程。得益于 ABAP 对象增强功能,ABAP 以前只是过程性语言,现在也是一种面向对象语言。

ABAP 750 文档:ABAP Keyword Documentation (sap.com)

Hello World

PROGRAM zhello_world.
START-OF-SELECTION.WRITE 'Hello, World!'.

ABAP 不会将值打印到控制台,而是写入一个列表,一旦主逻辑执行完毕,列表就会显示出来。

ABAP 面向对象 Hello World

PROGRAM zhello_world.CLASS main DEFINITION FINAL CREATE PRIVATE.PUBLIC SECTION.CLASS-METHODS: start.
ENDCLASS.CLASS main IMPLEMENTATION.METHOD start.cl_demo_output=>display( 'Hello World!' ).ENDMETHOD.
ENDCLASS.START-OF-SELECTION.main=>start( ).

注释

  1. 行注释

同一行中 " 字符之后的任何文本都会被注释掉:

DATA lv_matnr TYPE matnr. " 这里是注释
  1. 块注释

* 字符注释整行。* 字符必须是该行的第一个字符。

* DATA ls_booking TYPE flightb. Nothing on this line will be executed.

控制流语句相关示例

ASSERT

ASSERT 用于您想要绝对确定变量具有特定值的敏感区域。如果 ASSERT 之后的逻辑条件结果为 false,则会抛出无法处理的异常 (ASSERTION_FAILED)。

ASSERT 1 = 1. "No Problem - Program continuesASSERT 1 = 2. "ERROR

CASE

CASE lv_foo.WHEN 1.WRITE: / 'lv_foo is 1'.WHEN 2.WRITE: / 'lv_foo is 2'.WHEN 3.WRITE: / 'lv_foo is 3'.WHEN OTHERS.WRITE: / 'lv_foo is something else'.
ENDCASE

CHECK

CHECK 是一个简单的语句,它计算逻辑表达式,如果为假,则退出当前处理块。

METHOD do_something.CHECK iv_input IS NOT INITIAL. "Exits method immediately if iv_input is initial"The rest of the method is only executed if iv_input is not initial
ENDMETHOD.  

COND/SWITCH

SWITCHCOND 提供了一种特殊形式的条件程序流。与 IFCASE 不同,它们基于表达式而不是执行语句来表示不同的值。这就是为什么它们算作功能性的。

COND

当需要考虑多个条件时,COND 可以完成这项工作。语法相当简单:

COND <type>( WHEN <condition> THEN <value> ... [ ELSE <default> | throw <exception> ]
).

示例:

" Set screen element active depending on radio button
screen-active = COND i(WHEN p_radio = abap_true THEN 1ELSE 0 " optional, because type 'i' defaults to zero
)." Check how two operands are related to each other
" COND determines its type from rw_compare
rw_compare = COND #( WHEN op1 < op2 THEN 'LT'WHEN op1 = op2 THEN 'EQ'WHEN op1 > op2 THEN 'GT' 
).

SWITCH

SWITCH 是一个用于映射值的简洁工具,因为它仅检查相等性,因此在某些情况下比 COND 更短。如果给出了意外的输入,也可能引发异常。语法有点不同:

SWITCH <type>( <variable>WHEN <value> THEN <new_value> ... [ ELSE <default> | throw <exception> ]
).

示例:

DATA(lw_language) = SWITCH string(sy-languWHEN 'E' THEN 'English'WHEN 'D' THEN 'German'" ...ELSE THROW cx_sy_conversion_unknown_langu( )
).

IF/ELSEIF/ELSE

IF lv_foo = 3.WRITE: / 'lv_foo is 3'.
ELSEIF lv_foo = 5.WRITE: / 'lv_foo is 5'.
ELSE.WRITE: / 'lv_foo is neither 3 nor 5'.
ENDIF.

ABAP GRID List (ALV) 相关示例

创建和显示 ALV

此示例描述了使用 cl_salv_table 类进行最简单的 ALV 创建,没有其他格式选项。附加的格式化选项将包含在 TRY ENDTRY 块之后和 alv->display( ) 方法调用之前。

使用 ABAP 对象方法创建 ALV 的所有后续示例都将使用此示例作为起点。

DATA: t_spfli       TYPE STANDARD TABLE OF spfli,alv           TYPE REF TO cl_salv_table,error_message TYPE REF TO cx_salv_msg." Fill the internal table with example data
SELECT * FROM spfli INTO TABLE t_spfli." Fill ALV object with data from the internal table
TRY.cl_salv_table=>factory(IMPORTINGr_salv_table = alvCHANGINGt_table      = t_spfli ).CATCH cx_salv_msg INTO error_message." error handling
ENDTRY." Use the ALV object's display method to show the ALV on the screen
alv->display( ).

启用 ALV 工具栏功能

以下方法调用允许使用许多高级功能,例如排序、过滤和导出数据。

alv->get_functions( )->set_all( ).

在 ALV 中启用每隔一行条纹化

此方法通过为连续行提供交替的背景颜色阴影来提高可读性。

alv->get_display_settings( )->set_striped_pattern( if_salv_c_bool_sap=>true ).

隐藏 ALV 中的列

此示例对 ALV 隐藏 MANDT(客户端)字段。请注意,传递给 get_column( ) 的参数必须大写才能起作用。

alv->get_columns( )->get_column( 'MANDT' )->set_visible( if_salv_c_bool_sap=>false ).

优化 ALV 列宽度

此示例演示如何优化列宽,以便列标题和数据不会被截断。

alv->get_columns( )->set_optimize( ).

重命名 ALV 中的列标题

列文本可能会随着列的水平调整大小而改变。有三种方法可以实现此目的:

  • set_short_text:标题最大长度 10
  • set_medium_text:标题最大长度 20
  • set_long_text:标题最大长度 40

以下示例显示了所有三个的用法。列对象被声明并实例化为对 alv->get_columns( )->get_column( 'DISTID' ) 结果的引用。列名必须全部大写。这样,该方法链接仅在实例化时调用一次,而不是在每次更改列标题时执行。

DATA column TYPE REF TO cl_salv_column.
column = alv->get_columns( )->get_column( 'DISTID' ).column->set_short_text( 'Dist. Unit' ).
column->set_medium_text( 'Unit of Distance' ).
column->set_long_text( 'Mass Unit of Distance (kms, miles)' ).

设置显示的 ALV 的标题

默认情况下,当显示 ALV 时,顶部的标题只是程序名称。此方法允许用户设置最多 70 个字符的标题。以下示例显示如何设置显示记录数的动态标题。

alv->get_display_settings( )->set_list_header( |Flight Schedule - { lines( t_spfli ) } records| ).

http://www.ppmy.cn/server/146035.html

相关文章

4-SpringCloud整合服务间的调用即负载均衡

springcloud目录&#xff1a; 1.Spring Cloud简介 2.SpringCloud整合eureka注册中心 3.SpringCloud整合服务注册 4.SpringCloud整合服务间的调用即负载均衡 5.SpringCloud整合Feign调用 6.SpringCloud整合config配置中心 7.SpringCloud整合zuul路由网关 我们复制一个yqx-user服…

如何有效管理 GitHub API 的请求速率限制并通过认证令牌提高请求额度:完整指南与代码示例

如何有效管理 GitHub API 的请求速率限制并通过认证令牌提高请求额度&#xff1a;完整指南与代码示例 在使用 GitHub API 进行开发时&#xff0c;了解和管理请求速率限制&#xff08;Rate Limiting&#xff09;是至关重要的。GitHub 为了保护其服务器资源&#xff0c;并确保服…

自动控制原理——BliBli站_DR_CAN

自动控制 2 稳定性分析 极点在左半平面 输入为单位冲击&#xff0c;而拉普拉斯变换为1&#xff1b;因此&#xff0c;开环和闭环系统&#xff0c;研究其传递函数的稳定性就可以了 2.5_非零初始条件下的传递函数_含有初始条件的传递函数 如果一个系统的初始条件不为0&#xff0…

Java知识及热点面试题总结(三)

1.使用线程池创建线程的优点 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消…

scala的守卫语句格式

import scala.io.StdIn object test49{//从控制台读入一个数字a,使用&#xff08;StdIn.readInt&#xff09;//如果a>0并且a<3,打印[0-3]//如果a>4并且a<8,打印[4-8]//否则:打印未匹配 // def main(args: Array[String]): Unit { // val aStdIn.readInt()//等…

设备内存指纹

一、前端通过获取Navigator.deviceMemory来查询系统内存。 二、Navigator.deviceMemory 1、navigator_device_memory.idl接口定义&#xff1a; // https://github.com/w3c/device-memory#the-web-exposed-apiinterface mixin NavigatorDeviceMemory {[HighEntropyDirect,Meas…

STM32-- 看门狗--介绍、使用场景、失效场景

STM32 中的看门狗&#xff08;Watchdog Timer&#xff0c;简称 WDG&#xff09;有两种主要类型&#xff1a;独立看门狗&#xff08;IWDG&#xff09; 和 窗口看门狗&#xff08;WWDG&#xff09;。它们的喂狗机制各有特点&#xff0c;主要区别如下&#xff1a; 1. 独立看门狗&a…

基于Java实现的潜艇大战游戏

基于Java实现的潜艇大战游戏 一.需求分析 1.1 设计任务 本次游戏课程设计小组成员团队合作的方式&#xff0c;通过游戏总体分析设计&#xff0c;场景画面的绘制&#xff0c;游戏事件的处理&#xff0c;游戏核心算法的分析实现&#xff0c;游戏的碰撞检测&#xff0c;游戏的反…